So erteilen Sie einem Benutzer Rechte zum Ändern der Eigentümerschaft von Dateien/Verzeichnissen in einem Verzeichnis

So erteilen Sie einem Benutzer Rechte zum Ändern der Eigentümerschaft von Dateien/Verzeichnissen in einem Verzeichnis

Wie gewähre ich einem bestimmten Benutzer das Recht, den Benutzer- und Gruppenbesitz von Dateien und Verzeichnissen innerhalb eines bestimmten Verzeichnisses zu ändern?

Ich habe bei Google gesucht und festgestellt, dass es so etwas gibt wiesetfacl, mit dem Sie Benutzern spezifische Rechte zum Ändern von Berechtigungen für Dateien und Verzeichnisse erteilen können. Soweit ich es gelesen habe, erlaubt dieser Befehl allerdings nicht die Erteilung von Chown-Berechtigungen.

Nehmen wir also an, eine Datei hat

user1 user1 theFile1
user1 user1 theDirectory1

Die Ausgabe des folgenden Befehls würde fehlschlagen.

[user1@THEcomputer]$ chown user2 theFile

Ich habe Root-Zugriff auf den Computer. Gibt es eine Möglichkeit, einem Benutzer das Eingeben von chownBefehlen innerhalb eines Verzeichnisses zu gestatten?

UPDATE: So fügen Sie einen Benutzer zu einer Gruppe hinzu.

Hier ist dasArtikeldatamoverdie ich zur Gruppe hinzugefügt habe hts.

[root@Venus ~]# usermod -a -G datamover hts
[root@Venus ~]# exit
logout
[hts@Venus Receive]$ groups
hts wireshark datamover
[hts@Venus Receive]$ 

UPDATE (bezogen auf den Kommentar von RuiFRibeiro):

Das Ändern des Eigentümers des Verzeichnisses in das Verzeichnis funktioniert nicht, siehe Screenshot.

[datamover@Venus root]$ ls -la
total 311514624
drwxrwxrwx. 6 datamover datamover         4096 Oct 14 14:05 .
drwxr-xr-x  4 root      root              4096 Aug 20 16:52 ..
-rwxrwxrwx. 1 datamover datamover          674 Aug 31 16:47 create_files.zip
drwxrwxrwx  2 datamover datamover         4096 Oct 17 17:07 dudi
-rwxrwxrwx. 1 datamover datamover 318724299315 Oct 13 15:47 Jmr400.mov
-rwxrwxrwx. 1 datamover datamover    182693854 Aug 31 16:47 Jmr_Commercial_WithSubtitles.mov
-rwxrwxrwx. 1 datamover datamover     80607864 Aug 31 16:47 Jmr_DataMover_Final.mov
drwxrwxrwx. 2 datamover datamover       122880 Aug 23 11:54 ManyFiles
drwxrwxrwx. 3 datamover datamover         4096 Oct 25 07:18 Receive
drwxrwxrwx  2 datamover datamover         4096 Oct 14 13:40 sarah
-rwxrwxrwx  1 datamover datamover      3184449 Oct 14 14:05 SourceGrid_4_40_bin.zip
[datamover@Venus root]$ cd ./Receive/
[datamover@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover      4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover      4096 Oct 14 14:05 ..
-rwxrwxrwx  1 hts       hts       182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx  2 datamover datamover    122880 Oct 23 13:33 ManyFiles
[datamover@Venus Receive]$ chown datamover:datamover ./Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of './Jmr_Commercial_WithSubtitles.mov': Operation not permitted

Hier ist ein Versuch als Eigentümer der Datei:

[hts@Venus Receive]$ chown datamover:datamover Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of 'Jmr_Commercial_WithSubtitles.mov': Operation not permitted

Sie sehen also, dass keine der beiden Möglichkeiten funktioniert.

UPDATE (Antwort von Countermode adressieren)

Der Gruppenbesitz kann vom Dateieigentümer (und Root) geändert werden. Dies ist jedoch auf die Gruppen beschränkt, zu denen der Eigentümer gehört.

Ja, man muss sich vorher ausloggen. Hier ist das Ergebnis meines Versuchs:

[hts@Venus ~]$ groups hts
hts : hts wireshark datamover
[hts@Venus ~]$ cd /mnt/DataMover/root/Receive/
[hts@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover      4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover      4096 Oct 14 14:05 ..
-rwxrwxrwx  1 hts       hts       182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx  2 datamover datamover    122880 Oct 23 13:33 ManyFiles
[hts@Venus Receive]$ chown hts:datamover ./Jmr_Commercial_WithSubtitles.mov 
[hts@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover      4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover      4096 Oct 14 14:05 ..
-rwxrwxrwx  1 hts       datamover 182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx  2 datamover datamover    122880 Oct 23 13:33 ManyFiles
[hts@Venus Receive]$ chown datamover:datamover ./Jmr_Commercial_WithSubtitles.mov 
chown: changing ownership of ‘./Jmr_Commercial_WithSubtitles.mov’: Operation not permitted
[hts@Venus Receive]$ 

Durch das Hinzufügen von hts zur Datamover-Gruppe kann ich tatsächlich den Besitz des Gruppenteils ändern, daher nun eine teilweise Antwort und Validierung für die Aussage.

Antwort1

Nur root hat die Berechtigung, den Besitz von Dateien zu ändern. Relativ moderne Linux-Versionen bieten diese CAP_CHOWNMöglichkeit; ein Benutzer mit dieser Berechtigung kann auch den Besitz beliebiger Dateien ändern. CAP_CHOWNist global, d. h., wenn es einmal erteilt wurde, gilt es für alle Dateien in einem lokalen Dateisystem.

Der Gruppenbesitz kann vom Dateieigentümer (und Root) geändert werden. Dies ist jedoch auf die Gruppen beschränkt, zu denen der Eigentümer gehört. Wenn Benutzer U also zu den Gruppen A, B und C gehört, aber nicht zu D, dann kann U die Gruppe jeder Datei, die U besitzt, in A, B oder C ändern, aber nicht in D. Wenn Sie beliebige Änderungen wünschen, CAP_CHOWNist dies der richtige Weg.

VORSICHT CAP_CHOWNhat schwerwiegende Auswirkungen auf die Sicherheit. Ein Benutzer mit einer Shell, die über entsprechende Berechtigungen verfügt, CAP_CHOWNkönnte Root-Rechte erhalten. (Zum Beispiel chownlibc für sich selbst installieren, Ihre Trojaner patchen, chownes wiederherstellen und warten, bis ein Root-Prozess es abruft.)

Da Sie die Möglichkeit, den Eigentümer zu ändern, auf bestimmte Verzeichnisse beschränken möchten, wird Ihnen keines der verfügbaren Tools helfen. Stattdessen können Sie Ihre eigene Variante von schreiben, chowndie die beabsichtigten Einschränkungen berücksichtigt. Dieses Programm muss CAP_CHOWNbeispielsweise folgende Funktionen haben:

setcap cap_chown+ep /usr/local/bin/my_chown

VORSICHT Ihr Programm wird wahrscheinlich das Original nachahmen chown, zBmy_chownuser:group filename(s). Führen Sie die Eingabeüberprüfung sehr sorgfältig durch. Überprüfen Sie, ob jede Datei die vorgesehenen Einschränkungen erfüllt. Achten Sie insbesondere auf Softlinks, die außerhalb der Grenzen zeigen.

Wenn Sie den Zugriff auf Ihr Programm auf bestimmte Benutzer beschränken möchten, können Sie entweder eine spezielle Gruppe erstellen, die Gruppeneigentümerschaft auf my_chowndiese Gruppe setzen, die Berechtigungen auf 0750 setzen und alle Benutzer hinzufügen, die zu dieser Gruppe berechtigt sind. Alternativ können Sie sudomit geeigneten Regeln verwenden (in diesem Fall benötigen Sie auch keine Fähigkeitsmagie). Wenn Sie noch mehr Flexibilität benötigen, müssen Sie die Regeln, die Sie im Sinn haben, in codieren my_chown.

Antwort2

Ich bin auf dasselbe Problem gestoßen und verwende bereits ACLs. Dies trifft möglicherweise nicht auf Ihre Situation zu, aber in meinem Fall hat der bestimmte Benutzer Schreibzugriff auf den Verzeichnisbaum und alle anderen Lesezugriff. Meine Taktik besteht daher darin, ein kleines Setuid-Programm zu schreiben, um den Schreibzugriff des aufrufenden Benutzers zu überprüfen und anderen Benutzern die Änderung des Lesezugriffs zu ermöglichen.

Eine Frage hierzu finden Sie hier:

Wie bringt man Benutzer dazu, ACLs für Verzeichnisse festzulegen, die ihnen nicht gehören?

verwandte Informationen