Tutorial ini menjelaskan cara mengatur dan menggunakan server SFTP di CentOS. Sebelum saya mulai, izinkan saya menjelaskan apa yang sebenarnya diwakili oleh SFTP dan untuk apa SFTP digunakan. Saat ini, kebanyakan orang tahu bahwa kita dapat menggunakan FTP biasa untuk mentransfer, mendownload, atau mengupload data dari server ke klien atau klien ke server. Namun protokol ini mudah diretas (jika TLS tidak digunakan) oleh penyusup anonim karena portnya terbuka lebar untuk siapa saja. Oleh karena itu, SFTP telah diperkenalkan sebagai alternatif lain untuk memenuhi tujuan utama memperkuat tingkat keamanan.
SFTP adalah singkatan dari SSH File Transfer Protocol atau Secure File Transfer Protocol. Ini menggunakan protokol terpisah yang dikemas dengan SSH untuk menyediakan koneksi yang aman.
1. Catatan Awal
Untuk tutorial ini, saya menggunakan CentOS 7 dalam versi 64bit. Langkah yang sama akan bekerja pada CentOS 6 juga. Hasil tutorial akan menunjukkan bagaimana klien dapat diberikan akses ke server SFTP tetapi tidak dapat login ke server itu sendiri oleh SSH.
2. Pemasangan SFTP
Tidak seperti FTP biasa, tidak perlu menginstal paket tambahan untuk menggunakan SFTP. Kami hanya memerlukan paket SSHd prebuild yang sudah diinstal saat penginstalan di server. Karena itu, periksa saja untuk mengonfirmasi apakah Anda sudah memiliki paket SSH yang diperlukan. Berikut langkah-langkahnya:
Jalankan:
rpm -qa|grep ssh
Outputnya harus seperti ini:
[[email protected] ~]# rpm -qa|grep ssh
libssh2-1.4.3-10.el7_2.1.x86_64
openssh-7.4p1-13.el7_4.x86_64
openssh-server-7.4p1-13.el7_4.x86_64
openssh-clients-7.4p1-13.el7_4.x86_64
Itu saja, sekarang kita akan melanjutkan cara membuat konfigurasi SFTP.
3. Konfigurasi SFTP
Setelah semua prasyarat instalasi selesai, kita akan melangkah ke tahap konfigurasi. Untuk praktik terbaik, kami perlu membuat grup dan pengguna sehingga kami dapat mengelola semua pengguna yang akan mendapatkan akses SFTP. Tapi pertama-tama, mari kita buat folder tambahan bernama data. Berikut langkah-langkahnya:
mkdir -p /data/sftp
chmod 701 /data
Pada dasarnya apa yang saya coba lakukan dengan langkah di atas adalah mendapatkan folder terpisah sebagai direktori utama untuk akses SFTP. Semua direktori pengguna untuk pengguna SFTP akan menjadi subdirektori dari folder data ini.
Mari kita buat grup untuk pengguna SFTP, berikut langkah-langkahnya:
groupadd sftpusers
Kemudian buat pengguna 'howtoforge' dan tetapkan ke grup SFTPUSERS. Berikut langkah-langkahnya:
useradd -g sftpusers -d /upload -s /sbin/nologin mysftpuser
passwd mysftpuser
Changing password for user mysftpuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
Di bawah ini adalah penjelasan dari perintah di atas:
- Saya membuat pengguna dan memasukkan pengguna ke dalam grup sftpusers menggunakan perintah -g.
- Saya menetapkan direktori utama bagi pengguna untuk berada di direktori /upload dengan mengatur perintah -d /upload. Artinya nanti folder /upload akan berada di bawah /data/mysftpuser/upload.
- Saya membatasi akses ke shell /sbin/nologin untuk memastikan pengguna hanya dapat menggunakan protokol SFTP, bukan SSH.
- Saya beri nama pengguna "mysftpuser".
- Setel sandi untuk pengguna "mysftpuser".
Sekarang mari kita buat folder /upload di bawah /data/mysftpuser, lalu tetapkan kepemilikan yang sesuai untuk folder tersebut.
mkdir -p /data/mysftpuser/upload
chown -R root:sftpusers /data/mysftpuser
chown -R mysftpuser:sftpusers /data/mysftpuser/upload
Setelah selesai, verifikasi bahwa folder baru di bawah direktori /data ada dan konfigurasi yang kami buat sudah benar.
[[email protected] ~]# ls -ld /data/
drwx-----x. 5 root root 54 Mar 22 14:29 /data/
[[email protected] ~]# ls -ld /data/mysftpuser
drwxr-xr-x. 3 root sftpusers 20 Mar 22 14:29 /data/mysftpuser
[[email protected] ~]# ls -ld /data/mysftpuser/upload
drwxr-xr-x. 2 mysftpuser sftpusers 6 Mar 22 14:29 /data/mysftpuser/upload
[[email protected] ~]# cat /etc/passwd|grep mysftpuser
mysftpuser:x:1001:1001::/upload:/sbin/nologin
Sekarang konfigurasikan protokol SSH untuk membuat proses SFTP. Ini dapat dilakukan dengan mengedit file konfigurasi di bawah /etc/ssh/sshd_config. Berikut langkah-langkahnya:
nano /etc/ssh/sshd_config
Tambahkan baris berikut di akhir file.
Match Group sftpusers
ChrootDirectory /data/%u
ForceCommand internal-sftp
Setelah selesai restart layanan SSH, di bawah ini adalah langkah-langkahnya:
service sshd status
Redirecting to /bin/systemctl status sshd.service
? sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-03-22 14:21:38 CET; 16min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 942 (sshd)
CGroup: /system.slice/sshd.service
??942 /usr/sbin/sshd -D
Mar 22 14:21:37 localhost.localdomain systemd[1]: Starting OpenSSH server daemon...
Mar 22 14:21:38 localhost.localdomain sshd[942]: Server listening on 0.0.0.0 port 22.
Mar 22 14:21:38 localhost.localdomain sshd[942]: Server listening on :: port 22.
Mar 22 14:21:38 localhost.localdomain systemd[1]: Started OpenSSH server daemon.
Mar 22 14:21:49 localhost.localdomain sshd[1375]: Accepted password for root from 192.168.1.9 port 59465 ssh2
service sshd restart
[[email protected] ~]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
4. Menguji SFTP
Sekarang semuanya telah dikonfigurasi, jadi mari lakukan pengujian untuk memastikan penyiapan memenuhi tujuan kita.
Saya akan mengakses SFTP dengan menggunakan server lain bernama TEST01. Pertama, saya akan memverifikasi Port server SFTP. Untuk melakukan itu saya akan menggunakan fungsi nmap. Jika server klien Anda tidak memilikinya, Anda dapat mengunduh dan menginstalnya dengan yum seperti yang ditunjukkan di bawah ini:
yum list nmap
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.copahost.com
* epel: mirror.imt-systems.com
* extras: mirror.imt-systems.com
* remi-php72: remi.mirror.wearetriple.com
* remi-safe: remi.mirror.wearetriple.com
* updates: ftp.rz.uni-frankfurt.de
Available Packages
nmap.x86_64 2:6.40-7.el7
yum install nmap -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.copahost.com
* epel: mirror.imt-systems.com
* extras: mirror.imt-systems.com
* remi-php72: remi.mirror.wearetriple.com
* remi-safe: remi.mirror.wearetriple.com
* updates: ftp.rz.uni-frankfurt.de
Resolving Dependencies
--> Running transaction check
---> Package nmap.x86_64 2:6.40-7.el7 will be installed
--> Processing Dependency: nmap-ncat = 2:6.40-7.el7 for package: 2:nmap-6.40-7.el7.x86_64
--> Running transaction check
---> Package nmap-ncat.x86_64 2:6.40-7.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================================================
Installing:
nmap x86_64 2:6.40-7.el7 base 4.0 M
Installing for dependencies:
nmap-ncat x86_64 2:6.40-7.el7 base 201 k
Transaction Summary
=============================================================================================================================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 4.2 M
Installed size: 17 M
Downloading packages:
(1/2): nmap-ncat-6.40-7.el7.x86_64.rpm | 201 kB 00:00:01
(2/2): nmap-6.40-7.el7.x86_64.rpm | 4.0 MB 00:00:14
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 300 kB/s | 4.2 MB 00:00:14
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : 2:nmap-ncat-6.40-7.el7.x86_64 1/2
Installing : 2:nmap-6.40-7.el7.x86_64 2/2
Verifying : 2:nmap-ncat-6.40-7.el7.x86_64 1/2
Verifying : 2:nmap-6.40-7.el7.x86_64 2/2
Installed:
nmap.x86_64 2:6.40-7.el7
Dependency Installed:
nmap-ncat.x86_64 2:6.40-7.el7
Complete!
[[email protected] ~]# nmap -n 192.168.1.100
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-22 14:51 CET
Nmap scan report for 192.168.1.100
Host is up (0.000016s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
Anda akan melihat bahwa saat ini di server SFTP kami, satu-satunya port yang terbuka adalah SSH 22. Sekarang, mari kita coba mengakses server SFTP (IP:192.168.1.100 dalam kasus saya) dari klien TEST01. Berikut langkah-langkahnya:
[[email protected] /]# sftp [email protected]
[email protected]'s password:
Connected to 192.168.1.100.
sftp> pwd
Remote working directory: /upload
sftp>
Besar! Sekarang server SFTP kami dapat diakses dari luar. Perhatikan bahwa direktori default adalah /upload . Artinya SFTP hanya akan menampilkan path default sebagai /upload meskipun konfigurasi sebelumnya yang kita buat di direktori server SFTP adalah /data/mysftpuser/upload.
Sekarang mari kita coba memasukkan file dari direktori server SFTP ke klien pengujian. Pertama, mari buat file uji di bawah /data/mysftpuser/upload. Berikut langkah-langkahnya:
cd /data/mysftpuser/upload
touch testing_file.txt
Kemudian kembali ke situs pengujian kami TEST01 dan lihat apakah kami bisa mendapatkan dan mengunduh file yang dibuat.
[[email protected] /]# sftp [email protected]
[email protected]'s password:
Connected to 192.168.1.100.
sftp> pwd
Remote working directory: /upload
sftp> ls
testing_file.txt
sftp> get testing_file.txt
Fetching /upload/testing_file.txt to testing_file.txt
sftp> quit
Bagus sekali! Test SFTP kita sudah berhasil, mari kita coba akses SSH menggunakan user mysftpuser. Seperti sebelumnya, kami telah menetapkan konfigurasi sebagai /sbin/nologin, sehingga pengguna tidak akan dapat menggunakan layanan SSH:
[[email protected] ~]# ssh [email protected]
[email protected]'s password:
This service allows sftp connections only.
Connection to 192.168.1.100 closed.
Bagus! Sekarang kami memiliki dan menjalankan server SFTP aman.