Cerita Tentang vsftpd

TLDR;

Very Secure FTP Daemon.

Mbak Debi

Saya masih ingat ketika pertama kali saya mencoba mengkonfigurasi distro Linux saya. Mandriva adalah varian pertama yang saya coba. Saat itu saya baru saja selesai merakit komputer personal pertama saya di sebuah mes pabrik di Tangerang.

Sejak saat itu, saya sudah pernah mencoba Linux Mint, Ubuntu, CentOS, dan Debian. Yang terakhir terasa spesial karena itu merupakan server proxy yang saya gunakan di warung internet yang saya kelola bersama teman saya pada kisaran tahun 2010. Seorang teman SMP yang saat itu bekerja di Jogja sering menyebutnya mbak Debi. Mulai sekarang, sebut saja mbak Debi.

Online Video Management/Editor/Ai Tools

Tutorial ini adalah yang saya gunakan untuk mengkonfigurasi vsftpd pada sebuah proyek sampingan yang saya kerjakan. Proyek tersebut bercerita tentang sebuah aplikasi web yang saya gunakan untuk mengelola video-video saya. Idenya adalah untuk membuat sebuah proyek yang terdiri dari dua tipe: streaming dan vlog. Streaming digunakan untuk mengkonversi video dari dan ke berbagai resolusi, mulai dari standard resolution (SD) sampai ultra high definition (UHD).

Kedua tipe proyek tersebut akan menggunakan antar muka FTP untuk mekanisme pengunggahan filenya. Jadi, setiap proyek yang dibuat dalam aplikasi tersebut akan mempunyai satu atau lebih pengguna FTP. Pengguna FTP itu hanya akan mempunyai akses ke direktori yang telah ditetapkan. Dalam prakteknya, saya membuat direktori /var/ftp/ untuk semua file FTP. Lalu menggunakan pola /var/ftp/{id_pengguna}/{id_proyek}/ untuk setiap proyek yang dibuat.

Proyek ini menggunakan NextJS untuk frontend, dan Rails untuk aplikasi worker nya. Saya kesulitan menemukan background job sistem untuk proyek NextJS, jadi saya menggunakan aplikasi Rails (bersama Redis dan SideKiq) untuk sistem background jobs nya.

Cara Menginstall vsftpd

Debian mempunyai sistem pustaka yang solid dan lengkap: apt-get. Mereka mempunyai dokumentasi resmi untuk pustaka vstppd. Untuk menginstal vsftpd, gunakan perintah:

$ sudo apt-get update
$ sudo apt-get install vsftpd

Saya mempunyai firewall yang sudah terinstall sebelumnya saat saya mengkonfigurasi nginx. Jadi saya perlu mengkonfigurasikan firewall tersebut untuk menerima koneksi FTP. Saya cek terlebih dahulu status firewall tersebut:

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
Nginx Full                 ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere

Saya memperbolehkan nginx dan koneksi ssh (port 22). FTP berjalan pada port 20 dan 21. Saya juga perlu membuka port 990 untuk koneksi FTP menggunakan TLS. Saya juga membuka port 40000-50000 untuk koneksi FTP pasif.

$ sudo ufw allow 20/tcp
$ sudo ufw allow 21/tcp
$ sudo ufw allow 990/tcp
$ sudo ufw allow 40000:50000/tcp
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
Nginx Full                 ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere
20/tcp                     ALLOW       Anywhere
21/tcp                     ALLOW       Anywhere
990/tcp                    ALLOW       Anywhere
40000:50000/tcp            ALLOW       Anywhere
Nginx Full (v6)            ALLOW       Anywhere (v6)
22/tcp (v6)                ALLOW       Anywhere (v6)
20/tcp (v6)                ALLOW       Anywhere (v6)
21/tcp (v6)                ALLOW       Anywhere (v6)
990/tcp (v6)               ALLOW       Anywhere (v6)
40000:50000/tcp (v6)       ALLOW       Anywhere (v6)

Konfigurasi Direktori

Seperti sudah saya singgung sebelumnya, pengaturan direktori untuk masing-masing pengguna FTP sudah saya tetapkan. Untuk direktori FTP utama, yaitu /var/ftp, kepemilikannya saya tetapkan ke pengguna deploy. Itu adalah pengguna utama saya untuk deployment. Pengguna itu yang akan melakukan pengoperasian terhadap file-file video dari aplikasi Rails. Berikut perintah-perintah yang saya gunakan:

$ sudo useradd [name_pengguna] # Menambahkan pengguna FTP                               
$ echo '[nama_pengguna]:[password]' | sudo chpasswd # Menentukan password untuk pengguna
$ sudo mkdir /var/ftp/[id_pengguna]/[id_proyek]/                     # Direktori untuk masing-masing proyek
$ sudo usermod --home /var/ftp/[id_pengguna]/[id_proyek]/ [nama_pengguna]  # Set ftp user's home directory to the folder
$ sudo chown -R [username] /var/ftp/[user_id]/[project_id]/       # Set the ownership of the folder to the user
$ sudo service vsftpd restart                                     # Restart vsftpd

Perintah-perintah tersebut mungkin belum sempurna, akan saya perbarui lagi setelah saya menyelesaikan proses deployment proyek saya tersebut.

Konfigurasi vsftpd

File konfigurasi untuk vsftpd berada di /etc/vsftpd.conf. Berikut beberapa pengaturan yang disarankan untuk file ini:

anonymous_enable=NO

Untuk mencegah koneksi masuk anonimus.

pasv_min_port=40000

pasv_max_port=50000

Pengaturan ini untuk port pasif yang telah saya buka sebelumnya.

chroot_local_user=YES

chroot_list_enable=YES

allow_writeable_chroot=YES

Pengaturan diatas untuk membatasi akses pengguna FTP ke direktori home mereka.

chroot_local_user=YES

Pengaturan diatas untuk memperbolehkan operasi tulis menggunkan koneksi FTP.

Bahan bacaan:

https://www.digitalocean.com/community/tutorials/how-to-set-up-vsftpd-for-a-user-s-directory-on-debian-10

https://idroot.us/install-ftp-server-debian-11/


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *