
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 chown
Befehlen innerhalb eines Verzeichnisses zu gestatten?
UPDATE: So fügen Sie einen Benutzer zu einer Gruppe hinzu.
Hier ist dasArtikeldatamover
die 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_CHOWN
Möglichkeit; ein Benutzer mit dieser Berechtigung kann auch den Besitz beliebiger Dateien ändern. CAP_CHOWN
ist 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_CHOWN
ist dies der richtige Weg.
VORSICHT CAP_CHOWN
hat schwerwiegende Auswirkungen auf die Sicherheit. Ein Benutzer mit einer Shell, die über entsprechende Berechtigungen verfügt, CAP_CHOWN
könnte Root-Rechte erhalten. (Zum Beispiel chown
libc für sich selbst installieren, Ihre Trojaner patchen, chown
es 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, chown
die die beabsichtigten Einschränkungen berücksichtigt. Dieses Programm muss CAP_CHOWN
beispielsweise folgende Funktionen haben:
setcap cap_chown+ep /usr/local/bin/my_chown
VORSICHT
Ihr Programm wird wahrscheinlich das Original nachahmen chown
, zBmy_chown
user: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_chown
diese Gruppe setzen, die Berechtigungen auf 0750 setzen und alle Benutzer hinzufügen, die zu dieser Gruppe berechtigt sind. Alternativ können Sie sudo
mit 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?