Wie kann verhindert werden, dass Benutzer ein Verzeichnis löschen?

9

Ich habe "chattr + i DIRNAME" ausprobiert, es ist großartig, aber ich kann nach chattr keine Dateien im DIR erstellen. Was kann Benutzer sonst noch daran hindern, ein Verzeichnis zu löschen?

root@HOST ~] mkdir test
[root@HOST ~] chattr +i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
touch: cannot touch `sth': Permission denied
[root@HOST ~/test] cd ..
[root@HOST ~] chattr -i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
[root@HOST ~/test] 

UPDATE: Nur das Löschen des Verzeichnisses ist wichtig, daher müssen die Dateien darin noch gelöscht werden

gasko peter
quelle
Schauen Sie sich /tmpund an /var/tmp. Während jeder Benutzer dort Dateien erstellen kann, kann er nur seine eigenen Dateien / Verzeichnisse löschen, nicht jedoch das Verzeichnis selbst.
Nils

Antworten:

4

Was ist also falsch an einem einfachen Chown / Chmod?:

cd /tmp
mkdir question
sudo chown root:root question
[sudo] password for user: 
chmod 777 ./question
touch sth
rm sth
cd ..
rm question -rf
rm: cannot remove `question': Operation not permitted

OK, lassen Sie mich Ihnen sagen, was daran falsch ist: Jeder Benutzer hat questionaufgrund der 777Berechtigungen Zugriff auf jede Datei im Verzeichnis . Es ist besser zu

  • Erstellen Sie eine neue Gruppe groupadd question
  • mkdir question
  • chown root:question ./question
  • chmod 770 ./question
  • Fügen Sie der neuen Gruppe die Benutzer hinzu, die Zugriff auf die Dateien haben müssen: usermod -G group user

Der wichtige Trick dabei ist, dass das Verzeichnis einen anderen Eigentümer hat als alle Benutzer, die versuchen, es zu löschen.

Jippie
quelle
2
Es hängt auch davon ab, wo sich dieses Verzeichnis befindet. Wenn jemand aus der Fragengruppe über RWX-Rechte für das Verzeichnis verfügt, das das Fragenverzeichnis enthält, kann er es löschen.
Laurentiu Roescu
Fügen Sie ein Extra hinzu sudo chmod o+t .., um das tFlag im übergeordneten Verzeichnis zu setzen. Das tFlag erlaubt es nicht, eine Datei zu entfernen, die nicht dem Benutzer gehört. twird häufig verwendet /tmp, um genau das zu tun. UserA kann keine Dateien löschen, die UserB gehören.
Jippie
Oder setzen Sie noch einmal die richtigen Besitz- und Berechtigungsbits in das Verzeichnis.
Jippie
In Docker-Containern funktioniert es nicht. :(
Kirby
13

Erstellen Sie eine Datei ".protected" und tun Sie dies als root

chattr +i .protected

Sie können dann alle Dateien außer .protectedin diesem Verzeichnis löschen , sodass das Verzeichnis von keinem anderen Benutzer gelöscht werden kann.

Magnus
quelle
Einfach und effektiv. Gute Antwort.
Wug
In Docker-Containern funktioniert es nicht. :(
Kirby
1
Verwenden Sie zum Löschen "chattr -i [Dateiname]", um das unveränderliche Attribut zu entfernen.
Smaragdhieu
3
chattr +a

sollte den Job machen. Sie können darin Dateien erstellen, diese jedoch nicht löschen.

Laurentiu Roescu
quelle
Ich habe die Frage aktualisiert
Gasko Peter