Son zamanlarda şu şekilde bir çözüm bulduk:
/ Etc / SSH / sshd_config:
...
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory /home
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
dizin izinleri:
root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*
Şimdi /home
karşılar gereksinimleri ChrootDirectory
ve sınırlı kullanıcılar tarafından listelenen edilemez, ancak sftponly
kullanıcıların kendi ev dizinleri (her zamanki gibi ayarlanmış olup olmadığını giriş yapmaya mümkün olmayacaktır /home/$LOGNAME
): chroot altında kendi dizinleri değil içerde /home
ancak doğrudan altında root ( /
).
geçici çözüm 1
Kısıtlı kullanıcıların evlerini chroot altında görünme biçimlerine ayarlayın:
root@server:~ # usermod -d /username username
caveate 1
Sınırsız kullanıcılara veya bazı yönetim komut kullandığı bash en tilde genişleme biri gibi olursa ~username
o kadar genişleyecektir /username
kastedilen olmadığı, şimdi.
Ayrıca, sftponly
kullanıcıları oluşturan yöneticinin varsayılan olmayan ev kullanmayı hatırlaması gerekir. Bir script ile çözülebilir. Yöneticinin kullanmayı hatırlaması gereken.
geçici çözüm 2
Bu, kullandığımız öncekine bir alternatiftir:
root@server:~ # ln -s . /home/home
Bu, /home
kendi dizin adına bir sembolik bağlantı oluşturmaktır . Şimdi chroot altında, chroot /home/username
olmadan aynı dizine işaret eder. Sftp ile giriş yapan kısıtlı kullanıcı için olarak görünür /username
. Bu dizin sahibine yazılabilir (kısıtlı kullanıcı). Kısıtlı kullanıcı, kardeşlerinden herhangi birinin üst veya ev dizinlerini ada göre listeleyemez.
Bir sftponly
kullanıcı hakkında özel olan tek şey sftponly
gruba katılımıdır . Geçici çözüm 1'den daha kolay başa çıktık.
caveates 2
- Bir giriş dizini içeren 'home' adlı kullanıcınız olamaz
/home/home
/home
Hiyerarşiyi aşan ve sembolik bağlantıları izleyen komut dosyalarına dikkat etmelisiniz .
chroot
Kullanıcılar kendi edChrootDirectory
? Erişebilirler mi?