85 lines
3.4 KiB
Markdown
85 lines
3.4 KiB
Markdown
|
---
|
||
|
title: "Chroot_sftp_mit_openssh"
|
||
|
date: 2024-05-28T14:30:00+02:00
|
||
|
slug: 2024-05-28-chroot_sftp_mit_openssh
|
||
|
type: posts
|
||
|
categories:
|
||
|
- Linux
|
||
|
tags:
|
||
|
- openssh
|
||
|
- sftp
|
||
|
-
|
||
|
---
|
||
|
|
||
|
### Einsperren von sftp usern in ein chroot
|
||
|
|
||
|
Ich bin nicht immer so konsequent aufzuschreiben was ich so auf meinem Server mache. Bei Neuinstallationen oder ähnlichem muss ich dann manche Sachen immer wieder nachschlagen...
|
||
|
|
||
|
Da [Schenklkopfer](https://chaos.social/@schenklklopfer) [hier](https://chaos.social/@schenklklopfer/112514806811978790) im Fediverse nach einer Lösung gesucht hat ssh user in ein chroot zu sperren hab ich gedacht ich schreib da mal meine Vorgehensweise nieder.
|
||
|
|
||
|
Als erstes erstellen wir ein Verzeichnis für die sftp-user
|
||
|
```
|
||
|
mkdir -p /home/shared
|
||
|
# für jeden user wiederholen
|
||
|
mkdir -p /home/shared/sftpuser/files
|
||
|
```
|
||
|
Für die sftp-user erstellen wir nun eine eigene Gruppe die später in der *sshd_config* abgefragt wird.
|
||
|
Da der neue user nur für sftp benutzt werden soll deaktivieren wir auch gleich den Login.
|
||
|
```
|
||
|
addgroup sftp
|
||
|
adduser --ingroup sftp --shell /sbin/nologin --home /home/shared/sftpuser/files sftpuser
|
||
|
```
|
||
|
Als nächstes erstellen wir ein *authorized_keys* file um ein passwortloses anmelden zu erlauben.
|
||
|
Dieses könnt ihr dann mit eurem puplic-key befüllen.
|
||
|
```
|
||
|
mkdir -p /home/shared/sftpuser/files/.ssh
|
||
|
touch /home/shared/sftpuser/files/.ssh/authorized_keys
|
||
|
```
|
||
|
Nun ist es ganz wichtig die richtigen Rechte für die Verzeichnisse zu vergeben. Ansonsten wird es nicht funkionieren.
|
||
|
```
|
||
|
chmod -R 755 /home/shared/sftpuser
|
||
|
chown -R root:sftp /home/shared/sftpuser
|
||
|
chown -R sftpuser:sftp /home/shared/sftpuser/files
|
||
|
```
|
||
|
Sollte es nicht erwünscht sein, dass die authorized_keys vom user selbst bearbeitet werden dürfen, dann können hier noch die Rechte angepasst werden
|
||
|
```
|
||
|
chmod 644 /home/shared/sftpuser/files/.ssh/authorized_keys
|
||
|
chown root /home/shared/sftpuser/files/.ssh/authorized_keys
|
||
|
```
|
||
|
Nachdem jetzt alles vorbereitet ist müssen wir */etc/ssh/sshd_config* noch anpassen.
|
||
|
Dazu ändern wir das Subsystem (wenn es nicht schon so ist) auf *internal-sftp*.
|
||
|
```
|
||
|
# override default of no subsystems
|
||
|
Subsystem sftp internal-sftp
|
||
|
```
|
||
|
Am Ende fügen wir eine Abfrage nach der Gruppe hinzu und schicken alle user die in der gruppe *sftp* sind ins chroot-Verzeichnis.
|
||
|
```
|
||
|
Match Group sftp
|
||
|
ChrootDirectory /home/shared/%u
|
||
|
ForceCommand internal-sftp
|
||
|
PermitTunnel no
|
||
|
AllowAgentForwarding no
|
||
|
AllowTcpForwarding no
|
||
|
X11Forwarding no
|
||
|
```
|
||
|
Es kann auch ein extra Port angegeben werden. Dies finde ich vor allem sehr interessant, wenn der share z.B. im Heimnetzwerk läuft und ins Internet freigegeben werden soll aber kein sshlogin möglich sein muss. So kann der extra Port am Router freigegeben werden und der normale Port wird nicht weitergeleitet.
|
||
|
Dazu muss ganz oben in der *sshd_config* noch ein zweiter Port hinzugefügt werden.
|
||
|
```
|
||
|
Port 22
|
||
|
Port 2222
|
||
|
```
|
||
|
Dieser kann nun unten zusätzlich abgefragt werden.
|
||
|
```
|
||
|
Match LocalPort 2222 Group sftp
|
||
|
ChrootDirectory /home/shared/%u
|
||
|
ForceCommand internal-sftp
|
||
|
PermitTunnel no
|
||
|
AllowAgentForwarding no
|
||
|
AllowTcpForwarding no
|
||
|
X11Forwarding no
|
||
|
```
|
||
|
Jetzt muss der sshd server einmal neugestartet werden damit die Änderungen übernommen werden.
|
||
|
Falls ihr euch nicht per keyfile einloggen könnt, dann sollten die Verzeichnisberechtigungen nochmal kontrolliert werden.
|
||
|
|
||
|
Viel Spaß damit!
|