Gruppenberechtigungen für die Dateien anderer Benutzer erteilen

Gruppenberechtigungen für die Dateien anderer Benutzer erteilen

Ich verwende Debian 7 und habe einen neuen Benutzer (Website) mit einem htdocs-Verzeichnis wie diesem erstellt:

$ sudo adduser website
$ sudo mkdir -p /home/website/htdocs
$ sudo chown -R website /home/website

Nun möchte ich, dass Benutzer einer anderen Gruppe (Entwickler) Zugriff auf das Verzeichnis des Benutzers haben. Ich habe Folgendes versucht:

$ sudo chown -R :developers /home/website

Ich sehe zwar, dass die Gruppe zugewiesen ist (mit ls -laoder stat) und dass die Benutzer in der Gruppe sind, aber sie haben keinen Zugriff, oder?

drwxr-xr-x     3     website     developers     4096 May 3 09:09     website

Ich will auch:

  • Einer anderen Gruppe, „Auftragnehmern“, Zugriff auf Websitedateien gewähren

  • Beschränken Sie den Zugriff von Website-Benutzern ausschließlich auf ihre Home-Verzeichnisse

  • Stellen Sie sicher, dass neue Websitedateien diese Berechtigungen erben

Müssen Sie Zugriffskontrolllisten verwenden oder gibt es hierfür eine bessere Möglichkeit (z. B. indem Sie nicht für jede Site einen separaten Benutzer verwenden)?

Antwort1

Es ist schwierig, präzise Befehle zu geben, ohne das Betriebssystem oder die Distribution zu kennen. Und ja! ACL würde funktionieren, aber es gibt auch eine Standardmethode.

Es gibt adduserund useradd, einer davon auf Ihrer Distribution erstellt möglicherweise automatisch das Home-Verzeichnis des Benutzers. Wenn dies der Fall ist, /etc/skel/wird der Inhalt des Verzeichnisses in das Home-Verzeichnis des Benutzers kopiert, Berechtigungen festgelegt und möglicherweise werden einige andere geeignete Aktionen ausgeführt.

Es gibt möglicherweise vordefinierte Gruppen zum Teilen, wie z. B. „Mitarbeiter“. Wenn Sie jedoch eine eigene Gruppe zum Teilen erstellen möchten, ist das auch kein Problem. Erstellen Sie also eine neue Gruppe oder verwenden Sie eine vorhandene Gruppe. Stellen Sie sicher, dass Benutzer, die Mitglieder der Gruppe sein sollen, je nach Betriebssystem mit , oder als solche definiert wurden usermod. moduserJeder vigraktuell angemeldete Benutzer muss sich ab- und wieder anmelden, um Mitglied einer neuen Gruppe zu werden.

Erstellen Sie ein gemeinsames Verzeichnis für alle Benutzer, z. B. /home/share_directory/oder ein anderes Verzeichnis, das für Ihre Situation am sinnvollsten ist. Eine relevante Best Practice besteht darin, kein Verzeichnis zu verwendeninnerhalbdas Home-Verzeichnis eines beliebigen Benutzers. Wenn niemand außer dem Eigentümer und der Gruppe Dateien im Verzeichnis sehen können soll, ändern Sie die Berechtigungen des Verzeichnisses auf 0770. Wenn das Lesen durch „andere“ in Ordnung ist, verwenden Sie 0775. Der Eigentümer des Verzeichnisses sollte mit ziemlicher Sicherheit root sein.

chown root:group_name /home/share_directory/

Als nächstes ändern Sie das Setuid-Bit.

chmod +s /home/share_directory/

Wenn kein Benutzer die Datei eines anderen Benutzers ändern dürfen soll, setzen Sie zusätzlich das Stick-Bit.

chmod +t /home/share_directory/

Diese Beispiele setzen sowohl das Setuid- als auch das Sticky-Bit gleichzeitig mitOktalnotation.

chmod 5775 /home/share_directory/

oder

chmod 5770 /home/share_directory/

Für die aktualisierte Frage scheint ACL das richtige Tool zu sein. Die meisten Linux-Distributionen enthalten die aclOption mittlerweile in der defaultsOption. Wenn Ihre Distribution die Option nicht aclstandardmäßig enthält, ist ein wenig Arbeit erforderlich, um sie verwenden zu können. Mounten Sie zunächst die Dateisysteme mit der aclOption in /etc/fstab.

sudo vim /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1

Mounten Sie das Dateisystem bei Bedarf erneut: sudo mount -o remount,acl /. Erstellen Sie dann eine Gruppe, zu der ein Benutzer zu diesem Zweck gehören kann. Möglicherweise müssen Sie auch die ACL-Tools installieren: apt-get install acl.

sudo groupadd developers
sudo usermod -a -G developers $username

(Oder die Gruppe besteht aus „Auftragnehmern“.) Ein aktuell angemeldeter Benutzer muss sich ab- und wieder anmelden, um Mitglied der neuen Gruppe zu werden. Tun Sie dies natürlich nicht, wenn Sie Inhalte im Verzeichnis /var/www haben, die Sie behalten möchten, aber nur um die Einrichtung für den Anfang zu veranschaulichen:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -d -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g:contractors:rwx,o::r-x /var/www/public

Oben setfaclsind die Unterschiede zwischen den Befehlen folgende: Die erste Instanz verwendet die Standardgruppe (Gruppenbesitzer des Verzeichnisses), während die zweite eine Gruppe explizit angibt. Der -dSchalter legt die Standardmaske ( -m) für alle neuen Dateisystemobjekte innerhalb des Verzeichnisses fest. Wir müssen den Befehl jedoch auch erneut ohne den -dSchalter ausführen, um die ACL auf das Verzeichnis selbst anzuwenden. Ersetzen Sie dann Verweise auf „/var/www“ durch „/var/www/public“ in einer Konfigurationsdatei und laden Sie neu.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Wenn wir das Löschen und Umbenennen für alle außer dem Benutzer, der die Datei erstellt hat, einschränken möchten: sudo chmod +t /var/www/public. Wenn wir also Verzeichnisse für Frameworks erstellen möchten, die außerhalb des Apache-Dokumentstamms existieren, oder vielleicht vom Server beschreibbare Verzeichnisse erstellen möchten, ist das immer noch einfach.

Für Apache beschreibbares Protokollverzeichnis:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Apache-lesbares Bibliotheksverzeichnis:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs

Ein bisschen „Spielen“ in einem unwichtigen Verzeichnis sollte helfen, es für Ihre Situation genau richtig einzustellen.

Bezüglich der Einschränkungen verwende ich zwei verschiedene Ansätze: Die Shell rsshwurde so konzipiert, dass sie SCP/SFTP-Zugriff, aber keinen SSH-Zugriff bietet. Alternativ können Sie zur Beschränkung der Verwendung auf ein Home-Verzeichnis das in konfigurierte internal-sftp-Subsystem verwenden /etc/ssh/sshd_config.

Subsystem sftp internal-sftp

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

Erstellen Sie eine Gruppe mit dem Namen, zum Beispiel sftponly. Machen Sie Benutzer zu Mitgliedern der Gruppe sftponly. Ändern Sie ihre Home-Verzeichnisse /aufgrund des Chroots in . Das Verzeichnis /home/Benutzername sollte root gehören. Sie können die Shell des Benutzers auch auf /bin/false setzen, um SSH-Zugriff zu verhindern. Mir geht es hauptsächlich um interaktiven Zugriff, also folgen Sie im Allgemeinen dem rsshPfad. (Sie können nirgendwo schreiben, außer dort, wo ich Schreibberechtigungen definiert habe.)

verwandte Informationen