Jika Anda ingin menyiapkan akun di sistem Anda yang hanya akan digunakan untuk mentransfer file (dan bukan untuk ssh ke sistem), Anda harus menyiapkan SFTP Chroot Jail seperti yang dijelaskan dalam artikel ini.
Dalam skenario sftp biasa (ketika chroot sftp tidak diatur), jika Anda menggunakan sftp, Anda dapat melihat file root seperti yang ditunjukkan di bawah ini.
Jika Anda ingin memberikan akses sftp pada sistem Anda ke vendor luar untuk mentransfer file, Anda sebaiknya tidak menggunakan sftp standar. Sebagai gantinya, Anda harus menyiapkan Chroot SFTP Jail seperti yang dijelaskan di bawah ini.
Lingkungan SFTP Non-Croot
Dalam contoh berikut (lingkungan sftp khas), john dapat sftp ke sistem, dan melihat folder /etc dan mengunduh file dari sana.
# sftp [email protected] john@thegeekstuff's password: sftp> pwd Remote working directory: /home/john sftp> ls projects john.txt documents sftp> cd /etc sftp> ls -l passwd -rw-r--r-- 0 0 0 3750 Dec 29 23:09 passwd sftp> get passwd Fetching /etc/passwd to passwd /etc/passwd 100% 3750 3.7KB/s 00:00
Lingkungan SFTP Chroot
Dalam contoh berikut, john dapat sftp ke sistem, dan hanya melihat direktori yang telah Anda tetapkan untuk john untuk melakukan sftp (yaitu / masuk).
Ketika john mencoba melakukan 'cd /etc', itu akan memberikan pesan kesalahan. Karena SFTP disiapkan di lingkungan chroot, john tidak dapat melihat file lain di sistem.
# sftp [email protected] john@thegeekstuff's password: sftp> pwd Remote working directory: /home/john sftp> ls sftp> cd /etc Couldn't canonicalise: No such file or directory
Sekarang setelah Anda mengetahui apa itu lingkungan SFTP Chroot, mari kita lihat cara menyiapkannya.
1. Buat Grup Baru
Buat grup bernama sftpusers. Hanya pengguna yang termasuk dalam grup ini yang akan secara otomatis dibatasi ke lingkungan chroot SFTP di sistem ini.
# groupadd sftpusers
2. Buat Pengguna (atau Ubah Pengguna yang Ada)
Katakanlah Anda ingin membuat pengguna tamu pengguna yang seharusnya hanya diizinkan untuk melakukan SFTP di lingkungan chroot, dan tidak boleh diizinkan untuk melakukan SSH.
Perintah berikut membuat guestuser, menugaskan pengguna ini ke grup sftpusers, menjadikan /incoming sebagai direktori home, menetapkan /sbin/nologin sebagai shell (yang tidak akan mengizinkan pengguna untuk ssh dan mendapatkan akses shell).
# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser # passwd guestuser
Verifikasi bahwa pengguna dibuat dengan benar.
# grep guestuser /etc/passwd guestuser:x:500:500::/incoming:/sbin/nologin
Jika Anda ingin memodifikasi pengguna yang ada dan menjadikannya pengguna sftp saja dan memasukkannya ke dalam chroot sftp jail, lakukan hal berikut:
# usermod -g sftpusers -d /incoming -s /sbin/nologin john
Sebagai catatan terkait, jika Anda harus mentransfer file dari windows ke Linux, gunakan salah satu klien sftp yang disebutkan dalam daftar 7 klien sftp teratas ini.
3. Siapkan Subsistem sftp-server di sshd_config
Anda harus menginstruksikan sshd untuk menggunakan internal-sftp untuk sftp (bukan sftp-server default).
Ubah file /etc/ssh/sshd_config dan beri komentar pada baris berikut:
#Subsystem sftp /usr/libexec/openssh/sftp-server
Selanjutnya, tambahkan baris berikut ke file /etc/ssh/sshd_config
Subsystem sftp internal-sftp
# grep sftp /etc/ssh/sshd_config #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp
4. Tentukan Direktori Chroot untuk Grup
Anda hanya ingin menempatkan pengguna tertentu (yaitu pengguna yang termasuk dalam grup sftpusers) di lingkungan jail chroot. Tambahkan baris berikut di akhir /etc/ssh/sshd_config
# tail /etc/ssh/sshd_config Match Group sftpusers ChrootDirectory /sftp/%u ForceCommand internal-sftp
Di atas:
- Cocokkan sftpusers Grup – Ini menunjukkan bahwa baris berikut hanya akan dicocokkan untuk pengguna yang tergabung dalam sftpusers grup
- ChrootDirectory /sftp/%u – Ini adalah jalur yang akan digunakan untuk chroot setelah pengguna diautentikasi. %u menunjukkan pengguna. Jadi, untuk john, ini akan menjadi /sftp/john.
- ForceCommand internal-sftp – Ini memaksa eksekusi internal-sftp dan mengabaikan perintah apa pun yang disebutkan dalam file ~/.ssh/rc.
5. Buat Direktori Beranda sftp
Karena kami telah menetapkan /sftp sebagai ChrootDirectory di atas, buat direktori ini (yang setara dengan direktori /home Anda).
# mkdir /sftp
Sekarang, di bawah /sftp, buat direktori individual untuk pengguna yang merupakan bagian dari grup sftpusers. yaitu pengguna yang hanya akan diizinkan untuk melakukan sftp dan akan berada di lingkungan chroot.
# mkdir /sftp/guestuser
Jadi, /sftp/guestuser sama dengan / untuk guestuser. Ketika guestuser sftp ke sistem, dan menjalankan "cd /", mereka hanya akan melihat konten direktori di bawah "/sftp/guestuser" (dan bukan / sebenarnya dari sistem). Inilah kekuatan chroot.
Jadi, di bawah direktori ini /sftp/guestuser, buat subdirektori apa pun yang Anda ingin dilihat pengguna. Misalnya, buat direktori masuk tempat pengguna dapat menyimpan file mereka.
# mkdir /sftp/guestuser/incoming
6. Siapkan Izin yang Sesuai
Agar chroot berfungsi dengan baik, Anda perlu memastikan izin yang sesuai telah diatur dengan benar pada direktori yang baru saja Anda buat di atas.
Atur kepemilikan ke pengguna, dan kelompokkan ke grup sftpusers seperti yang ditunjukkan di bawah ini.
# chown guestuser:sftpusers /sftp/guestuser/incoming
Izin akan terlihat seperti berikut untuk direktori yang masuk.
# ls -ld /sftp/guestuser/incoming drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming
Izin akan terlihat seperti berikut untuk direktori /sftp/guestuser
# ls -ld /sftp/guestuser drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser # ls -ld /sftp drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp
7. Mulai ulang sshd dan Uji SFTP Chroot
Mulai ulang sshd:
# service sshd restart
Uji lingkungan sftp chroot. Seperti yang Anda lihat di bawah, ketika gusetuser melakukan sftp, dan melakukan “cd /”, mereka hanya akan melihat direktori yang masuk.
# sftp [email protected] guestuser@thegeekstuff's password: sftp> pwd Remote working directory: /incoming sftp> cd / sftp> ls incoming
Saat guestuser mentransfer file apa pun ke direktori /incoming dari sftp, mereka akan benar-benar berada di bawah /sftp/guestuser/incoming direktori pada sistem.