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 /homekarşılar gereksinimleri ChrootDirectoryve sınırlı kullanıcılar tarafından listelenen edilemez, ancak sftponlykullanı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 /homeancak 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 ~usernameo kadar genişleyecektir /usernamekastedilen olmadığı, şimdi.
Ayrıca, sftponlykullanı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, /homekendi dizin adına bir sembolik bağlantı oluşturmaktır . Şimdi chroot altında, chroot /home/usernameolmadan 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 sftponlykullanıcı hakkında özel olan tek şey sftponlygruba 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
/homeHiyerarşiyi aşan ve sembolik bağlantıları izleyen komut dosyalarına dikkat etmelisiniz .
chrootKullanıcılar kendi edChrootDirectory? Erişebilirler mi?