FTP (File Transfer Protocol) adalah protokol jaringan client-server standar yang memungkinkan pengguna untuk mentransfer file ke dan dari jaringan jarak jauh.
Ada beberapa server FTP open-source yang tersedia untuk Linux. Yang paling populer dan banyak digunakan adalah PureFTPd, ProFTPD, dan vsftpd.
Dalam tutorial ini, kita akan menginstal vsftpd (Very Secure Ftp Daemon) di CentOS 7. Ini adalah server FTP yang stabil, aman, dan cepat. Kami juga akan menunjukkan cara mengonfigurasi vsftpd untuk membatasi pengguna ke direktori home mereka dan mengenkripsi seluruh transmisi dengan SSL/TLS.
Untuk transfer data yang lebih aman dan lebih cepat, gunakan SCPor SFTP.
Prasyarat #
Sebelum melanjutkan tutorial ini, pastikan Anda masuk sebagai pengguna dengan hak istimewa sudo.
Menginstal vsftpd di CentOS 7 #
Paket vsftpd tersedia di repositori CentOS default. Untuk menginstalnya, jalankan perintah berikut:
sudo yum install vsftpd
Setelah paket diinstal, jalankan daemon vsftpd dan aktifkan untuk memulai secara otomatis saat boot:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
Anda dapat memverifikasi bahwa layanan vsftpd berjalan dengan mencetak statusnya:
sudo systemctl status vsftpd
Outputnya akan terlihat seperti di bawah ini, menunjukkan bahwa layanan vsftpd aktif dan berjalan:
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2018-11-22 09:42:37 UTC; 6s ago
Main PID: 29612 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─29612 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Konfigurasi vsftpd #
Konfigurasi layanan vsftpd melibatkan pengeditan /etc/vsftpd/vsftpd.conf
berkas konfigurasi. Sebagian besar pengaturan didokumentasikan dengan baik di dalam file konfigurasi. Untuk semua opsi yang tersedia, kunjungi halaman vsftpd resmi.
Di bagian berikut, kita akan membahas beberapa pengaturan penting yang diperlukan untuk mengonfigurasi instalasi vsftpd yang aman.
Mulailah dengan membuka file konfigurasi vsftpd:
sudo nano /etc/vsftpd/vsftpd.conf
1. Akses FTP #
Kami akan mengizinkan akses ke server FTP hanya untuk pengguna lokal, temukan anonymous_enable
dan local_enable
arahan dan verifikasi konfigurasi Anda cocok dengan baris di bawah ini:
anonymous_enable=NO
local_enable=YES
2. Mengaktifkan unggahan #
Batalkan komentar pada write_enable
pengaturan untuk mengizinkan perubahan pada sistem file seperti mengunggah dan menghapus file.
write_enable=YES
3. Penjara Chroot #
Cegah pengguna FTP untuk mengakses file apa pun di luar direktori home mereka dengan menghapus komentar chroot
arahan.
chroot_local_user=YES
Secara default, ketika chroot diaktifkan, vsftpd akan menolak untuk mengunggah file jika direktori tempat pengguna terkunci dapat ditulis. Ini untuk mencegah kerentanan keamanan.
Gunakan salah satu metode di bawah ini untuk mengizinkan unggahan saat chroot diaktifkan.
-
Metode 1. - Metode yang disarankan untuk mengizinkan pengunggahan adalah dengan tetap mengaktifkan chroot dan mengonfigurasi direktori FTP. Dalam tutorial ini, kita akan membuat
/etc/vsftpd/vsftpd.confftp
direktori di dalam rumah pengguna yang akan berfungsi sebagai chroot danuploads
. yang dapat ditulis direktori untuk mengunggah file.user_sub_token=$USER local_root=/home/$USER/ftp
-
Metode 2. - Pilihan lain adalah menambahkan direktif berikut dalam file konfigurasi vsftpd. Gunakan opsi ini jika Anda harus memberikan akses yang dapat ditulis kepada pengguna Anda ke direktori home-nya.
/etc/vsftpd/vsftpd.confallow_writeable_chroot=YES
4. Koneksi FTP Pasif #
vsftpd dapat menggunakan port apa saja untuk koneksi FTP pasif. Kami akan menentukan kisaran minimum dan maksimum port dan kemudian membuka jangkauan di firewall kami.
Tambahkan baris berikut ke file konfigurasi:
/etc/vsftpd/vsftpd.confpasv_min_port=30000
pasv_max_port=31000
5. Membatasi Login Pengguna #
Untuk mengizinkan hanya pengguna tertentu untuk masuk ke server FTP tambahkan baris berikut setelah userlist_enable=YES
baris:
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
Ketika opsi ini diaktifkan, Anda perlu secara eksplisit menentukan pengguna mana yang dapat masuk dengan menambahkan nama pengguna ke /etc/vsftpd/user_list
file (satu pengguna per baris).
6. Mengamankan Transmisi dengan SSL/TLS #
Untuk mengenkripsi transmisi FTP dengan SSL/TLS, Anda harus memiliki sertifikat SSL dan mengonfigurasi server FTP untuk menggunakannya.
Anda dapat menggunakan sertifikat SSL yang sudah ada yang ditandatangani oleh Otoritas Sertifikat tepercaya atau membuat sertifikat yang ditandatangani sendiri.
Jika Anda memiliki domain atau subdomain yang menunjuk ke alamat IP server FTP, Anda dapat dengan mudah membuat sertifikat Let's EncryptSSL gratis.
Dalam tutorial ini, kami akan membuat sertifikat SSL yang ditandatangani sendiri menggunakan openssl
perintah.
Perintah berikut akan membuat kunci pribadi 2048-bit dan sertifikat yang ditandatangani sendiri yang berlaku selama 10 tahun. Kunci pribadi dan sertifikat akan disimpan dalam file yang sama:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
Setelah sertifikat SSL dibuat, buka file konfigurasi vsftpd:
sudo nano /etc/vsftpd/vsftpd.conf
Temukan rsa_cert_file
dan rsa_private_key_file
direktif, ubah nilainya menjadi pam
jalur file dan atur ssl_enable
arahan ke YES
:
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
Jika tidak ditentukan sebaliknya, server FTP hanya akan menggunakan TLS untuk membuat koneksi yang aman.
Mulai ulang Layanan vsftpd #
Setelah Anda selesai mengedit, file konfigurasi vsftpd (tidak termasuk komentar) akan terlihat seperti ini:
/etc/vsftpd/vsftpd.confanonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
Simpan file dan mulai ulang layanan vsftpd agar perubahan diterapkan:
sudo systemctl restart vsftpd
Membuka Firewall #
Jika Anda menjalankan firewall, Anda harus mengizinkan lalu lintas FTP.
Untuk membuka port 21
(port perintah FTP), port 20
(port data FTP) dan 30000-31000
(Rentang port pasif), jalankan perintah berikut:
sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
Muat ulang aturan firewall dengan mengetik:
firewall-cmd --reload
Membuat Pengguna FTP #
Untuk menguji server FTP kami, kami akan membuat pengguna baru.
- Jika Anda sudah memiliki pengguna yang ingin Anda beri akses FTP lewati langkah pertama.
- Jika Anda menyetel
allow_writeable_chroot=YES
di file konfigurasi Anda lewati langkah ke-3.
-
Buat pengguna baru bernama
newftpuser
:sudo adduser newftpuser
Selanjutnya, Anda harus mengatur kata sandi pengguna:
sudo passwd newftpuser
-
Tambahkan pengguna ke daftar pengguna FTP yang diizinkan:
echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list
-
Buat pohon direktori FTP dan atur izin yang benar:
sudo mkdir -p /home/newftpuser/ftp/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp
Seperti yang telah dibahas di bagian sebelumnya, pengguna akan dapat mengunggah filenya ke
ftp/upload
direktori.
Pada titik ini server FTP Anda berfungsi penuh dan Anda harus dapat terhubung ke server Anda dengan klien FTP apa pun yang dapat dikonfigurasi untuk menggunakan enkripsi TLS seperti FileZilla.
Menonaktifkan Akses Shell #
Secara default, saat membuat pengguna, jika tidak ditentukan secara eksplisit, pengguna akan memiliki akses SSH ke server.
Untuk menonaktifkan akses shell, kita akan membuat shell baru yang hanya akan mencetak pesan yang memberitahu pengguna bahwa akun mereka terbatas pada akses FTP saja.
Jalankan perintah berikut untuk membuat /bin/ftponly
shell dan membuatnya dapat dieksekusi:
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
sudo chmod a+x /bin/ftponly
Tambahkan shell baru ke daftar shell yang valid di /etc/shells
berkas:
echo "/bin/ftponly" | sudo tee -a /etc/shells
Ubah shell pengguna menjadi /bin/ftponly
:
sudo usermod newftpuser -s /bin/ftponly
Gunakan perintah yang sama untuk mengubah shell bagi pengguna lain yang hanya ingin Anda berikan akses FTP.