Meine Freunde löschen meine Dateien weiterhin über das Terminal. Bitte helfen Sie mir, indem Sie erklären, wie Sie ein Kennwort für den rm
Befehl erstellen.
Meine Freunde löschen meine Dateien weiterhin über das Terminal. Bitte helfen Sie mir, indem Sie erklären, wie Sie ein Kennwort für den rm
Befehl erstellen.
Antworten:
Es gibt keine einfache Möglichkeit, ein derartiges Kennwort für den rm
Befehl selbst einzurichten , nicht ohne viel Code-Hacking, das wahrscheinlich dazu führt, dass apt-get
Pakete installiert und Dateien entfernt werden und Sie das Kennwort tausendmal eingeben müssen oder möglicherweise stören Zugriff auf den Befehl für Personen, die ihn benötigen (wie Sie, um Ihre eigenen Dateien zu löschen). Sie können dies auf eine Art und Weise tun, indem Sie über mehrere Benutzerkonten und mehrere Zugriffsberechtigungen verfügen und den Zugriff auf verschiedene Datenbereiche, z. B. auf Ihr Basisverzeichnis, einschränken, damit diese nicht darauf zugreifen können.
(Die andere Option sind individuelle Benutzerkonten für jeden Benutzer und dann Zugriffssteuerungslisten, wie in der anderen Antwort von Videonauth beschrieben. )
Hier ist das Kernproblem: Sie lassen Ihre Freunde Ihr System verwenden. Dies hat zahlreiche Auswirkungen auf die Sicherheit. Das Konzept "Jeder, der physisch auf die Box zugreifen kann, kann das System steuern und Aufgaben ausführen" ist ein IT-Sicherheits-Mantra, weshalb der Zugriff auf physische Systeme nicht gemeinsam genutzt wird außer bei autorisiertem Personal.
Die einzige wirklich vernünftige Art und Weise , dies zu tun , ist nicht Ihre Freunde Zugang zu geben Ihrem Computer, und geben ihnen eine ‚gewidmet‚Gast‘System‘ , dass sie verwenden können, dass Sie wirklich über die Dateien auf so viel egal. Dies ist der sicherste Weg, um Ihre Dateien zu schützen.
Wenn dies keine Option ist, besteht Ihre einzige wirklich sichere Option darin, mehrere Benutzerkonten für jeden Benutzer mit unterschiedlichen Basisordnern zu konfigurieren und ihnen keinen Zugriff auf Ihr eigenes Basisverzeichnis oder die Basis eines anderen Benutzers zu gewähren verzeichnisse. Behalten Sie dann alles, was Sie nicht möchten, in Ihrem Home-Verzeichnis, und geben Sie ihnen keinen sudo
Zugriff, kein root
Passwort und geben Sie Ihr Passwort nicht an sie weiter.
So würden Sie das machen:
Angenommen, mein Name ist "Foo" und ich möchte, dass der Benutzer "Bar", ein Freund, mein System verwendet, aber nicht auf meine Dateien zugreift. Der erste Schritt besteht darin, jedem außer mir den Zugriff auf mein Home-Verzeichnis zu verweigern. Dies soll anderen Benutzern ermöglichen, Ihre Dateien nicht zu löschen, sondern auch zu verhindern, dass andere Benutzer in Ihrem Home-Verzeichnis herumschnüffeln und sehen, welche Arten von Dingen sich in Ihrem Home-Verzeichnis befinden:
chmod 750 /home/Foo
Der zweite Schritt ist das Erstellen eines Benutzerkontos für "Bar" (NICHT die in Klammern angegebenen Informationen eingeben, sondern nur zu Informationszwecken). Auf diese Weise können wir sicherstellen, dass er über eigene Zugriffsrechte verfügt:
sudo adduser --create-home --user-group --shell /bin/bash Bar
sudo passwd Bar
(set a temporary password - you will not see characters as you type though)
Der dritte Schritt besteht darin, das Basisverzeichnis ebenfalls einzuschränken, damit auch niemand in seine Dateien eindringen kann. Das macht die Dinge nur gleich.
sudo chmod 750 /home/Bar
Waschen Sie Ihre Hände, spülen Sie sie gut ab und wiederholen Sie diese Schritte für alle Benutzer, die Sie im System haben. Sie sind nicht in der Lage, auf Ihre Dateien zuzugreifen, und da Sie ihnen keine Administratorrechte erteilen, können sie Ihre Dateien nicht löschen, ohne dies zu versuchen sudo
- da Sie dies nicht zulassen, können sie dies nicht Berühre deine Sachen. Und sie können Ihre Dateien auch nicht sehen, ohne Superuser zu werden, was hier nicht der Fall ist.
Denken Sie immer daran: Wenn Sie jemandem physischen oder allgemeinen Zugriff auf das Gerät gewähren, gefährden Sie Ihre Dateien und Daten. Dies ist eine allgemein anerkannte Tatsache in der IT-Sicherheitswelt, die bis heute Bestand hat. Wenn Sie Ihren Freunden Zugriff auf Ihren Computer gewähren, sind Ihre Daten immer einem Risiko ausgesetzt. Geben Sie ihnen entweder ihr eigenes System, mit dem sie herumspielen können, oder gewähren Sie ihnen keinen Zugriff auf Ihren Computer.
Nur ein Hinweis zur Festplattenverschlüsselung
Während die Festplattenverschlüsselung gut funktioniert, um Ihre Daten vor Dritten zu schützen, gibt es Einschränkungen.
Während die Festplattenverschlüsselung diese Probleme nicht löst, bereitet sie einem Bedrohungsschauspieler zusätzliche Kopfschmerzen. Jemand, der ein Bösewicht ist, kann aufgeben, wenn er verschlüsselt ist, oder er kann Sie foltern (obligatorischer XKCD-Sicherheits-Comic ).
Wenn Ihr System verschlüsselt ist, andere Benutzer es jedoch verwenden dürfen, verfügen sie entweder über ein Kennwort zum Entschlüsseln, oder Sie lassen Ihren Laptop entschlüsselt, damit sie SSH-fähig sind oder physischen Zugriff haben. In beiden Fällen ist es schlecht.
Wenn Ihr System jedoch nicht verschlüsselt ist, hat dieser Abschnitt keine Relevanz für Sie.
apt-get
läuftdpkg
, die Skripte ausgeführt , die häufig verwendet werden rm
. Auf meiner Xenial-Box werden cd /var/lib/dpkg/info; grep -P '\brm\b' *inst
344 Zeilen ausgegeben , von denen 333 wie echte Verwendungen des rm
Befehls aussehen - nur in Installationsskripten . grep -P '\brm\b' *rm
zeigt noch mehr in Entfernungsskripten (zum Löschen von Konfigurationsdateien, nicht von Paketdateien).
Hier geht es möglicherweise nicht wirklich um den rm
Befehl, da es einfache Möglichkeiten gibt, Dateien zu löschen, ohne ihn zu verwenden . Wenn das Problem darin besteht, dass Ihre Freunde den rm
Befehl unbeabsichtigt missbrauchen , können Lösungen hilfreich sein, die die Verwendung dieses Befehls spezifisch einschränken oder ihn auf eine andere Weise funktionieren lassen. Im Gegensatz dazu müssen Sie, wenn das Problem darin besteht, dass Ihre Freunde Ihre Daten absichtlich so behandeln, wie Sie es nicht möchten, tatsächliche Sicherheitsmaßnahmen implementieren und keine Lösung, die sich auf den rm
Befehl selbst (oder einen diskreten Befehlssatz) konzentriert. wird dich beschützen.
Angenommen, Ihre Freunde möchten nicht, dass sie Ihre Dateien löschen, dann gibt es zwei Möglichkeiten:
Sie könnten es mit Absicht tun. In diesem Szenario löschen Ihre Freunde Ihre Dateien absichtlich, und Sie können nicht einmal darauf vertrauen, dass sie versuchen , Ihren Wünschen in Bezug auf den Umgang mit Ihren Daten bei der Verwendung Ihres Computers nachzukommen. Die einzige Lösung für dieses Problem besteht darin, eine tatsächliche effektive Sicherheitsmaßnahme zu verwenden , wie Thomas Ward ausführlich erläutert hat . Oft ist es das Beste, sie daran zu hindern, Ihren Computer zu benutzen. Die Verwendung eigener Benutzerkonten kann jedoch einen gewissen Schutz bieten.
Sie könnten es aus Versehen tun. In diesem Szenario sind Ihre Freunde extrem unfallanfällig und führen weiterhin rm
Befehle aus, die sie gerne nicht ausgeführt hätten. Sie möchten Sie und Ihre Daten mit Respekt behandeln, tun dies aber in der Praxis wirklich schlecht, weil sie weiterhin den falschen Befehl ausführen, die falsche Datei löschen ... oder so ähnlich. Obwohl es schön wäre zu glauben, dass dies der Fall ist, warne ich Sie davor, anzunehmen, dass Personen, die Ihre Daten nach Aufforderung zum Beenden weiterhin löschen, ohne bösen Willen arbeiten.
Selbst wenn ihre Absichten gut sind, ist die Vergabe separater Benutzerkonten immer noch die narrensicherste Methode, um zu verhindern, dass sie Ihre Dateien löschen, abgesehen davon, dass sie nicht Ihren Computer verwenden dürfen.
Wenn die Situation wirklich die Nummer 2 ist, versuchen Ihre Freunde nicht , Ihre Dateien zu löschen, sondern brauchen nur Hilfe, um sie nicht versehentlich zu löschen. Der einzige Weg, auf dem sie sie jemals versehentlich löschen, ist der versehentliche Missbrauch einer kleinen Anzahl von Befehlen (wie rm
). dass sie besondere Probleme haben, richtig zu verwenden - dann könnten die Techniken in Videonauths Antwort von Nutzen sein. Sie müssen jedoch verstehen, dass es sich nicht um Sicherheitsmaßnahmen handelt, da der rm
Befehl nur eine von vielen einfachen Möglichkeiten zum Löschen von Dateien ist . Siehe unten für Details.
Ich empfehle Ihnen, sich zu fragen: "Ist meine Situation im Grunde genommen so, als ob ich und nicht die anderen Leute, die meinen Computer benutzen, die rm
falsche benutzten ?"
Lautet die Antwort " Nein" , handelt es sich um eine Frage der Informationssicherheit, und Sie müssen Ihre Freunde daran hindern, Ihr Benutzerkonto zu verwenden. Wenn die Antwort Ja lautet , können Sie dieselben Ansätze verwenden, die Sie bei einem Missbrauch verwenden würden rm
:
rm file
file
Aber auch wenn Ihre Freunde nicht etwas falsch zu tun versuchen, sollten Sie noch betrachten sie nutzen , um ihre eigenen separaten Benutzerkonten mit . Dies wird das Problem weiterhin lösen - die gleichen Sicherheitsmaßnahmen, die Daten vor vorsätzlicher Zerstörung schützen, schützen sie auch vor unbeabsichtigter Zerstörung. Selbst ohne böswillige Absichten können Sie nicht darauf vertrauen, dass jemand etwas tut, was Sie nicht wollen.
rm
vor dem Löschen eine Eingabeaufforderung eingeben, können Sie einige Fehler vermeiden.Um zu verhindern, dass versehentlich Dateien mit gelöscht werden rm
, können Sie rm
einen Shell-Alias erstellen , der tatsächlich ausgeführt wird rm -i
. Durch das Übergeben des -i
Flags an rm
wird der Benutzer aufgefordert, die einzelnen Dateien zu löschen (siehe man rm
).
Sie können dies (für Ihr Benutzerkonto) tun, indem Sie alias rm='rm -i'
zu Ihrer .bash_aliases
oder .bashrc
-Datei hinzufügen . Siehe diese und jene Frage für Details. Dies wird für Ihre neu geöffneten Bash-Shells wirksam.
Dies bietet keine wirkliche Sicherheit und ist auch nicht kinderleicht, um Fehler zu vermeiden, da:
/bin/rm
oder Aufheben des Alias ( unalias rm
).rm
nicht mit ausgeführt werden -i
.rm
(wie dies beim Ansatz von Videonauth der Fall ist - siehe unten).Wenn Sie jedoch keine tatsächliche Sicherheit benötigen (siehe oben), ist dies möglicherweise der richtige Weg. Im Vergleich zu dem Ansatz, Ihre Freunde daran zu hindern, das vom System bereitgestellte System zu verwendenrm
Befehl zu verwenden:
Aliasing rm
zu rm -i
weniger effektiv bei der Vermeidung von Fehlern machen - bis sie eine andere Technik des Weg zu verwenden , um Dateien zu entfernen. Zu diesem Zeitpunkt ist rm
es völlig ineffektiv, sie von der Verwendung abzuhalten, auch wenn sie nicht versuchen, etwas Falsches zu tun, da sie vermutlich verwenden werdenunlink
(oder einen der unzähligen anderen Befehle, die eine Datei entfernen) mit der gleichen Unüberlegtheit verwenden werden.
Da die Aliaserweiterung jedoch nur in bestimmten Situationen auftritt - grob gesagt, bei normaler interaktiver Verwendung der Shell - denken Ihre Freunde möglicherweise, dass sie aufgefordert werden, wenn sie nicht wirklich dazu aufgefordert werden (weil der Befehl aktiviert ist) B. ein Skript oder ein Skript aus einer anderen Shell). Videonauths Weg hat dieses Problem nicht, was ein objektiver Vorteil dieser Methode gegenüber ist alias rm='rm -i'
.
Wenn ein Skript ausgeführt wird, werden Ihre Aliase darin nicht erweitert, es sei denn, es wurde absichtlich für die Verwendung von Aliasen geschrieben. Dies bedeutet, dass Aliasing rm
auf rm -i
höchstwahrscheinlich nichts kaputt macht. Dies ist ein objektiver Vorteil von alias rm='rm -i'
.
rm
Ich kann nichts machen, was ein anderes gewöhnliches Programm nicht kann.Es ist wirklich nichts Besonderes rm
. Es ist eine bequeme und selbstdokumentierende Methode zum Entfernen von Dateien. Wenn Sie also den Zugriff darauf einschränken, können zahlreiche Skripts beschädigt werden, die darauf angewiesen sind. Aber es ist bei weitem nicht die einzige Möglichkeit, Dateien zu löschen - es ist nur ein gewöhnliches Programm.
Einige Befehle führen Aufgaben aus, die ein beschränkter Benutzer (kein Root- Benutzer) nicht ausführen kann, ohne sie auszuführen. Beispielsweise sudo
können Sie Programme als ein anderer Benutzer ausführen, nachdem Sie überprüft haben, ob Sie dazu berechtigt sind. passwd
Bearbeitet die Datenbank, in der die Kennwörter der Benutzer gespeichert sind. Sie können jedoch nur Ihr eigenes Kennwort ändern (es sei denn, Sie sind root. In diesem Fall können Sie das Kennwort eines anderen Benutzers ändern).
/usr/bin/sudo
und /usr/bin/passwd
können dies tun, weil sie das setuid-Bit gesetzt haben, wie s
in der Spalte ganz links zu sehen ist, wenn Sie ausführen ls -l
:
ek@Io:~$ type -a sudo passwd rm
sudo is /usr/bin/sudo
passwd is /usr/bin/passwd
rm is /bin/rm
ek@Io:~$ ls -l /usr/bin/sudo /usr/bin/passwd /bin/rm
-rwxr-xr-x 1 root root 60272 Feb 18 2016 /bin/rm
-rwsr-xr-x 1 root root 54256 Mar 29 2016 /usr/bin/passwd
-rwsr-xr-x 1 root root 136808 Aug 17 09:20 /usr/bin/sudo
Beachten Sie, dass /bin/rm
keine hat s
: seine Berechtigungen sind -rwxr-xr-x
, während /usr/bin/passwd
und /usr/bin/so
haben -rwsr-xr-x
stattdessen. Dies macht es so, dass es unabhängig davon, wer ausgeführt wird passwd
oder sudo
tatsächlich als Root-Benutzer ausgeführt wird, da Root der Eigentümer der ausführbaren Datei ist. (Es gibt auch ein Setgid-Bit, das ausführbare Dateien dazu veranlasst, mit der Gruppenidentität ihres Gruppeneigentümers und nicht mit der des Aufrufers ausgeführt zu werden.)
Mit Ausnahme von Sicherheitslücken, die noch nicht entdeckt wurden (oder die zwar entdeckt, aber noch nicht gepatcht wurden), sudo
und passwd
die sicher sind, da diese Dienstprogramme sehr sorgfältig geschrieben wurden, sodass sie nur Dinge ausführen können, die der Aufrufer zulassen sollte machen.
/bin/rm
funktioniert nicht so. Es ist nicht setuid, weil es nicht sein muss. Verzeichnisberechtigungen (und gelegentlich Dateiberechtigungen ) steuern, welche Dateien ein Benutzer löschen kann, und sie müssen nicht als Root angemeldet sein, um dies zu tun. Um ganz klar zu sein, setzen Sie bitte niemals das setuid-Bit aufrm
. Die Auswirkungen auf die Sicherheit wären katastrophal, da es, egal wer läuft rm
, so ist, als ob root es ausgeführt hätte! (Dienstprogramme mögen sudo
und passwd
prüfen, wer sie wirklich ausführt, und prüfen, ob etwas zulässig ist, bevor sie rm
dies tun.)
Wenn Sie überprüfen, ob das Bit setuid (oder setgid) für eine ausführbare Datei gesetzt ist, können Sie feststellen, ob eine Einschränkung der Ausführung die Sicherheit verbessern kann. Ausführbare Dateien, die nicht setuid (oder setgid) sind, haben keinen besonderen Status, und jeder kann sie einfach kopieren und die Kopie ausführen, seine eigene Kopie von einem anderen Computer bringen, ein Skript oder Programm schreiben, das dasselbe tut oder verwendet ein anderes Programm, um es zu tun.
rm
Die naheliegende Möglichkeit, eine Datei ohne rm
Ubuntu zu löschen, besteht darin, im grafischen Dateibrowser (Nautilus, wenn Sie Unity oder GNOME Shell verwenden) zu ihrem Speicherort zu navigieren und die Datei zu löschen. Es gibt auch zahlreiche Befehle, mit denen Sie eine Datei von einem Terminal löschen können, ohne sie jemals zu verwenden rm
.
Um beispielsweise eine foo.txt
im aktuellen Verzeichnis aufgerufene Datei zu entfernen , verwenden Sie die folgenden Befehle, die unter Ubuntu standardmäßig ausgeführt werden und auf die kein Zugriff erforderlich ist rm
. (Zur Sicherheit habe ich sie nach dem Löschen auf einem 16.04-Minimalsystem getestet, auf dem nur die Standard-Systemdienstprogramme installiert waren /bin/rm
.)
unlink foo.txt
busybox rm foo.txt
perl -e 'unlink("foo.txt")'
python3 -c 'import os; os.remove("foo.txt")'
( python
statt python3
in älteren Releases)Diese Liste ist natürlich bei weitem nicht vollständig. Eine vollständige Liste solcher Befehle ist nicht möglich. Das Verhindern des Löschens von Dateien ist eines der Dinge, die durch separate Benutzerkonten und Datei- und Verzeichnisberechtigungen erreicht werden müssen. Sie arbeiten sehr gut, um dies zu verhindern. Im Gegensatz dazu können Sie den rm
Befehl ändern (um ein Kennwort zu erzwingen oder auf andere Weise) oder den Zugriff einschränken, rm
um ihn überhaupt nicht zu verhindern.
rm
‚s - -I
Option. Sie werden nur zum Löschen von 4 oder mehr Dateien oder zum rekursiven Löschen aufgefordert. Sie haben sich also nicht angewöhnt, immer zu verwenden -f
, \rm
um eine Alias-Erweiterung zu vermeiden, oder y
ohne Lesen zu tippen. Sie werden jedoch trotzdem vor Tippfehlern bewahrt, bei denen Sie die Eingabetaste gedrückt haben, bevor Sie beabsichtigten, oder wenn Ihr Glob mit vielen Dateien übereinstimmte.
mv foo.txt /tmp/.gone
Starten Sie das System neu, und verwerfen Sie die gesicherten tmpfs /tmp
. Oder mv
benennen Sie einfach mehrere Dateien mit demselben Namen um, sodass nur die letzte übrig bleibt. Oder verstecken Sie Dateien einfach, indem Sie sie mit unklaren Namen umbenennen. Wie der erste Teil dieser Antwort zeigt, müssen Sie nur Personen aus Ihrem Konto ausschließen, wenn Sie versuchen, sich gegen Böswilligkeit und nicht gegen Inkompetenz zu verteidigen.
Sie können die Berechtigungen für den /bin/rm
Befehl über die folgende Zeile ändern, um zu verhindern, dass er ohne sudo-Zugriff ausgeführt wird:
sudo chmod 750 /bin/rm
Dies verhindert insbesondere, dass sie den rm
vom System bereitgestellten Befehl verwenden. Sie sollten sich bewusst sein, dass es sie nicht daran hindert, Dateien auf andere Weise zu löschen.
Um zu verhindern, dass sie den rmdir
Befehl verwenden, der häufig zum Löschen von Verzeichnissen verwendet wird, können Sie die Berechtigungen für den ausführbaren Pfad auf dieselbe Weise festlegen:
sudo chmod 750 /bin/rmdir
Denken Sie daran, dass Sie diese Befehle auch nur mit Sudo-Rechten verwenden können.
Um es zurück zu ändern, wenn es Ihnen nicht gefällt oder andere Probleme auftreten, verwenden Sie 755
fürchmod
Wie @muru hervorhob, ist das oben Genannte eine sehr grobe Lösung und kann sogar Systemdienste zum Erliegen bringen, die nicht auf dem Root- Konto ausgeführt werden. Deshalb füge ich hier eine weitere Option hinzu, die ACL (Access Control Lists) verwendet, um dasselbe und wahrscheinlich viel sicherer zu machen (auch gut zu lesen, und Sie können den Aktivierungsteil überspringen, da ACL heutzutage normalerweise auf Ubuntu-Systemen installiert ist):
Dasselbe wie oben für die Benutzer zu tun, die Sie blockieren möchten, wäre also
sudo setfacl -m u:<user-name>:- /bin/rm /bin/rmdir
Ersetzen <user-name>
Sie einfach durch die tatsächlichen Benutzernamen, die Sie verhindern möchten, dass die Dateien verwendet werden.
Wie bei chmod
Verwendung von setfacl -m
, um die Ausführung bestimmter Benutzer zu verhindern, rm
und rmdir
gilt nur für diese vom System bereitgestellten Befehle. Es hindert sie nicht daran, Ihre Dateien und Ordner in Nautilus zu löschen oder andere Terminalbefehle zu verwenden.
Erläuterung:
-m
Flag bedeutet, dass die Datei-ACL geändert werden soll.u
steht für Benutzer. Es kann die folgenden Werte u
für Benutzer, g
für Gruppe und o
für alle anderen haben<user-name>
kann den tatsächlichen Benutzernamen oder Gruppennamen entsprechend dem, was Sie ändern möchten, enthalten. Um allgemeine Änderungen vorzunehmen, lassen Sie dieses Feld leer.-
, daher kann es auch die folgenden Buchstaben r
für Leseberechtigungen, w
Schreibberechtigungen und x
für die Ausführung enthalten.sudo setfacl -m u:<username>:- /bin/rm /bin/rmdir
, IIRC. Sie können die ACL mitgetfacl /bin/rm /bin/rmdir
rm
. Die Lösung, die Videonauth hier gegeben hat, ist eine Möglichkeit, unfallanfälligen Benutzern beim Stoppen des Löschens von Dingen zu helfen, bietet jedoch keine wirkliche Sicherheit (was in Ordnung sein kann, wenn die Freunde des OP nicht absichtlich versuchen, die Wünsche des OP zu untergraben). . Videonauth: Ich schlage vor, diesen Beitrag zu bearbeiten, um deutlich zu machen, dass er die Benutzer nicht daran hindert, Dateien zu löschen, da sie dazu keinen rm
Befehl benötigen. (Ich verzichte darauf, es selbst zu bearbeiten, falls du das nicht sagen willst.)
rm
Befehl ändern .
Dies ist eine sehr einfache Antwort, die jemanden daran hindert, den Befehl rm gelegentlich zu verwenden, ohne ein Kennwort anzugeben. Es ist keine sichere Lösung, und Sie sollten einige der alternativen Vorschläge in die anderen Antworten einbeziehen.
Sie können jedoch einen Alias verwenden, um das Verhalten des Befehls rm zu ändern. Versuchen:
alias rm="sudo -l >/dev/null && rm"
Wenn jemand den Befehl rm eingibt, wird der Befehl sudo -l ausgeführt. Dieser Befehl zwingt den Benutzer, sein Kennwort einzugeben. Wenn sie es richtig machen, listet es ihre Privilegien auf (wir verwerfen diese Ausgabe) und beendet es mit dem Status 0, wenn sie es falsch machen, existiert es mit einem Fehler.
Wir folgen dann dem sudo-Befehl mit einem "&&", das den folgenden Befehl beendet - in diesem Fall "rm" nur, wenn der vorherige Befehl mit dem Status 0 beendet wird - dh sie haben das richtige Passwort erhalten.
Um dies dauerhaft zu machen, fügen Sie den Befehl alias in ein ~/.bashrc
.
Beachten Sie, dass dies sehr leicht besiegt wird (zum Beispiel könnten sie einfach tippen /bin/rm
.
Ich habe ein Skript zum Passwortschutz geschrieben, rm
das dem angeforderten OP entspricht, aber auch Änderungen vorgenommen, um ein versehentliches Löschen zu verhindern:
Bearbeiten: 5. März 2017 - Ändern der Überprüfungsmethode, ob im Terminal ausgeführt wird.
Verwenden gksu gedit /usr/local/bin/rm
und kopieren Sie in diesen Zeilen:
#!/bin/bash
tty -s;
if [ "0" == "$?" ]; then Terminal="Y"; else Terminal="N"; fi
if [ $Terminal == "Y" ] ; then
# Running from terminal don't allow delete of / or /toplevel directory even if sudo
for i in ${@:1}
do
# Skip options -i -r -v -d
if [[ ${i:0:1} != "-" ]] ; then
# if parameter doesn't begin with '-' it's file or directory, so get real path.
fullname=$(realpath "$i" 2>&1) # No error messages if file doens't exist
# We must have at least two `/` in the full path
levels=$(echo "$fullname" | tr -cd '/' | wc -c)
if (( $levels == 1 )); then # Test for 1, will be zero when file doesn't exist.
echo "Attempting to remove top level directory '$fullname'"
echo "Use 'sudo /bin/rm $@' instead."
exit 1 # error
fi
fi
done
fi
if [[ $(id -u) != 0 ]]; then # Only non-root processes enter password (ie "sudo rm ..." is ok)
if [ $Terminal == "Y" ] ; then
# Only running from a terminal needs password (ie not cron)
# log rm usage to /var/log/syslog
PARENT_COMMAND="$(ps -o comm= $PPID)"
logger "$PARENT_COMMAND"" - rm command was used on file: ""$fullname"
# Get password
Password=$(zenity --password --title="Password for rm")
encryptPassword=$(echo -n "$Password" | md5sum)
echo "md5sum: $encryptPassword" # Comment out after viewing one time and updating line below.
if [[ "$encryptPassword" != "d2c30dc65e59558c852ea30b7338abbe -" ]]; then
echo "Invalid password!"
exit 1
fi
fi # non-terminals can't enter password.
fi # root doesn't need to enter password.
# Call REAL rm command with parameters passed to this wrapper sript
/bin/rm "$@"
exit 0
Ändern Sie das Passwort "WE2U" nach Belieben und speichern Sie die Datei.
rm
Skript als ausführbarNeues rm
Skript als ausführbar markieren mit:
sudo chmod +x /usr/local/bin/rm
Wenn das Passwort nicht WE2U ist , erhalten Sie beim ersten Ausführen des Skripts ein "ungültiges Passwort" und der Verschlüsselungsschlüssel für das eingegebene Passwort wird angezeigt. Kopieren Sie diesen Verschlüsselungsschlüssel vom Terminal und fügen Sie ihn in das Skript ein. Kommentieren Sie dann die Zeile mit dem Echo aus, das den Verschlüsselungsschlüssel auf dem Terminal anzeigt.
Weil der Pfad /usr/local/bin
in der Liste höher ist als /bin
unser Befehl rm
heißt. Nachdem es ein gültiges Passwort erhalten hat, ruft es /bin/rm
auf, um die eigentliche Entfernung durchzuführen.
Wie Thomas Ward in einer anderen Antwort betonte, sudo apt-get install ...
könnten Sie tausendmal nach einem Passwort gefragt werden , wenn Sie dies tun würden . Das Skript prüft, ob sudo
verwendet wird und fragt nicht nach einem Passwort. Außerdem rm
ist beim Aufruf aus der GUI-Anwendung kein Passwort erforderlich.
Die Skriptaufrufe logger
, die jedes Mal rm
aufgezeichnet werden müssen, wurden manuell über das Terminal aufgerufen. Die Befehlsverwendung wird in aufgezeichnet /var/log/syslog
.
Eine andere Alternative wäre, Sicherungskopien aller wichtigen Dateien in einem Verzeichnis zu erstellen, auf die Nicht-Root-Benutzer keinen Zugriff haben. Sie könnten rsync
oder verwenden unison
, um sie automatisch zu synchronisieren. Vergewissern Sie sich lediglich, dass sich mindestens ein Verzeichnis im Pfad zum Sicherungsziel im Besitz von root und mode 700 befindet. Dies würde jedoch zu zwei Kopien aller Dateien führen. Es wäre sicherer, nur einen Gastbenutzer für die Verwendung zu erstellen, außer Sie müssen immer daran denken, sich zu sperren oder abzumelden, bevor Sie den Computer übergeben oder ihn unbeaufsichtigt lassen.
Nicht die direkte Antwort auf die Frage, sondern:
Wenn Ihre Freunde Ihre Dateien mit dem rm
Befehl löschen, sind Ihre Freunde entweder inkompetent oder unfähig, oder sie sind BOFH- Möchtegern- Freunde , die Ihnen beibringen, Ihre Sitzungen nicht angemeldet und unbeaufsichtigt zu lassen. In allen Fällen ist die Lösung dieselbe: Lassen Sie Ihre Sitzung nicht angemeldet und unbeaufsichtigt .
Dies hat den Vorteil, dass Sie bei jedem Upgrade oder bei jedem Erwerb eines neuen Systems keine besonderen Änderungen am System vornehmen müssen. Außerdem wird verhindert, dass Skripts und andere Dinge, die auf erwartungsgemäßem Verhalten von Befehlen beruhen, auf unvorhersehbare Weise fehlschlagen.
Es hat auch den Vorteil, dass "Freunde" nicht zum nächsten Schritt übergehen können. Möchten Sie den mv
Befehl auch mit einem Kennwort "schützen", wenn Sie Ihre Dateien nach / dev / null verschieben, wenn Sie feststellen, dass ein einfaches Entfernen nicht das tut, was Sie wollen? Wenn Sie in einem Spiel wie diesem sind, ist der einzige Gewinn, nicht zu spielen.
Ich habe eine ähnliche Möglichkeit, die ich geplant habe. Wenn auf dem Dateiserver der Hauptspeicher für Fotos beschreibbar ist, die von einem Familienmitglied (weniger technisch oder aus Versehen) gelöscht werden könnten, ziehen Sie versehentlich die GUI, die das Verzeichnis verschiebt, oder überschreiben Sie ein Original mit einer bearbeiteten Version, anstatt es umzubenennen .
Ich erkannte, dass ich mich davor schützen kann, ohne die Berechtigungen für alle anderen unbeschreiblich zu machen. ZFS erstellt regelmäßig Snapshots, sodass versehentliches Löschen oder Überschreiben rückgängig gemacht werden kann. (Im Gegensatz zu einem Backup ist ein Snapshot kompakt und schreibgeschützt, sodass sich Ihre Speichernutzung nicht vervielfacht.)
ZFS ist in FreeBSD integriert. Linux hat BTRFS, das auch Snapshots hat.
Eine sehr alberne Lösung für ein sehr albernes Problem.
Wenn Sie wollen nicht chmod
rm
, rmdir
oder mv
(für mv filename /dev/null
) oder die Verwendung von ACLs, können Sie einen Dummy - Benutzer mit einem Passwort niemandem schaffen könnten , aber sie weiß , und Alias jeden Befehl zu sudo [user]
, und dann Aliase für jeden Befehl, dass Ihre Freunde wissen nicht , . Auf diese Weise werden Ihre Freunde vom rm
System zur Eingabe eines Kennworts aufgefordert ( wenn Sie jedoch ein falsches Kennwort erraten, wird der fehlgeschlagene Versuch protokolliert), und Sie können einfach eingeben rmalias
oder was auch immer Sie möchten, um Dateien tatsächlich zu löschen.
Oder Sie können einfach ein Gastkonto erstellen, das keinen Zugriff auf Ihr Home-Verzeichnis hat.
sudo [user]
unddummy user
Wenn Sie rm mit einem Kennwort schützen möchten, besteht eine Lösung darin, einen Wrapper für rm zu erstellen, der Root-Berechtigungen erfordert, und andernfalls nach einem Kennwort zu fragen. (HINWEIS: Dieser Wrapper verschwindet möglicherweise, wenn das coreutils- Paket aktualisiert oder neu installiert wird.) Beachten Sie auch, dass dies nur sicherstellt, dass es noch viele, viele andere Möglichkeiten gibt, eine Datei zu löschen.
Öffne ein Terminal und werde root. Dann renn los , sudo mv /bin/rm /bin/rmold
um das alte Gebäude an einen anderen Ort zu bringen.
Führen Sie nun aus sudo nano /bin/rm
, um einen Wrapper zu erstellen.
Geben Sie in Nano Folgendes ein:
#!/bin/bash
/bin/rmold "$@"
exit "$?"
Halten Sie dann gedrückt CTRL
und drücken Sie, X
um den Vorgang zu beenden. Drücken Y
Sie, wenn Sie dazu aufgefordert werden, und drücken Sie dann ENTER
, um die Datei zu speichern.
Schließlich müssen wir diesem die entsprechenden Berechtigungen erteilen:
sudo chmod a+x /bin/rm
Und los geht's.
$@
=> "$@"
. Was Sie hier vorschlagen, ist eine sehr gefährliche Version des Originals und sicher rm
: Was, wenn es eine Datei mit dem Namen gibt foo -i -r *
( -i
hinzugefügt, um die unschuldigen Benutzer zu schützen)?
"
Zitieren, $@
wie @xhienne sagt, möchte ich Sie dringend bitten, die Leser klar zu warnen, dass dies überhaupt keine Sicherheit bietet, da es viele Möglichkeiten gibt, eine Datei zu löschen. Eine ist anzurufen rmold
, aber es gibt eine Vielzahl von anderen Möglichkeiten, wie in anderen Antworten und Kommentaren zu ihnen besprochen. (Auch dann wird dies das Problem haben , dass rm
wird das Gefühl , wie es Dateien als den aktuellen Benutzer löscht - ohne genannt wird sudo
, und die normale rm
läuft als der Anrufer - tut dies aber als root Wenn sie vor kurzem haben sudo
ed, sie gewonnen‘ Sie werden nicht bemerken, dass sie möglicherweise Systemdateien löschen, auch wenn sie über die Änderung Bescheid wissen .)