Ci sono due modi per farlo:imposta la directory su "world" scrivibile o crea un nuovo gruppo per i due utenti e rendi la directory scrivibile a quel gruppo.
Ovviamente renderlo scrivibile in tutto il mondo è una brutta cosa, quindi è preferibile la seconda opzione.
Gli utenti in Linux possono appartenere a più di un gruppo. In questo caso vuoi creare un nuovo gruppo, chiamiamolo tomandruser
:
sudo groupadd tomandruser
Ora che il gruppo esiste, aggiungi i due utenti:
sudo usermod -a -G tomandruser tomcat6
sudo usermod -a -G tomandruser ruser
Ora non resta che impostare i permessi sulla directory:
sudo chgrp -R tomandruser /path/to/the/directory
sudo chmod -R 770 /path/to/the/directory
Ora solo i membri del gruppo tomandruser possono leggere, scrivere o eseguire qualsiasi cosa all'interno della directory. Nota l'argomento -R dei comandi chmod e chgrp:questo dice loro di ricorrere a ogni sottodirectory della directory di destinazione e modificare ogni file e directory che trova.
Potresti anche voler cambiare 770 in qualcosa come 774
se vuoi che altri possano leggere i file, 775
se desideri che altri leggano ed eseguano i file, ecc. Le modifiche all'assegnazione di gruppo non avranno effetto fino a quando gli utenti non si disconnetteranno e riaccederanno.
Se vuoi anche (probabilmente lo vuoi) che i nuovi file creati all'interno della directory da uno degli utenti siano automaticamente scrivibili da altri nel gruppo, allora vedi qui.
Lo script seguente mostra un esempio per dare r (read) / w (write) / x (execute)
autorizzazione al percorso della cartella specificato /path/to/the/directory
per USER1
e USER2
. Se vuoi concedere solo l'accesso in scrittura, sostituisci rwx
con w
.
#!/bin/bash
# Block others and people in the same group to do `r/w/x` on the give folder:
sudo chmod 700 /path/to/the/directory
# Give read/write/execute access to USER1 on give folder:
sudo setfacl -R -m user:USER1:rwx /path/to/the/directory
# Give read/write/execute access to USER2 on give folder:
sudo setfacl -R -m user:USER2:rwx /path/to/the/directory
Risposta di opinione:
- Mi piace mettere la mia cartella condivisa in un posto centrale. Non nella cartella home di qualcun altro, ma in
/srv/common
o anche (per percorsi spietatamente brevi...)/repo
o simili. - definisci un nuovo gruppo (tipicamente per tutti gli utenti locali, a cui vuoi unirti. Tuttavia non alcuni utenti tecnici come
wwwuser
, a meno che non ci sia un motivo valido) root
è bene avere come membro, anche avere un proprietario neutrale di quella cartella condivisa- setGid è molto importante, in modo tale che i nuovi file diventino membri di un gruppo comune, quindi
frank:common
, nonfrank:frank
sudo groupadd -f common
usermod -aG common root
usermod -aG common frank
usermod -aG common mike
# sort of hack for instant group refresh w/o logout
# superuser.com/a/345051
su - frank
# sanity test1:
cat etc/group | grep common
common:x:1008:root,frank,mike
# sanity test2:
groups
frank adm cdrom ... common
sudo chown root:common /repo
# (if you have shareable stuff setting somewhere else,
# copy it to here now)
# no right to the world, the right rights to user and group
chmod -R ug+rwXs,o-rwx $dest
# why uppercase X ? → unix.stackexchange.com/a/416885
# why s ? → superuser.com/a/277785
# as there is no such thing as an uppercase S (directories only)
# settings the s attribute on preexisting content would have to happen
# like so:
# find /repo -type d -exec chmod g+s {} \\\;