Artikel ini menjelaskan cara menginstal dan mengkonfigurasi server FTP di Ubuntu 20.04 yang Anda gunakan untuk berbagi file antar perangkat Anda.
FTP (File Transfer Protocol) adalah protokol jaringan standar yang digunakan untuk mentransfer file ke dan dari jaringan jarak jauh. Ada beberapa server FTP open-source yang tersedia untuk Linux. Yang paling dikenal dan banyak digunakan adalah PureFTPd, ProFTPD, dan vsftpd. Kami akan menginstal vsftpd (Very Secure Ftp Daemon), server FTP yang stabil, aman, dan cepat. Kami juga akan menunjukkan cara mengkonfigurasi server untuk membatasi pengguna ke direktori home mereka dan mengenkripsi seluruh transmisi dengan SSL/TLS.
Meskipun FTP adalah protokol yang sangat populer, untuk transfer data yang lebih aman dan lebih cepat, Anda harus menggunakan SCP atau SFTP.
Installing vsftpd on Ubuntu 20.04
Package vsftpd tersedia di repositori Ubuntu. Untuk menginstalnya, jalankan perintah berikut:
sudo apt update
sudo apt install vsftpd
Service ftp akan otomatis dimulai setelah proses instalasi selesai. Untuk memverifikasinya, cetak status layanan:
sudo systemctl status vsftpd
Outputnya akan menunjukkan bahwa layanan vsftpd aktif dan berjalan:
● vsftpd.service - vsftpd FTP server Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-03-02 15:17:22 UTC; 3s ago ...
Konfigurasi vsftpd
Konfigurasi server vsftpd disimpan di file /etc/vsftpd.conf.
Sebagian besar pengaturan server didokumentasikan dengan baik di dalam file. Untuk semua opsi yang tersedia, kunjungi halaman dokumentasi vsftpd.
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.conf
1. FTP access
Kami akan mengizinkan akses ke server FTP hanya untuk pengguna lokal. Cari arahan anonymous_enable dan local_enable dan verifikasi konfigurasi Anda cocok dengan baris di bawah ini:
/etc/vsftpd.conf
anonymous_enable=NO
local_enable=YES
2. Mengaktifkan unggahan
Temukan dan batalkan komentar pada arahan write_enable untuk mengizinkan perubahan sistem file, seperti mengunggah dan menghapus file:
/etc/vsftpd.conf
write_enable=YES
3. Chroot jail
Untuk mencegah pengguna FTP lokal mengakses file di luar direktori home mereka, batalkan komentar pada baris yang dimulai dengan chroot_local_user:
/etc/vsftpd.conf
chroot_local_user=YES
Secara default, untuk alasan keamanan, saat chroot diaktifkan, vsftpd akan menolak untuk mengunggah file jika direktori tempat pengguna terkunci dapat ditulis.
Gunakan salah satu solusi di bawah ini untuk mengizinkan unggahan saat chroot diaktifkan:
- Metode 1. – Opsi yang disarankan adalah tetap mengaktifkan fitur chroot dan mengonfigurasi direktori FTP. Dalam contoh ini, kami akan membuat direktori ftp di dalam beranda pengguna, yang akan berfungsi sebagai chroot dan direktori unggahan yang dapat ditulis untuk mengunggah file:
/etc/vsftpd.conf
user_sub_token=$USER
local_root=/home/$USER/ftp
- Metode 2. – Opsi lainnya adalah mengaktifkan arahan allow_writeable_chroot :
/etc/vsftpd.conf
allow_writeable_chroot=YES
Gunakan opsi ini hanya jika Anda harus memberikan akses yang dapat ditulis kepada pengguna Anda ke direktori home-nya.
4. Passive FTP Connections
Secara default, vsftpd menggunakan mode aktif. Untuk menggunakan mode pasif, atur rentang port minimum dan maksimum:
/etc/vsftpd.conf
pasv_min_port=30000
Anda dapat menggunakan port apa saja untuk koneksi FTP pasif. Ketika mode pasif diaktifkan, klien FTP membuka koneksi ke server pada port acak dalam rentang yang Anda pilih.
4. Limiting User Login
Anda dapat mengonfigurasi vsftpd untuk mengizinkan hanya pengguna tertentu yang masuk. Untuk melakukannya, tambahkan baris berikut di akhir file:
/etc/vsftpd.conf
userlist_enable=YES
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 file /etc/vsftpd.user_list (satu pengguna per baris).
6. Mengamankan Transmisi dengan SSL/TLS
Untuk mengenkripsi transmisi FTP dengan SSL/TLS, Anda harus memiliki sertifikat SSL dan mengkonfigurasi 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 cepat membuat sertifikat SSL Let’s Encrypt gratis.
Kami akan menghasilkan kunci pribadi 2048-bit dan sertifikat SSL yang ditandatangani sendiri yang akan berlaku selama sepuluh tahun:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Kunci pribadi dan sertifikat akan disimpan dalam file yang sama.
Setelah sertifikat SSL dibuat, buka file konfigurasi vsftpd:
sudo nano /etc/vsftpd.conf
Temukan arahan rsa_cert_file dan rsa_private_key_file, ubah nilainya ke jalur file pam dan atur arahan ssl_enable ke YA:
/etc/vsftpd.conf
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
Jika tidak ditentukan sebaliknya, server FTP hanya akan menggunakan TLS untuk membuat koneksi yang aman.
Restart the vsftpd Service
Setelah Anda selesai mengedit, file konfigurasi vsftpd (tidak termasuk komentar) akan terlihat seperti ini:
/etc/vsftpd.conf
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Simpan file dan mulai ulang layanan vsftpd agar perubahan diterapkan:
sudo systemctl restart vsftpd
Membuka Firewall
Jika Anda menjalankan firewall UFW , 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 ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
Untuk menghindari terkunci, pastikan port 22 terbuka:
sudo ufw allow OpenSSH
Muat ulang aturan UFW dengan menonaktifkan dan mengaktifkan kembali UFW:
sudo ufw disable
sudo ufw enable
Untuk memverifikasi perubahan, jalankan:
sudo ufw status
Output: Status: active To Action From -- ------ ---- 20:21/tcp ALLOW Anywhere 30000:31000/tcp ALLOW Anywhere OpenSSH ALLOW Anywhere 20:21/tcp (v6) ALLOW Anywhere (v6) 30000:31000/tcp (v6) ALLOW Anywhere (v6) OpenSSH (v6) ALLOW Anywhere (v6)
Membuat Pengguna FTP
Untuk menguji server FTP, kami akan membuat pengguna baru.
- Jika pengguna yang ingin Anda beri akses FTP sudah ada, lewati langkah pertama.
- Jika Anda mengatur allow_writeable_chroot=YES di file konfigurasi Anda, lewati langkah ke-3.
1. Buat pengguna baru bernama userftp:
sudo adduser userftp
2. Tambahkan pengguna ke daftar pengguna FTP yang diizinkan:
echo "userftp" | sudo tee -a /etc/vsftpd.user_list
3. Buat FTP directory tree dan atur izin yang benar:
sudo mkdir -p /home/userftp/ftp/upload
sudo chmod 550 /home/userftp/ftp
sudo chmod 750 /home/userftp/ftp/upload
sudo chown -R userftp: /home/userftp/ftp
Seperti yang telah dibahas di bagian sebelumnya, pengguna akan dapat mengunggah filenya ke direktori ftp/upload.
Pada titik ini, server FTP Anda berfungsi penuh. Anda harus dapat terhubung ke server menggunakan 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, buat shell baru yang akan mencetak pesan yang memberi tahu pengguna bahwa akun mereka terbatas hanya untuk akses FTP.
Jalankan perintah berikut untuk membuat file /bin/ftponly 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 file /etc/shells:
echo "/bin/ftponly" | sudo tee -a /etc/shells
Ubah shell pengguna menjadi /bin/ftponly:
sudo usermod newftpuser -s /bin/ftponly
Anda dapat menggunakan perintah yang sama untuk mengubah shell semua pengguna yang hanya ingin Anda berikan akses FTP.