Kami menemukan solusi baru-baru ini seperti ini:
/etc/ssh/sshd_config:
...
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory /home
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
izin direktori:
[email protected]:~ # chown root:root /home
[email protected]:~ # chmod 111 /home
[email protected]:~ # chmod 700 /home/*
Sekarang /home
memenuhi persyaratan untuk ChrootDirectory
dan tidak dapat dicantumkan oleh pengguna yang dibatasi, tetapi sftponly
pengguna tidak akan dapat masuk jika direktori home mereka diatur seperti biasa (/home/$LOGNAME
):di bawah lingkungan chroot, direktori home mereka tidak berada di dalam /home
tetapi langsung di bawah root (/
).
solusi 1
Setel rumah pengguna yang dibatasi ke tampilannya di bawah chroot:
[email protected]:~ # usermod -d /username username
peringatan 1
Jika ada pengguna yang tidak dibatasi atau skrip administrasi yang menggunakan ekspansi tilde bash seperti ~username
itu akan meluas ke /username
sekarang, bukan itu yang dimaksud.
Juga admin yang membuat sftponly
pengguna harus ingat untuk menggunakan rumah non-default. Dapat dipecahkan dengan skrip. Yang harus diingat oleh admin untuk digunakan.
solusi 2
Ini adalah alternatif dari yang sebelumnya yang akhirnya kami gunakan:
[email protected]:~ # ln -s . /home/home
Yaitu membuat symlink di dalam /home
ke dirname sendiri. Sekarang di bawah chroot /home/username
menunjuk ke direktori yang sama seperti tanpa chroot. Untuk pengguna terbatas yang masuk dengan sftp akan muncul sebagai /username
. Direktori ini dapat ditulis oleh pemiliknya (pengguna terbatas). Pengguna yang dibatasi tidak dapat mencantumkan direktori induk atau direktori home dari salah satu saudara berdasarkan nama.
Satu-satunya hal yang istimewa tentang sftponly
pengguna adalah partisipasinya dalam sftponly
kelompok. Kami merasa lebih mudah menanganinya daripada solusi 1.
memperingatkan 2
- Anda tidak dapat memiliki pengguna bernama 'home' dengan direktori home
/home/home
- Anda harus berhati-hati dengan skrip yang melewati
/home
hierarki dan ikuti symlink.
Anda perlu membuat struktur di dalam direktori home pengguna, seperti dir masuk dan keluar. Dir tersebut harus dimiliki oleh pengguna dan di sana dia akan dapat meletakkan dan mendapatkan file.
Saya memiliki pengaturan yang sama di server kami. Kami menggunakan konfigurasi SSHD yang sama. Direktori rumah pengguna dimiliki oleh root dan di dalamnya terdapat folder documents
dan public_html
dimiliki oleh masing-masing pengguna. Pengguna kemudian masuk menggunakan SFTP dan menulis ke folder tersebut (tidak langsung ke rumah). Karena SSH tidak diizinkan untuk mereka, itu berfungsi dengan baik. Anda dapat menyesuaikan direktori mana yang akan dibuat untuk pengguna baru di /etc/skel/ (minimal di openSUSE, saya tidak begitu paham dengan distro lain).
Kemungkinan lain adalah ACL (dokumentasi openSUSE) - ini dapat menambahkan izin menulis untuk masing-masing pengguna untuk direktori home-nya.