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 chroot
Befehl nachgedacht, aber es scheint, dass er nur den angegebenen Befehl ausführt und das angegebene Verzeichnis als Stammverzeichnis betrachtet. Es scheint also chroot
nicht 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 chroot
von 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/profile
erhalten Sie möglicherweise das, wonach Sie suchen, aber es kann einige Nebenwirkungen haben, die mir nicht bekannt sind (die Übernahme der laufenden Shell /etc/profile
kö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, /proc
was dazu führt, dass viele Shell-Dienstprogramme (wie ps
, top
und 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/tty
Problemen 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.less
more
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.