Wie ändere ich das Stammverzeichnis für einen Linux-Benutzer?

Wie ändere ich das Stammverzeichnis für einen Linux-Benutzer?

Für einen Benutzer auf einem Linux-Host muss ich alles außer seinem Home-Verzeichnis unzugänglich machen.

Ich habe gehört, dass dies normalerweise dadurch erfolgt, dass das Stammverzeichnis des Benutzers geändert wird (und auf das Home-Verzeichnis des Benutzers festgelegt wird), ich konnte jedoch keine Möglichkeit dazu finden.

Ich habe über den chrootBefehl nachgedacht, aber es scheint, dass er nur den angegebenen Befehl ausführt und das angegebene Verzeichnis als Stammverzeichnis betrachtet. Es scheint also chrootnicht das zu sein, was ich brauche.

Meine Frage lautet also: Welcher Befehl ändert das Stammverzeichnis des Benutzers?

Antwort1

Es klingt, als ob Sie das HOME-Verzeichnis ändern möchten, nicht das Stammverzeichnis. Root ist immer / oder /root.

usermod -d /path/to/new/homedir/ username

Antwort2

Um sicherzugehen, dass „alles unzugänglich“ hinter diesem Home-Verzeichnis ist, würde ich chroot verwenden, aber nachdem Sie das chroot-Verzeichnis nicht vorbereitet haben, können Sie nichts tun, da Ihnen keine Binärdateien oder Bibliotheken zur Verfügung stehen.

Die Konfiguration des FTP-Servers kann für Sie hilfreich sein: http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap29sec296.html

Es handelt sich um einen vollständigen Chroot-Einstellungssatz, um die FTP-Benutzer auf dieses Chroot-Verzeichnis zu beschränken.

Antwort3

Ich stehe zu dieser Antwort und es ist mir egal, ob ich dafür eine -1 bekomme. Das ist nichts, was Unix in irgendeiner vernünftigen Weise für Sie tun kann. Sie verlangen etwas, das praktisch unmöglich ist.

Aber es gibt eine Möglichkeit, so etwas zu bekommen, wie Sie es sich wünschen. Verwenden Sie eine virtuelle Maschine. Richten Sie eine Instanz der virtuellen Maschine für den betreffenden Benutzer ein und erteilen Sie ihm nur Anmelderechte für diese, nicht für das Host-Betriebssystem.

Hier ist meine ursprüngliche Antwort:

Verwenden Sie einfach Berechtigungen. Dafür sind sie da. Ein Benutzer hat im Allgemeinen sowieso keinen Schreibzugriff auf etwas anderes als /tmp und sein Home-Verzeichnis. Und er muss Lesezugriff auf /bin/, /usr/bin, /usr/lib, und haben /lib, sonst kann er überhaupt nichts tun.

Wenn Sie wirklich strengere Bedingungen als die Ihnen zustehenden Berechtigungen wünschen, sollten Sie Selinux so einrichten, dass Sie diese noch weiter einschränken können.

Die Verwendung chrootvon bringt Ihnen nicht das, was Sie wollen. Die Einrichtung ist wirklich kompliziert und es gibt Möglichkeiten, dies zu umgehen.

Antwort4

Ich denke, wenn Sie hinzufügen

if grep "\\<${USER}\\>" /etc/jailbirds > /dev/null
then
    echo I am not a crook
else
    exec chroot $CWD
endif

bis zum Ende Ihres Befehls /etc/profileerhalten Sie möglicherweise das, wonach Sie suchen, aber es kann einige Nebenwirkungen haben, die mir nicht bekannt sind (die Übernahme der laufenden Shell /etc/profilekönnte Probleme verursachen). In diesem Fall müssten Sie eine Datei erstellen /etc/jailbirds, die eine Liste der Benutzer enthält, für die Sie chrooten möchten. Sie müssen auch sicherstellen, dass diese Datei existiert, und entscheiden, was im Falle von Fehlern beim Zugriff darauf zu tun ist, um sicherzustellen, dass andere Benutzer (insbesondere Root) nicht durch chroot gesperrt werden.

Darüber hinaus wird dies schwierig sein. Der Benutzer kann nicht auf zugreifen, /procwas dazu führt, dass viele Shell-Dienstprogramme (wie ps, topund viele andere) nicht funktionieren. Der Benutzer kann auch nicht auf zugreifen /dev/null, was viele Dinge kaputt macht.

Der Benutzer kann auch nicht darauf zugreifen, was bei Verwendung mit der Standardeingabe zu /dev/ttyProblemen führt . Die Anwendungen des Benutzers erben die offenen Dateideskriptoren stdin, stdout und stderr von vor dem Chroot, aber Less öffnet /dev/tty, sodass es Tastenanschläge vom Benutzer empfangen kann, um mit der Umleitung von stdin von einer Pipe umzugehen.lessmore

Sie können außerdem nicht auf Programme oder gemeinsam genutzte Bibliotheken oder auf viele Dateien zugreifen, die unter /etc liegen (wie etwa /etc/protocols), die von vielen Programmen verwendet werden.

All diese Dinge können Sie umgehen, aber letzten Endes wird der Arbeitsaufwand, die Benutzerumgebung nutzbar zu machen, wesentlich größer sein, als Sie vermutlich bedacht haben.

Wenn Sie meinen Vorschlag ausprobieren, sollten Sie sehr vorsichtig sein. Es ist leicht, etwas falsch zu machen und alles zu vermasseln. Ich habe das übrigens nicht getestet.

verwandte Informationen