
Als Methode zum Einrichten einer grundlegenden Systemüberwachung habe ich ein Skript für die SSH-Anmeldung eingerichtet und einige grundlegende Shell-Befehle ausgeführt, um einige Dateien einzulesen /proc
. Ich möchte für diese Aufgabe ein spezielles Benutzerkonto erstellen, das über die folgenden Zugriffsrechte verfügen sollte:
- SSH
- Schlag
- Schreibgeschützt in
/proc
In anderen Beiträgen wurden RSSH oder Chroot erwähnt, aber sind das die besten Methoden? Meiner Meinung nach sollte es eine Möglichkeit geben, einen Benutzer ohne Berechtigungen zu erstellen und nur das hinzuzufügen, was benötigt wird, sodass meine Einschränkungen auf Dateisystemebene und nicht bei SSH durchgesetzt werden. Ist das möglich?
Auf allen Systemen, die ich derzeit überwachen möchte, läuft Ubuntu, ich möchte mich jedoch nicht auf eine bestimmte Distribution festlegen.
Antwort1
Erstens, Berechtigungen. Wenn Sie ein neues Konto erstellen ( adduser
jedenfalls auf Debian-basierten Systemen – bei anderen kann es etwas anders sein), erhalten Sie einen neuen Benutzer und eine neue Gruppe mit demselben Namen. Sie erhalten auch ein Home-Verzeichnis für den Benutzer. Dieser neue Benutzer hat Benutzer- und Gruppen-Lese-/Schreibberechtigungen für sein Home-Verzeichnis. Er kann auch auf alles zugreifen, was als allgemein lesbar gekennzeichnet ist, und alles ändern, was allgemein beschreibbar ist.
Soviel ich weiß, ist es nicht möglich, konkretausschließeneinen Benutzer oder eine Gruppe von weltweiten Lese-/Schreibberechtigungen mit dem traditionellen POSIX-Berechtigungssystem. SiedürfenAktivieren Sie jedoch die erweiterten ACLs (ähnlich wie NTFS von Windows, falls Sie damit vertraut sind), mit denen Sie bestimmte Verweigerungsberechtigungen festlegen können.
Eine alternative Methode ist die Einrichtung einesbenutzerdefinierte Anmeldeshell, mit dem chsh
Befehl oder durch Ändern von /etc/passwd
. Wenn sie sich anmelden, wird diese „Shell“ ausgeführt, wobei die Eingabe des Benutzers als Standardeingabe umgeleitet wird und die Standardausgabe/Fehlermeldung zur Terminalausgabe umgeleitet wird. Sie können diese „Shell“ so einstellen, dass siebeliebigausführbare Datei auf dem System, einschließlich (aber nicht beschränkt auf) Ihr eigenes C-Programm, Bash-/Python-/Perl-Skript usw.
Es gibt mehrere Möglichkeiten, wie Sie das tun können. Sie können die Login-Shell als Skript einrichten, das einfach die gewünschten Daten ausgibt und keine Eingaben entgegennimmt. Es gibt nur die Daten aus und beendet sich, wodurch die SSH-Sitzung geschlossen wird. Dies ist die sicherste Methode, allerdings nicht so flexibel.
Alternativ können Sie ein Skript verwenden, das einige Eingaben entgegennimmt und anhand dieser Eingaben bestimmt, was gedruckt werden soll. Wie Sie dies tun, bleibt Ihnen überlassen – wenn Sie ein bash
Skript verwenden, können Sie read
zusammen mit einer case
Anweisung oder einer Reihe von if
Anweisungen verwenden. Sie müssen jedoch darauf achten, dass Sie keine nicht bereinigten Befehle direkt vom Benutzer ausführen – und es gibt andere mögliche Sicherheitsprobleme bei der Verwendung nicht vertrauenswürdiger Eingaben. Sie könnten beispielsweise die Eingabe entgegennehmen processes
und die Ausgabe von zurückgeben ps -e
.
Wenn Sie möchten und mit C vertraut sind, können Sie sich sogar bash
selbst so ändern, dass kein Zugriff auf andere Verzeichnisse möglich ist. Es ist jedoch weitaus sicherer, entweder keine Eingaben anzunehmen oder nur bestimmte Whitelist-Befehle zu filtern, als zu versuchen, den Zugriff auf Verzeichnisse einzuschränken. Es ist auch einfacher, ein schnelles Shell-Skript zu schreiben, als ein komplexes C-Programm zu ändern.
Antwort2
Um den schreibgeschützten Zugriff auf /proc zu erzwingen, können Sie auf einen schreibgeschützten SSHFS-Klon von /proc zugreifen.