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.txt
in erstellt onlyroot
(wobei nur wenig Platz benötigt wird; die Datei wird nicht kopiert). Jetzt können Sie als normaler Benutzer one.txt
den normal
Ordner löschen, aber Sie haben eine unantastbare Version unter dem onlyroot
Ordner.
[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"
}
sudowrapper
ist erforderlich, um bei jedem Aufruf sudo
die 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, .bashrc
ist das Aufschreiben Ihres Passworts keine gute Idee.