Erfordert sudo zum Löschen von Dateien, erlaubt aber weiterhin das Schreiben

Erfordert sudo zum Löschen von Dateien, erlaubt aber weiterhin das Schreiben

Ich habe alle meine Dateien auf einem Server-Raid und dieser verfügt über relativ viel Speicherplatz, sodass ich nicht oft etwas löschen muss.

Ich schreibe immer noch ständig Dinge in den Raid, deshalb möchte ich dafür nicht sudo verwenden müssen. Aber ist es möglich, Berechtigungen so festzulegen, dass das Schreiben erlaubt ist, das Löschen von Dateien jedoch nicht?

Ich gehe davon aus, dass ich auch für MV-Befehle sudo verwenden muss, aber das ist kein Problem

Zusatzinformation:

Raid verwendet btrfs raid1

Das Betriebssystem befindet sich auf einem separaten Laufwerk (Ubuntu 14.04-Server)

Antwort1

Zum Erstellen oder Löschen von Dateien benötigen Sie Schreibberechtigungen für Verzeichnisse. Zum Ändern von Dateien benötigen Sie Schreibberechtigungen für Dateien.

Betrachten wir diesen Baum:

FolderA: (no write permissions for you)
   - FileX (write permissions)
   - FileY (write permissions)

Sie können nun FileX und FileY ändern, aber nicht löschen. Ebenso wenig können Sie in OrdnerA ein FileZ erstellen.

Antwort2

Ich glaube nicht, dass das möglich ist. Das Erstellen und Löschen von Dateien wird unter Unix durch die Fähigkeit gesteuert, in das Verzeichnis zu schreiben – im Grunde dasselbe Flag.

Jetzt können Sie zwei Verzeichnisse erstellen – eines mit Schreibberechtigung und das andere mit beschränktem Root-Zugriff.

[romano:~/tmp/test] % ls -l
total 8
drwxrwxr-x 2 romano romano 4096 Oct  8 18:06 normal
drwxrwxr-x 2 root   root   4096 Oct  8 18:06 onlyroot

Normalerweise arbeiten Sie an normal. Angenommen, Sie haben darin:

[romano:~/tmp/test/normal] % ls
one.txt  three.txt  two.txt

Sie können Dateien löschen und neue erstellen. Nehmen wir an, Sie möchten " one.txt" vor dem Löschen schützen. Sie können einen Hardlink darauf erstellen in onlyroot:

[romano:~/tmp/test/normal] 1 % sudo ln one.txt ../onlyroot

Dadurch wird ein anderer Name für one.txtin erstellt onlyroot(wobei nur wenig Platz benötigt wird; die Datei wird nicht kopiert). Jetzt können Sie als normaler Benutzer one.txtden normalOrdner löschen, aber Sie haben eine unantastbare Version unter dem onlyrootOrdner.

[romano:~/tmp/test/normal] % ls
one.txt  three.txt  two.txt
[romano:~/tmp/test/normal] % rm one.txt
rm: remove regular empty file ‘one.txt’? y
[romano:~/tmp/test/normal] % cd ..
[romano:~/tmp/test] % cd onlyroot 
[romano:~/tmp/test/onlyroot] % ls
one.txt
[romano:~/tmp/test/onlyroot] % rm one.txt 
rm: remove regular empty file ‘one.txt’? y
rm: cannot remove ‘one.txt’: Permission denied

Antwort3

Nach meinem Verständnis (basierend aufhttps://btrfs.wiki.kernel.org/index.php/Project_ideas#RichACLs_.2F_NFS4_ACLS), btrfs unterstützt nur traditionelle Unix-Berechtigungen und POSIX.1e-ACLs und kann daher nicht das tun, was Sie möchten.

Viele/die meisten anderen Dateisysteme unterstützen mindestens eine der folgenden Optionen: Linux-Richacls (die meines Wissens noch nicht im Mainline-Paket enthalten sind), NFSv4-ACLs, ZFS-ACLs oder Windows-ACLs, die es Ihnen alle ermöglichen, „Löschen“ ausdrücklich zu verweigern, aber ich kann mir nicht vorstellen, dass Sie bereit wären, nur deswegen auf die Funktionen von btrfs zu verzichten.

Da Sie damit jedoch speziell vor einfachen Fehlern schützen möchten, ist es möglicherweise besser, die Snapshot-Funktionen von btrfs mithilfe von etwas wie Autosnap zu nutzen.

Antwort4

Ich denke, eine Lösung wäre, einfach eine Funktion in Ihrem zu erstellen bashrc, zum Beispiel:

sudowrapper () { 
sudo -k;sudo "$@";sudo -K; 
}

vimf() {
    echo "pass" | sudowrapper -S nvim "$1"
}

sudowrapperist erforderlich, um bei jedem Aufruf sudodie Anmeldeinformationen zu vergessen , da es sonst zu merkwürdigem Verhalten kommt.vimf

Tun Sie dies nur, wenn Sie verhindern möchten, dass Sie selbst etwas falsch machen. Wenn Ihr Ziel darin besteht, andere vor schlechten Taten zu bewahren, .bashrcist das Aufschreiben Ihres Passworts keine gute Idee.

verwandte Informationen