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 deiner /etc/profile
Sie erhalten vielleicht das, wonach Sie fragen, aber es kann einige Nebenwirkungen haben, von denen ich keine Kenntnis habe (das Shell-Laufen übernehmen) /etc/profile
kann Probleme verursachen). In diesem Fall müssten Sie eine Datei erstellen /etc/jailbirds
Dies war eine Liste der Benutzer, für die Sie chroot wollten. Sie müssen auch sicherstellen, dass diese Datei vorhanden ist, und entscheiden, was bei Fehlern beim Zugriff darauf zu tun ist, um sicherzustellen, dass andere Benutzer (insbesondere root) nicht von chroot eingesperrt werden
Darüber hinaus wird dies schwierig werden. Der Benutzer kann nicht zugreifen /proc
was viele Shell-Hilfsprogramme (wie ps
. top
und viele andere) funktionieren nicht. Der Benutzer kann auch nicht darauf zugreifen /dev/null
, die viele Sachen brechen werden.
Der Benutzer kann auch nicht darauf zugreifen /dev/tty
was wird brechen less
und more
bei Verwendung mit Standardeingabe. Die Anwendungen des Benutzers erben die Dateideskriptoren stdin, stdout und stderr open vor der Chroot, eröffnen jedoch weniger / dev / tty, so dass der Benutzer Tastatureingaben abrufen kann, um die Umleitung von stdin aus einer Pipe zu erledigen.
Sie können auch nicht auf Programme oder gemeinsam genutzte Bibliotheken oder viele Dateien zugreifen, die unter / etc (z. B. / etc / protocols) liegen und von vielen Programmen verwendet werden.
All dies sind Dinge, mit denen Sie umgehen können, aber am Ende müssen Sie viel mehr Arbeit erledigen, um die Umgebung der Benutzer nutzbar zu machen, als ich denke, dass Sie dies in Betracht gezogen haben.
Wenn Sie meinen Vorschlag ausprobieren, schlage ich vor, dass Sie sehr vorsichtig sind. Es wäre leicht, es falsch zu verstehen und die Dinge durcheinander zu bringen. Ich habe das übrigens nicht getestet.