Dazu gibt es zwei Möglichkeiten:Setzen Sie das Verzeichnis auf "world" beschreibbar oder erstellen Sie eine neue Gruppe für die beiden Benutzer und machen Sie das Verzeichnis für diese Gruppe beschreibbar.
Offensichtlich ist es eine schlechte Sache, es weltweit beschreibbar zu machen, also ist die zweite Option vorzuziehen.
Benutzer in Linux können mehreren Gruppen angehören. In diesem Fall möchten Sie eine ganz neue Gruppe erstellen, nennen wir sie tomandruser
:
sudo groupadd tomandruser
Da die Gruppe jetzt existiert, fügen Sie ihr die beiden Benutzer hinzu:
sudo usermod -a -G tomandruser tomcat6
sudo usermod -a -G tomandruser ruser
Jetzt müssen nur noch die Berechtigungen für das Verzeichnis festgelegt werden:
sudo chgrp -R tomandruser /path/to/the/directory
sudo chmod -R 770 /path/to/the/directory
Jetzt können nur Mitglieder der Gruppe tomandruser alles innerhalb des Verzeichnisses lesen, schreiben oder ausführen. Beachten Sie das Argument -R zu den Befehlen chmod und chgrp:das weist sie an, in jedes Unterverzeichnis des Zielverzeichnisses zu rekursieren und jede Datei und jedes Verzeichnis, das sie finden, zu modifizieren.
Sie können 770 auch in etwas wie 774
ändern wenn Sie möchten, dass andere die Dateien lesen können, 775
wenn Sie möchten, dass andere die Dateien lesen und ausführen usw. Änderungen der Gruppenzuweisung werden erst wirksam, wenn sich die Benutzer ab- und wieder anmelden.
Wenn Sie auch wollen (was Sie wahrscheinlich tun), dass neue Dateien, die von einem der Benutzer im Verzeichnis erstellt wurden, automatisch von anderen in der Gruppe beschreibbar sind, dann sehen Sie hier.
Das folgende Skript zeigt ein Beispiel für r (read) / w (write) / x (execute)
Berechtigung für den angegebenen Ordnerpfad /path/to/the/directory
für USER1
und USER2
. Wenn Sie nur Schreibzugriff gewähren möchten, ersetzen Sie bitte rwx
mit 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
Meinungsstarke Antwort:
- Ich lege meinen freigegebenen Ordner gerne an einem zentralen Ort ab. Nicht im Home-Ordner von jemand anderem, sondern
/srv/common
oder sogar (für rücksichtslos kurze Wege...)/repo
oder ähnliches. - definieren Sie eine neue Gruppe (normalerweise für alle lokalen Benutzer, denen Sie beitreten möchten. Allerdings nicht für einige technische Benutzer wie
wwwuser
, es sei denn, es gibt einen triftigen Grund) root
ist gut als Mitglied zu haben, auch einen neutralen Eigentümer dieses freigegebenen Ordners zu haben- setGid ist sehr wichtig, damit neue Dateien zu einer gemeinsamen Gruppenmitgliedschaft werden, also
frank:common
, nichtfrank: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 {} \\\;