Existují dva způsoby, jak to udělat:nastavit adresář na zapisovatelný "world" nebo vytvořit novou skupinu pro dva uživatele a umožnit zápis do adresáře této skupině.
Je zřejmé, že to, aby se to dalo světově zapisovat, je špatná věc, takže je vhodnější druhá možnost.
Uživatelé v Linuxu mohou patřit do více než jedné skupiny. V tomto případě chcete vytvořit zcela novou skupinu, nazvěme ji tomandruser
:
sudo groupadd tomandruser
Nyní, když skupina existuje, přidejte do ní dva uživatele:
sudo usermod -a -G tomandruser tomcat6
sudo usermod -a -G tomandruser ruser
Nyní zbývá pouze nastavit oprávnění k adresáři:
sudo chgrp -R tomandruser /path/to/the/directory
sudo chmod -R 770 /path/to/the/directory
Nyní mohou číst, zapisovat nebo spouštět cokoli v adresáři pouze členové skupiny tomandruser. Všimněte si argumentu -R u příkazů chmod a chgrp:ten jim říká, že se mají vrátit do každého podadresáře cílového adresáře a upravit každý soubor a adresář, který najde.
Můžete také chtít změnit 770 na něco jako 774
pokud chcete, aby ostatní mohli číst soubory, 775
pokud chcete, aby ostatní četli a spouštěli soubory atd. Změny přiřazení skupin se neprojeví, dokud se uživatelé neodhlásí a znovu nepřihlásí.
Pokud také chcete (pravděpodobně chcete), aby nové soubory vytvořené v adresáři jedním z uživatelů byly automaticky zapisovatelné ostatními ve skupině, podívejte se sem.
Následující skript ukazuje příklad r (read) / w (write) / x (execute)
oprávnění k dané cestě ke složce /path/to/the/directory
pro USER1
a USER2
. Pokud chcete udělit pouze přístup pro zápis, nahraďte rwx
s 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
Názorová odpověď:
- Rád dávám svou sdílenou složku na centrální místo. Ne v domovské složce někoho jiného, ale
/srv/common
nebo dokonce (pro nemilosrdně krátké cesty...)/repo
nebo podobně. - definujte novou skupinu (obvykle pro všechny místní uživatele, ke kterým se chcete připojit. Ne však někteří techničtí uživatelé jako
wwwuser
, pokud neexistuje pádný důvod) root
je dobré mít jako člena, také mít neutrálního vlastníka této sdílené složky- setGid je velmi důležité, aby se nové soubory staly společným členstvím ve skupině, tedy
frank:common
, nikolifrank: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 {} \\\;