Wie kann ich ein Passwort für den Befehl 'rm' einrichten?


29

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 rmBefehl erstellen.


50
Sie sollten das Benutzerkonto mit einem Passwort schützen, damit diese "Freunde" nicht an erster Stelle darauf zugreifen können.
Andrea Lazzarotto

14
Sie sollten wirklich versuchen, die Funktionsweise des Systems zu erlernen und seine Funktionalität zu nutzen.
AlexP

13
Es ist wahrscheinlich, dass Ihre Freunde versuchen, "Ihnen eine Lektion zu erteilen", indem Sie mit Ihrem Computer herumdrehen, wenn Sie ihn unbewacht lassen. Lernen Sie diese Lektion, indem Sie Ihr Konto schützen und den Gastzugriff verweigern oder den Gastzugriff mit reduzierten Berechtigungen gewähren.
Ken Williams

4
Bitte denken Sie auch an den unlinkBefehl. Auch über den mvBefehl, da man damit effektiv Dateien überschreiben kann. Also ...
Kos

17
Mit solchen Freunden, die Feinde brauchen?
Kasperd

Antworten:


46

Es gibt keine einfache Möglichkeit, ein derartiges Kennwort für den rmBefehl selbst einzurichten , nicht ohne viel Code-Hacking, das wahrscheinlich dazu führt, dass apt-getPakete 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 sudoZugriff, kein rootPasswort 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.

  1. Wenn das System eingeschaltet ist, ist die Festplatte bereits entschlüsselt, sodass Sie in Gefahr sind.
  2. Einige Systeme haben Festplattenverschlüsselungsansätze gebrochen . Beispielsweise verwenden einige Acer-Systeme Ihr Kennwort nur, um die Verschlüsselung / Entschlüsselung zu autorisieren, und verwenden fest codierte Kennwörter oder verwenden eine schwache Verschlüsselung, die leicht geknackt werden kann.
  3. Es gibt immer Methoden, um in die 'Schlüssel' einzubrechen oder sie direkt nach dem Ausschalten eines Systems aus dem Speicher zu extrahieren, bevor die RAM-Daten 'verschwunden' oder beschädigt sind. (Ich werde nicht in der Tiefe auf diese gehen, aber diese Risiken nicht existieren).
  4. Der physische Zugriff auf das Gerät, unabhängig davon, ob das System verschlüsselt ist oder nicht, gefährdet Ihre Daten immer. Gewähren Sie Personen, denen Sie möglicherweise keinen vollständigen Zugriff auf Ihr System gewähren möchten, keinen physischen Zugriff (oder keinen Remotenetzwerkzugriff).

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.


Mein Laptop hat eine verschlüsselte Festplatte. Ist es immer noch ein Risiko, anderen Zugang zu gewähren?
Tim

2
@Tim Ja, wenn das System eingeschaltet und entschlüsselt ist. Und selbst wenn es ausgeschaltet ist, ist es mit der richtigen Technologie, Zeit und Hingabe möglich, Entschlüsselungsschlüssel zu finden, die möglicherweise noch im RAM gespeichert sind. Festplattenverschlüsselung ist kein 100% iger Schutz - es gibt Wege, es ist eher eine Frage von "Ist der Bösewicht bereit, tatsächlich so viel Zeit und Mühe in sie zu stecken". Nach der Frage des OP ist sein System eingeschaltet und nicht (vollständig oder teilweise) verschlüsselt, sodass das Löschrisiko besteht.
Thomas Ward

3
@Tim Um die Antwort von Thomas zu ergänzen, haben einige Laptops eine fehlerhafte Implementierung der Festplattenverschlüsselung (wenn Sie sich auf Hardware-FDE verlassen). AFAIR Acer-Laptops verwenden Ihr Kennwort nicht wirklich zur Verschlüsselung, sondern nur zur Autorisierung der Verschlüsselung / Entschlüsselung mit einem fest codierten Kennwort.
Gronostaj

Daten sind immer gefährdet, wenn nicht vertrauenswürdige Person Zugriff auf ein System hat, verschlüsselt oder nicht
Sergiy Kolodyazhnyy

1
@LightnessRacesinOrbit apt-getlä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' *inst344 Zeilen ausgegeben , von denen 333 wie echte Verwendungen des rmBefehls aussehen - nur in Installationsskripten . grep -P '\brm\b' *rmzeigt noch mehr in Entfernungsskripten (zum Löschen von Konfigurationsdateien, nicht von Paketdateien).
Eliah Kagan

19

Hier geht es möglicherweise nicht wirklich um den rmBefehl, da es einfache Möglichkeiten gibt, Dateien zu löschen, ohne ihn zu verwenden . Wenn das Problem darin besteht, dass Ihre Freunde den rmBefehl 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 rmBefehl selbst (oder einen diskreten Befehlssatz) konzentriert. wird dich beschützen.

Müssen Sie den Zugriff kontrollieren oder nur ehrliche Fehler verhindern?

Angenommen, Ihre Freunde möchten nicht, dass sie Ihre Dateien löschen, dann gibt es zwei Möglichkeiten:

  1. 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.

  2. Sie könnten es aus Versehen tun. In diesem Szenario sind Ihre Freunde extrem unfallanfällig und führen weiterhin rmBefehle 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 rmBefehl 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 rmfalsche 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:

  • Bildung. Deine Freunde müssen wissen, was sie tun und wie sie es vermeiden können.
  • Schnittstellenänderungen. Sie können das versehentliche Löschen von Dateien erschweren, ohne die eigentliche Fähigkeit zum Löschen von Dateien zu beeinträchtigen (für die separate Benutzerkonten erforderlich sind), indem Sie festlegen, dass Dateien , die ohne weitere Aktionen ausgeführt werden, nicht sofort gelöscht werden . Die Antwort von Videonauth gibt einen Ansatz dafür. In dieser Antwort stelle ich eine andere vor.rm filefile

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.

Wenn Sie rmvor 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 rmeinen Shell-Alias erstellen , der tatsächlich ausgeführt wird rm -i. Durch das Übergeben des -iFlags an rmwird 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_aliasesoder .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:

  • Sie können wählen, ob Sie mit dem Löschen fortfahren möchten, wenn Sie dazu aufgefordert werden.
  • Sie können den Alias ​​auf verschiedene Arten umgehen, z. B. durch Ausführen /bin/rmoder Aufheben des Alias ( unalias rm).
  • Es gibt viele Situationen, in denen keine Alias-Erweiterung auftritt und in diesen Situationen rmnicht mit ausgeführt werden -i.
  • Sie können weiterhin Dateien löschen, indem Sie eine der Techniken verwenden, die dies nicht erfordern rm (wie dies beim Ansatz von Videonauth der Fall ist - siehe unten).
  • Sie können weiterhin Daten beschädigen, ohne Dateien zu löschen, z. B. durch Überschreiben oder anderweitiges Ändern ihres Inhalts (wie dies auch bei der Vorgehensweise von Videonauth der Fall ist).

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 rmzu rm -iweniger effektiv bei der Vermeidung von Fehlern machen - bis sie eine andere Technik des Weg zu verwenden , um Dateien zu entfernen. Zu diesem Zeitpunkt ist rmes 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 rmauf rm -ihö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 sudokönnen Sie Programme als ein anderer Benutzer ausführen, nachdem Sie überprüft haben, ob Sie dazu berechtigt sind. passwdBearbeitet 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/sudound /usr/bin/passwdkönnen dies tun, weil sie das setuid-Bit gesetzt haben, wie sin 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/rmkeine hat s: seine Berechtigungen sind -rwxr-xr-x, während /usr/bin/passwdund /usr/bin/sohaben -rwsr-xr-xstattdessen. Dies macht es so, dass es unabhängig davon, wer ausgeführt wird passwdoder sudotatsä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), sudound passwddie 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/rmfunktioniert 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 sudound passwdprüfen, wer sie wirklich ausführt, und prüfen, ob etwas zulässig ist, bevor sie rmdies 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.

Dateien löschen ohne rm

Die naheliegende Möglichkeit, eine Datei ohne rmUbuntu 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.txtim 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")'( pythonstatt python3in ä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 rmBefehl ändern (um ein Kennwort zu erzwingen oder auf andere Weise) oder den Zugriff einschränken, rmum ihn überhaupt nicht zu verhindern.


2
Für den tatsächlichen Einsatz, ich wie GNU rm‚s - -IOption. 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, \rmum eine Alias-Erweiterung zu vermeiden, oder yohne 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.
Peter Cordes

2
Ein weiterer interessanter Weg, um die Verknüpfung von Dateien aufzuheben: mv foo.txt /tmp/.goneStarten Sie das System neu, und verwerfen Sie die gesicherten tmpfs /tmp. Oder mvbenennen 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.
Peter Cordes

16

Sie können die Berechtigungen für den /bin/rmBefehl ü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 rmvom 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 rmdirBefehl 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 755fü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 chmodVerwendung von setfacl -m, um die Ausführung bestimmter Benutzer zu verhindern, rmund rmdirgilt 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:

  • Das -mFlag bedeutet, dass die Datei-ACL geändert werden soll.
  • Der erste Teil der Änderung usteht für Benutzer. Es kann die folgenden Werte ufür Benutzer, gfür Gruppe und ofür alle anderen haben
  • Der mittlere Teil <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.
  • Der dritte Teil enthält die Art der Berechtigungen, die Sie festlegen möchten. In diesem Beispiel möchten wir überhaupt keine Berechtigungen festlegen -, daher kann es auch die folgenden Buchstaben rfür Leseberechtigungen, wSchreibberechtigungen und xfür die Ausführung enthalten.

4
Es ist besser, ACLs zu verwenden, als Ausführungsberechtigungen für andere zu entfernen. Jeder Systemdienst, der nicht als Root ausgeführt wird, ist jetzt behindert.
muru

2
sudo setfacl -m u:<username>:- /bin/rm /bin/rmdir, IIRC. Sie können die ACL mitgetfacl /bin/rm /bin/rmdir
muru

2
Der einzige Nachteil bei solchen ACLs ist, dass es schwierig ist, diese langfristig aufrechtzuerhalten. Und es ist unmöglich zu warten, wenn nicht für jede Person , die das System verwendet, einzelne Benutzer im System vorhanden sind. Ansonsten ist es eine gute Idee.
Thomas Ward

4
@ DavidFoerster Ja. Es gibt praktisch unbegrenzte Möglichkeiten, Dateien ohne diese zu löschen 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 rmBefehl benötigen. (Ich verzichte darauf, es selbst zu bearbeiten, falls du das nicht sagen willst.)
Eliah Kagan

1
Vergessen Sie nicht, dass Perl, Python und alle Compiler im System es den anderen Benutzern ermöglichen, auch Dateien zu löschen. Wenn Sie verhindern möchten, dass Benutzer Dateien löschen, müssen Sie nicht nur die Berechtigungen für den rmBefehl ändern .
Jonathan Leffler

8

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.


5

Manchmal sind es nicht unsere Freunde, wir sind unsere eigenen schlimmsten Feinde

Ich habe ein Skript zum Passwortschutz geschrieben, rmdas dem angeforderten OP entspricht, aber auch Änderungen vorgenommen, um ein versehentliches Löschen zu verhindern:

  • /
  • /Zuhause
  • /Behälter

Bearbeiten: 5. März 2017 - Ändern der Überprüfungsmethode, ob im Terminal ausgeführt wird.


Erstellen Sie das Skript

Verwenden gksu gedit /usr/local/bin/rmund 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.

Markiere neues rmSkript als ausführbar

Neues rmSkript als ausführbar markieren mit:

sudo chmod +x /usr/local/bin/rm

Wie es funktioniert

rm Passwort

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/binin der Liste höher ist als /binunser Befehl rmheißt. Nachdem es ein gültiges Passwort erhalten hat, ruft es /bin/rmauf, 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 sudoverwendet wird und fragt nicht nach einem Passwort. Außerdem rmist beim Aufruf aus der GUI-Anwendung kein Passwort erforderlich.

Die Skriptaufrufe logger, die jedes Mal rmaufgezeichnet werden müssen, wurden manuell über das Terminal aufgerufen. Die Befehlsverwendung wird in aufgezeichnet /var/log/syslog.


1
Sie können das Kennwort maskieren, indem Sie einfach eine gehashte Version des Kennworts in das Skript einfügen. Wenn der Benutzer ein Kennwort eingibt, kann das Kennwort einfach gehasht und mit dem fest codierten Hash verglichen werden.
InitializeSahib

@InitializeSahib Hashed Password Support (Verschlüsselung) wurde dem Skript hinzugefügt.
WinEunuuchs2Unix

3

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 rsyncoder 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.


3
Möglicherweise möchten Sie darauf hinweisen, wie die Weitergabe von Löschvorgängen verhindert werden kann. Und im Idealfall eine Möglichkeit, dies aus- und einzuschalten, damit der Benutzer permanent löscht, wenn er etwas tut, das gelöscht werden muss.
Ostergaard

@ajostergaard Mein Gedanke war, dass er jedes Mal, wenn er seinen Computer von seinen Freunden zurückbekommt, manuell prüft, ob nichts fehlt, und alles, was ist, wiederherstellt. Mein eigenes bevorzugtes Tool ist jedoch das unisono im interaktiven GUI-Modus, mit dem sich Löschvorgänge leicht erkennen und rückgängig machen lassen.
Random832

2

Nicht die direkte Antwort auf die Frage, sondern:

Wenn Ihre Freunde Ihre Dateien mit dem rmBefehl 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 mvBefehl 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.


1

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.


0

Eine sehr alberne Lösung für ein sehr albernes Problem.

Wenn Sie wollen nicht chmod rm, rmdiroder 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 rmSystem zur Eingabe eines Kennworts aufgefordert ( wenn Sie jedoch ein falsches Kennwort erraten, wird der fehlgeschlagene Versuch protokolliert), und Sie können einfach eingeben rmaliasoder 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.


Es hört sich so an, als wären Sie auf dem richtigen Weg. Ihre Antwort könnte durch die Ausarbeitung, wie man Setup - Alias werden zu verbessern, sudo [user]unddummy user
WinEunuuchs2Unix

0

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/rmoldum 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 CTRLund drücken Sie, Xum den Vorgang zu beenden. Drücken YSie, 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.


1
Sofern Sie keinen sehr guten Grund haben, sollten Skriptvariablen immer in Anführungszeichen gesetzt werden: $@=> "$@". 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 *( -ihinzugefügt, um die unschuldigen Benutzer zu schützen)?
Xhienne

Zusätzlich zum "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 rmwird das Gefühl , wie es Dateien als den aktuellen Benutzer löscht - ohne genannt wird sudo, und die normale rmläuft als der Anrufer - tut dies aber als root Wenn sie vor kurzem haben sudoed, sie gewonnen‘ Sie werden nicht bemerken, dass sie möglicherweise Systemdateien löschen, auch wenn sie über die Änderung Bescheid wissen .)
Eliah Kagan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.