GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

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

$ sudo chown -R :developers /home/website

Ich kann sehen, dass die Gruppe zugewiesen ist (mit ls -la oder stat ) und dass die Benutzer in der Gruppe sind, aber keine Zugriffsrechte haben?

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

Ich möchte auch:

  • Gewähren Sie einer anderen Gruppe, „Auftragnehmern“, Zugriff auf Website-Dateien

  • Beschränken Sie den Zugriff von Website-Benutzern nur auf ihre Home-Verzeichnisse

  • Stellen Sie sicher, dass neue Website-Dateien diese Berechtigungen erben

Müssen Sie Zugriffskontrolllisten verwenden – oder gibt es einen besseren Weg, dies zu tun (z. B. keinen separaten Benutzer für jede Website zu verwenden)?

Akzeptierte Antwort:

Es ist schwierig, genaue Befehle zu geben, ohne das Betriebssystem oder die Distribution zu kennen; und ja! ACL würde funktionieren, aber es gibt auch einen Standardweg.

Es gibt adduser und useradd , kann einer von ihnen in Ihrer Distribution das Home-Verzeichnis des Benutzers automatisch erstellen. Wenn ja, dann der Inhalt der Datei /etc/skel/ Verzeichnis würde in das Home-Verzeichnis des Benutzers kopiert, Berechtigungen gesetzt und vielleicht könnten einige andere geeignete Aktionen stattfinden.

Es kann Gruppen geben, die zum Teilen vordefiniert sind, wie z. B. „Mitarbeiter“; aber wenn wir unsere eigene Gruppe zum Teilen erstellen wollen, ist daran nichts auszusetzen. Erstellen Sie also eine neue Gruppe oder verwenden Sie eine vorhandene Gruppe. Stellen Sie sicher, dass Benutzer, die Mitglieder der Gruppe sein sollen, mit usermod als solche definiert wurden , moduser , oder vigr vielleicht, je nach Betriebssystem. Jeder derzeit angemeldete Benutzer muss sich abmelden 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 jedes andere Verzeichnis, das für Ihre Situation am sinnvollsten ist. Eine relevante Best Practice besteht darin, ein Verzeichnis nicht innerhalb zu verwenden das 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 für „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 in der Lage sein soll, die Datei eines anderen Benutzers zu ändern, dann setzen Sie auch das Stick-Bit.

chmod +t /home/share_directory/

Diese Beispiele setzen Setuid- und Sticky-Bits gleichzeitig in Oktalschreibweise.

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 jetzt die acl Option in den defaults Möglichkeit. Wenn Ihre Distribution die Datei acl nicht enthält Option standardmäßig, dann ist dies ein wenig Arbeit erforderlich, um sie zu verwenden. Hängen Sie zuerst die Dateisysteme mit dem acl ein Option in /etc/fstab.

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

Hängen Sie das Dateisystem bei Bedarf erneut ein:sudo mount -o remount,acl / . Erstellen Sie dann eine Gruppe, der ein Benutzer zu diesem Zweck angehö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 könnte „Auftragnehmer“ sein.) 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 /var/www-Verzeichnis haben, die Sie behalten möchten, sondern nur, um die Einrichtung 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 der Unterschied zwischen dem setfacl Befehle sind diese:Die erste Instanz verwendet die Standardgruppe (Gruppeneigentümer des Verzeichnisses), während die zweite explizit eine Gruppe angibt. Das -d Schalter legt die Standardmaske fest (-m ) für alle neuen Dateisystemobjekte innerhalb des Verzeichnisses. Allerdings müssen wir den Befehl auch ohne -d erneut ausführen wechseln, 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 von allen einschränken wollten, außer dem Benutzer, der die Datei erstellt hat:sudo chmod +t /var/www/public . Auf diese Weise ist es immer noch einfach, Verzeichnisse für Frameworks zu erstellen, die außerhalb des Apache-Dokumentstammverzeichnisses existieren, oder vielleicht serverbeschreibbare Verzeichnisse zu erstellen.

Verwandte:Debian – Wie konvertiere ich ein 32-Bit (x86) Debian-basiertes System in 64-Bit?

Von 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 wenig „Spielen“ in einem Verzeichnis, das keine Rolle spielt, sollte helfen, dies für Ihre Situation genau richtig zu machen.

Bei Einschränkungen verwende ich zwei verschiedene Ansätze:die Shell rssh , wurde erstellt, um SCP/SFTP-Zugriff bereitzustellen, aber keinen SSH-Zugriff; oder um die Verwendung auf ein Home-Verzeichnis zu beschränken, könnten Sie das internal-sftp-Subsystem verwenden, das in /etc/ssh/sshd_config konfiguriert ist .

Subsystem sftp internal-sftp

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

Erstellen Sie eine Gruppe mit dem Namen beispielsweise sftponly. Machen Sie Benutzer zu Mitgliedern der sftponly-Gruppe. Ändern Sie ihre Home-Verzeichnisse in / wegen der chroot. Das Verzeichnis /home/username sollte root gehören. Sie können die Shell des Benutzers auch auf /bin/false setzen, um den SSH-Zugriff zu verhindern. Meistens mache ich mir Sorgen um den interaktiven Zugriff, also gehe im Allgemeinen mit dem rssh Weg. (Sie können nirgendwo schreiben, außer wo ich die Schreibfähigkeit definiert habe.)


Linux
  1. Ich habe einen Benutzer zu einer Gruppe hinzugefügt, aber Gruppenberechtigungen für Dateien haben immer noch keine Wirkung?

  2. Linux – So legen Sie Standard-Dateiberechtigungen für alle Ordner/Dateien in einem Verzeichnis fest

  3. Wie sortiert man Dateien nach ihren Berechtigungen mit Ls?

  4. PDF-Dateien optimieren (mit Ghostscript oder anderen)

  5. Berechtigungsproblem mit Laravel auf CentOS

So ändern Sie die Dateiberechtigungen in Linux rekursiv

So finden Sie Dateien anhand ihrer Berechtigungen in Linux

Neue Berechtigungen für Dateien nach Rsync von Seedbox erzwingen?

Was führt dazu, dass Dateien Berechtigungen verlieren?

Wie füge ich einen Benutzer zur sudo-Gruppe in einem Linux-VPS hinzu?

Einrichten von passwortlosem sudo auf Linux-Distributionen