Es klingt, als würden Sie das HOME-Verzeichnis ändern, nicht das Root-Verzeichnis. Root wird immer / oder / root sein.
usermod -d /path/to/new/homedir/ username
Für einen Benutzer auf einem Linux-Host muss ich außer seinem Home-Verzeichnis alles unzugänglich machen.
Ich habe gehört, dass dies normalerweise geschieht, indem das Stammverzeichnis für den Benutzer geändert wird (und es auf das Home-Verzeichnis des Benutzers gesetzt wird). Ich habe jedoch keine Möglichkeit gefunden, dies zu tun.
Ich habe über den chroot
Befehl nachgedacht, aber es scheint, als würde er nur den angegebenen Befehl ausführen, wobei das angegebene Verzeichnis als Stammverzeichnis betrachtet wird. Es scheint chroot
also nicht das zu sein, was ich brauche.
Meine Frage ist also: Was ist der Befehl, der das Stammverzeichnis des Benutzers ändert?
Es klingt, als würden Sie das HOME-Verzeichnis ändern, nicht das Root-Verzeichnis. Root wird immer / oder / root sein.
usermod -d /path/to/new/homedir/ username
Ich stehe zu dieser Antwort und es ist mir egal, ob ich ein -1 darüber bekommen habe. Dies ist nichts, was Unix auf vernünftige Weise für Sie tun kann. Sie fragen nach etwas, das praktisch unmöglich ist.
Aber es gibt eine Art und Weise, etwas zu bekommen, nach dem Sie fragen. Verwenden Sie eine virtuelle Maschine. Richten Sie eine Instanz der virtuellen Maschine für den betreffenden Benutzer ein und erteilen Sie ihm nur Login-Rechte, nicht das Host-Betriebssystem.
Hier ist meine ursprüngliche Antwort:
Verwenden Sie einfach Berechtigungen. Dafür sind sie da. Ein Benutzer hat ohnehin keinen Schreibzugriff auf etwas anderes als / tmp und sein Home-Verzeichnis. Und sie müssen lesenden Zugriff auf /bin/
,, /usr/bin
haben /usr/lib
, /lib
oder sie werden überhaupt nichts tun können.
Wenn Sie wirklich etwas Strengeres wollen, als Sie von den Berechtigungen erhalten, sollten Sie sich die Einrichtung von Selinux ansehen, um sie weiter einzuschränken.
Mit chroot
nur geht nicht, Sie zu geben, was Sie wollen. Es ist wirklich kompliziert einzurichten und es gibt Wege, es zu umgehen.
Um sicher zu sein, dass "alles unzugänglich" hinter diesem Home-Verzeichnis liegt, würde ich chroot verwenden. Wenn Sie jedoch nichts tun können, wenn Sie das chrooted-Verzeichnis nicht vorbereiten, stehen Ihnen keine Binärdateien oder Bibliotheken zur Verfügung.
Die Konfiguration des FTP-Servers kann für Sie nützlich sein: http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap29sec296.html
Es handelt sich hierbei um vollständige Chroot-Einstellungen, um die FTP-Benutzer auf dieses Chroot-Verzeichnis zu beschränken.
siehe das Handbuch von useradd
. Sie müssen den -d
Schalter benutzen .
Ich denke, wenn Sie hinzufügen
if grep "\\<$\\>" /etc/jailbirds > /dev/null then echo I am not a crook else exec chroot $CWD endif
/etc/profile
Am Ende erhalten Sie möglicherweise das, wonach Sie fragen, aber es kann einige Nebenwirkungen haben, die mir nicht bewusst sind (die Übernahme des Shell-Laufs /etc/profile
kann Probleme verursachen). In diesem Fall müssen Sie eine Datei erstellen, /etc/jailbirds
die eine Liste der Benutzer ist, für die Sie chroot erstellen möchten . 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 wird für den Zugriff nicht in der Lage sein, /proc
die viel Shell - Utilities machen (wie ps
, top
und viele andere) nicht funktionieren. Der Benutzer kann auch nicht darauf zugreifen /dev/null
, wodurch eine Menge Dinge zerstört werden.
Der Benutzer wird auch nicht auf den Zugang der Lage sein, /dev/tty
die brechen less
und more
wenn es mit der Standardeingabe verwendet. 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 erhalten kann, die sich mit der Weiterleitung von stdin aus einer Pipe befassen.
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, die 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.
usermod -d /path/to/new/homedir/ username
Das beantwortet Ihre Frage, aber ich bin nicht sicher, was Sie brauchen?
Ich denke, du bist leicht verwirrt. Auf das Verzeichnis / root kann nur der root-Benutzer zugreifen. Jeder Benutzer hat in der Regel ein eigenes HOME-Verzeichnis in / home /, und der Root-Benutzer des Systems besitzt / root
Wenn Sie das HOME-Verzeichnis ändern möchten, folgen Sie den anderen Antworten oder bearbeiten Sie die Datei / etc / passwd
Erstellen Sie einen Gastbenutzer
useradd -s /bin/sh -m guest
Installieren Sie für sie eine Shell, die nicht von Bibliotheken von Drittanbietern abhängig ist
cd /home/guest apt-get download busybox-static dpkg -x *.deb . rm *.deb cd bin ./busybox --install .
Ändern Sie Ihr Stammverzeichnis in / home / guest und führen Sie es als Gast aus
mkdir /home/guest/etc grep guest /etc/passwd > /home/guest/etc/passwd chroot /home/guest /bin/sh exec env -i login -f guest
Innerhalb der Chroot können Sie einen SSH-Server installieren und erzeugen, so dass sich der Benutzer remote anmelden kann. Sie können jedoch auf Probleme stoßen, wenn bestimmte Anwendungen auf das / proc-Dateisystem und Freunde zugreifen möchten. In diesem Fall können Sie auf LXC-Container, Namespaces, virtuelle Maschinen usw. zugreifen, wo etwas wie Schroot oder Qemu eine einfachere Option wird.
Wenn Sie an einer selbstgezogenen Lösung festhalten, können Sie auf Sicherheitsprobleme stoßen, wenn Sie nicht vorsichtig sind (z. B. versehentlich den Besitz von / home / guest / bin an einen Gast übergeben. In diesem Fall wird der Gast beim nächsten Aufruf möglicherweise als root ausgeführt chroot).
Ich habe keine Ahnung, ob die obigen Befehle Ihren Wünschen entsprechen und / oder ob sie anfällig für Sicherheitslücken sind. Hoffe, dass sie helfen.