Actualizare: codul de mai jos a fost actualizat pentru a reflecta modificările identificate în răspunsul marcat și, prin urmare, funcționează conform așteptărilor.
Încerc să stabilesc utilizatori numai SFTP pe serverul meu, care sunt închiși în directorul lor de acasă. Când încerc să mă conectez la server, primesc o eroare de conductă spartă:
debug1: Autentificarea reușită (parolă).
Autentificat la xxxx.xxxxxxxx.com ([XX.XX.XX.XX]:22).
debug2: fd 5 setarea O_NONBLOCK
debug3: fd 6 este O_NONBLOCK
depanare1: canal 0: nou [sesiune-client]
debug3: ssh_session2_open: channel_new: 0
debug2: canal 0: trimite deschis
debug3: trimite pachet: tip 90
debug1: se solicită [email protected]
debug3: trimite pachet: tip 80
debug1: Intrarea în sesiunea interactivă.
debug1: gaj: rețea
debug3: trimite pachet: tip 1
packet_write_wait: Conexiune la portul 22 XX.XX.XX.XX: țeavă spartă
Nu s-a putut citi pachetul: conexiunea a fost resetată de către peer
Am stabilit că acest lucru este legat de încercările mele de a închide utilizatorul. Ale mele sshd_config
include:
Subsistem sftp intern-sftp
Grupul de potriviri sftponly
ForceCommand internal-sftp -d /%u
Autentificare prin parolă da
ChrootDirectory /home/sftp
PermisTunnel nr
AllowAgentForwarding nr
AllowTcpForwarding nr
X11Redirecționare nr
sftponly
este numele grupului pe care l-am creat pentru utilizatorii sftp. Proprietarul și grupul de /home/sftp
este rădăcină
cu numai permisiunea de scriere pentru proprietar (0711
).
$ chown root:root /home/sftp
$ chmod 0711 /home/sftp
Iată cum creez utilizatori (în acest exemplu, batman
) -- rețineți că fac acest lucru printr-un script Perl, de unde folosesc chpasswd
:
$ adduser --quiet --disabled-password --shell /bin/false --no-create-home --gecos "Utilizator" batman
$ echo "batman:batman123" | chpasswd
$ usermod -a -G sftponly batman
$ install -d -m 0755 /home/sftp/batman -o batman -g sftponly
Notă: creez manual directorul de pornire al utilizatorilor, în loc să-l transmit --sistem
arg pentru Adăugați utilizator, deoarece ajung să primesc o eroare când încerc mai târziu să schimb proprietarul directorului:
chown: grup nevalid: âbatman:batmanâ
Dacă îmi actualizez sshd_config
și schimbați directorul chroot în:
ChrootDirectory /home/sftp
Pot accesa cu succes serverul și nu mai primesc eroarea de conductă spartă. Cu toate acestea, aterizez /home/sftp
la conectare, unde văd o listă a tuturor celorlalte directoare de utilizatori, în loc să aterizez /home/sftp/batman
asa cum ma asteptam sa se intample.
Cum pot îmbunătăți/remedia acest lucru, astfel încât utilizatorii:
- au acces doar la propriul director (
/home/sftp/batman
)
- la conectare, va apărea a fi în interior
/
(care este de fapt /home/sftp/batman
)
- nu pot naviga la
/home/sftp
(astfel încât să nu poată vedea o listă cu alți utilizatori)