Wie füge ich einen SSH-Benutzer hinzu, der nur die Berechtigung hat, auf einen bestimmten Ordner zuzugreifen?

17

Wie füge ich einen SSH-Benutzer hinzu, der nur die Berechtigung hat, auf einen bestimmten Ordner zuzugreifen?

useradd -d /var/www/xyz.com.tr/musteri  -s /bin/bash -g sshd musteri

Ich habe einen Benutzer namens erstellt musteri. Ich habe den Home-Ordner und die Gruppe festgelegt. Daher möchte ich musteriBenutzer in "/var/www/xyz.com.tr/musteri" integrieren. Ich möchte nicht, dass es auf einen anderen Ordner zugreift.

Cello
quelle
Möchten Sie, dass der Benutzer vollen Shell-Zugriff hat oder nur Protokolle zum Kopieren von Dateien wie sftp und rsync?
Gilles 'SO - hör auf, böse zu sein'
In letzterem Fall möchten Sie sich möglicherweise scponlyals Shell umsehen und möglicherweise im chrootModus arbeiten, um den Zugriff auf dieses Verzeichnis und nirgendwo sonst zu beschränken.
Shadur
1
@ Gilles - Ich möchte über SFTP zugreifen. Ich möchte jedoch nicht, dass es auf einen anderen Ordner zugreift.
Cell-o
1
@ Cell-o: Wenn Sie nur wenige Dateiübertragungsprotokolle und keine Shells benötigen, verwenden Sie chroot plus scponly oder rssh (Google scponly chrootoder rssh chrootsollte Sie zu Howtos führen).
Gilles 'SO - hör auf, böse zu sein'
Wie wäre es mit ACLs?
fpmurphy

Antworten:

19

Es hört sich so an, als ob Sie möchten, dass Ihr Müşteriler Dateiübertragungszugriff auf einen Ordner hat, ohne ihm tatsächlich Muscheln zu geben. Dies ist eine gute Sache, da es, wie Binfalse betonte, schwierig ist , Shells mit eingeschränktem Zugriff zu versehen, da Shells auf alle Arten von Dingen zugreifen müssen, die auf dem System verstreut sind, um ausgeführt zu werden.

Um SFTP-Zugriff auf einen bestimmten Ordner zu gewähren, können Sie so etwas tun.

  1. Fügen Sie dem System eine neue Gruppe hinzu, sagen Sie 'sftponly'.
  2. Fügen Sie alle Benutzer auf Ihrem System hinzu, die über eingeschränkte Rechte für diese Gruppe verfügen sollen. Sie können ihnen auch eingeschränkte Shells wie / bin / true geben, dies ist jedoch nicht erforderlich.
  3. Ändern Sie Ihre SSH-Konfigurationsdatei (normalerweise /etc/ssh/sshd_config) mit diesen Zeilen
    Subsystem sftp internal-sftp

    Spielgruppe sftponly
        ChrootDirectory% h
        AllowTCPForwarding no
        X11Forwarding-Nr
        ForceCommand internal-sftp

Dies würde das sftp-Subsystem in SSH aktivieren und die Mitglieder dieser Systemgruppe zwingen, beim Anmelden nur dieses System zu verwenden. Außerdem würden sie in ihre Home-Verzeichnisse gelockt. Sie können dies so ändern, dass es auch ein Unterordner ihrer Home-Verzeichnisse ist, ChrootDirectory %h/musteri_sftpsodass sie den Rest ihrer Systemdateien nicht sehen können, sondern sich direkt in einem speziellen Unterordner ihres Home-Ordners anmelden.

Kolay Gelsin.

Caleb
quelle
Öncelikle teşekkürler. ;) Wie du erwähnt hast, habe ich SFTP eingerichtet. Aber ich habe ein Problem mit iptables. Hier ist meine Regel. -> RH-Firewall-1-INPUT -m Status --state NEW -m TCP -p TCP --dport 21 -j ACCEPT
Cell-o
1
Birşey değil. Während FTP Port 21 verwenden würde, ist SFTP ein FTP- ähnliches Protokoll, das über den SSH-Kanal ausgeführt wird. Daher wird der SSH-Port verwendet, der standardmäßig 22 ist.
Caleb,
Beachten Sie, dass Sie auch alle zuvor vorhandenen Subsystem-Befehle suchen und auskommentieren sollten (z. B. Subsystem sftp / usr / lib / openssh / sftp-server)
CnrL
Löste mein Problem UND lernte einige handliche türkische Phrasen! Bonus!
eimajenthat
2

Meiner Meinung nach ist dies sehr schwierig, wenn nicht unmöglich. Wenn der Benutzer eine Verbindung über SSH herstellt, benötigt er mindestens eine Shell, in Ihrem Fall die bash. Zur Ausführung /bin/bashbenötigt er Zugriffsrechte /bin. bashselbst muss einiges auslesen /etc(zB /etc/bash.bashrc), damit der Benutzer auch Zugriff darauf hat /etc. Angenommen, der Benutzer möchte sich nicht nur in diesem Verzeichnis aufhalten, sondern auch eine Datei lesen, sondern beispielsweise ausführen, auf die vimer auch zugreifen muss /usr/bin.
Dies ist nur eine kleine Demonstration, es gibt einige weitere Abhängigkeiten, zB ich weiß nicht wirklich, was passieren wird, wenn der Benutzer keinen Zugriff auf ... hat /tmp.

Sie sollten über Ihre Absicht nachdenken. Möchten Sie nur, dass jemand Lese- / Schreibzugriff auf einen Teil Ihres Webdienstes hat? Dann könnten Sie so etwas wie FTP einrichten, um ein bestimmtes Verzeichnis für diesen Benutzer zu exportieren. Er kann diese Dateien also ohne SSH-Zugriff lesen / schreiben.
Eine andere schöne Lösung wäre ein Repository. Richten Sie beispielsweise ein GIT-Repo ein und lassen Sie den Benutzer es klonen. Er kann seine Änderungen vor Ort vornehmen und Ihnen einen Patch senden. Sie können entscheiden, ob Sie diesen Patch anwenden möchten oder nicht. Ein Rollback für fehlerhafte Patches ist ebenfalls sehr einfach.

binfalse
quelle
rbashist genau dafür ausgelegt.
Bahamat
Dieses Ding nennt man eine eingeschränkte Shell . Da Cell-o jedoch nur Dateiübertragungen zulassen möchte, ist dies nicht das richtige Tool.
Gilles 'SO - hör auf, böse zu sein'