Wie ändert man das Stammverzeichnis für einen Linux-Benutzer?


0

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 dachte an das chroot Befehl, aber es scheint nur den angegebenen Befehl auszuführen, wobei das angegebene Verzeichnis als Stammverzeichnis betrachtet wird. So scheint es chroot ist nicht was ich brauche.

Meine Frage ist also: Was ist der Befehl, der das Stammverzeichnis des Benutzers ändert?



@ user257493 Wie ich verstanden habe, um /etc/security/chroot.conf Ich habe folgende Zeilen hinzugefügt: user1 /home/user1, und /home/user1 wird der root für user1 sein, oder? Sollte ich etwas neu starten, um die Änderungen an vorzunehmen /etc/security/chroot.conf wirksam werden

1
Ich denke, diese Frage muss geklärt werden ...
JT.WK

Wenn Sie alles außer dem Home-Verzeichnis nicht zugänglich machen, kann der Benutzer keine Befehle ausführen, da diese Befehle nicht in seinem Heimatverzeichnis liegen
nos

Ich habe dir eine neue Antwort auf deine Frage gegeben. Ich glaube nicht, dass es dir gefallen wird.
Omnifarious

Antworten:


3

Es klingt, als würden Sie das HOME-Verzeichnis ändern, nicht das Wurzelverzeichnis. Root wird immer / oder / root sein.

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

Ich muss die Wurzel wechseln, nicht das Zuhause.

2

Um sicher zu gehen, dass "alles unzugänglich" hinter diesem Home-Verzeichnis ist, 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.


2

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 Anmelderechte, nicht das Host-Betriebssystem.

Hier ist meine ursprüngliche Antwort:

Verwenden Sie einfach Berechtigungen. Dafür sind sie da. Ein Benutzer hat im Allgemeinen ohnehin keinen Schreibzugriff auf etwas anderes als / tmp und sein Heimatverzeichnis. Und sie müssen Lesezugriff haben /bin/. /usr/bin. /usr/lib, und /lib oder sie werden überhaupt nichts tun können.

Wenn Sie wirklich etwas strengeres wollen, als Sie von Berechtigungen erhalten, sollten Sie die Einrichtung von selinux so einrichten, dass Sie sie weiter einschränken können.

Verwenden chroot Ich werde dir einfach nicht das geben, was du willst. Es ist wirklich kompliziert einzurichten und es gibt Wege, es zu umgehen.


@Omnifarious Ich brauche user1, um den Rest der Welt nicht sehen zu können. Wenn Sie dieses Problem mit Berechtigungen lösen, müssen Sie den Rest der Welt ändern und nicht user1. Ich brauche eine Lösung, die das Problem durch das Ändern von user1 löst, nicht den Rest der Welt. Ja, wenn sich das Stammverzeichnis von Benutzer1 in seinem Heimatverzeichnis befindet, hat es keinen direkten Zugriff auf Verzeichnisse wie /bin, aber ich kann einen symbolischen Link erstellen /bin im Home-Verzeichnis von user1, so dass er entscheidet, was er sehen kann und was er nicht kann.

1
@Vahagn: Durch symbolische Links kann der Benutzer auf Dinge außerhalb seines Chroot-Gefängnisses zugreifen. Hardlinks werden zwar, können sich jedoch nicht auf Dateisysteme erstrecken. cd /home/new_guy ; ln -s /bin ./bin ; chroot . ls bin

1

siehe das Handbuch von useradd. Sie müssen das verwenden -d Schalter.


Ich muss die Wurzel wechseln, nicht das Zuhause.

1

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


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

Das beantwortet Ihre Frage, aber ich bin nicht sicher, was Sie brauchen?


Ich muss die Wurzel wechseln, nicht das Zuhause.

0

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


Root-Benutzer ist Gott; kann überall etwas sehen und tun. Benutzer von Puny können nur ihre eigene Domäne sehen und ausführen; Rest des Muliverses wird abgelehnt.
bbaja42

0

Erstellen Sie einen Gastbenutzer

useradd -s /bin/sh -m guest

Installieren 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 das 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 bei einer selbstgezogenen Lösung bleiben, 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.

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.