Setup File Transfer Protocol (FTP) bagian I

Di era Internet, orang yang akan mengambil file atau memindahkan file dari komputer server ke komputernya sendiri memakai program aplikasi FTP client. Program FTP server hanya dijalankan di dalam komputer server saja untuk menjawab request pemindahan file yang dikirim oleh komputer user dan akan mendownload file dari server ke komputer tersebut. Direktori FTP di dalam server merupakan sebuah slice tersendiri, dan dikendalikan oleh daemon tp.Bila hendak membuat file database dari user ftp, pergunakanlah gid dan uid dari system yang ada dan pilihlah gid serta uid yang tidak tidak terpakai.

1. Pendahuluan

File Transfer Protocol atau protocol kirim file (biasa disingkat FTP) Internet adalah nenek moyang dari protokol pembagian file (atau sharing file) yang terdapat di dalam server unix. Pada jaman dulu, ketika komputer desktop belum dilengkapi interface user grafis (GUI), orang memakai FTP di dalam server unix dengan cara remote login dan melakukan perintah perintah unix untuk memindahkan file dari server unix ke dalam komputer dekstopnya.

Walau pada awalnya berbentuk tidak menarik dan berbeda dari bentuk yang ada sekarang, fasilitas server ini terus berkembang, terutama program FTP client untuk computer desktop telah dilengkapi dengan interface fungsi fungsi yang menarik dan dilengkapi dengan GUI (atau graphical user interface). Akhirnya pengguna computer desktop yang memindahkan file dari server ke dalam komputernya, merasa seperti memindahkan file dari folder ke folder.

Dalam artikel ini diulas tentang bagaimana setup FTP server dalam salah satu server unix yaitu server FreeBSD. Karena FTP server dibuat standard (dengan penggunaan SUIDDIR) sehingga banyak orang yang mengetahui FTP server dan dapat melakukan serangan atas server ini, maka disarankan sebaiknya selalu memperhatikan sisi keamanan server ketika melakukan konfigurasinya. Ketidak hati hatian disini bisa menimbulkan persoalan keamanan server. Penulis percaya bahwa langkah langkah setup berikut ini tidak akan menimbulkan masalah keamanan server. Tetapi berhati hati dan teliti dalam mengerjakan tiap proses adalah baik. Gunakanlah password yang sulit ditebak orang dan kalau harus diberitahukan kepada orang lain, beritahukanlah kepada sedikit orang saja.

2. Setup FTP Server

Membuat servis ftp server untuk siapa saja atau user anonymous amatlah sederhana. Meskipun mungkin saja ketika mensetup ftp server pada syste, akan dihadapi masalah yang kompleks. Berikut ini adalah inti langkah langkah yang dilakukan ketika setup ftp server .

Langkah 1: Set up direktori baru untuk ftp.

Bahaya pertama ketika membuat fasilitas upload anonymous FTP adalah kemungkinan adanya orang orang memasukan file file mereka ke dalam hardisk server kita sampai penuh. CERT menyarankan agar direktori upload dibuat pada sebuah dedicated drive (atau drive khusus); drive demikian bisa dibuat dengan cara membuat partisi khusus untuk upload FTP..

Pembuatan ruang baru di dalam hardisk server amat tergantung pada kondisi server. Bila server masih dalam proses awal instalasi sistem operasi, maka kita bisa melakukan penambahan partisi atau slice untuk ftp server (lihat Instalasi FreeBSd). Lain halnya kalau server yang akan dilengkapi fasilitas ftp itu, sudah berupa server jadi maka disarankan mengikuti langkah nomor 2.

Buatlah ruang untuk ftp didalam hardisk server dengan ukuran yang kita pikir cukup untuk upload file oleh anonymous user. Saran dari Scarbourough, 2001, bisa diikuti yaitu partisi untuk anonymous FTP user kira kira sebesar 750MB. Ruang ini merupakan ruang yang cocok bagi siapapun yang akan menaruh file ISO mereka. Jangan hawatir soal proses mounting, karena proses mounting masih bisa berjalan dengan cepat. Dalam tulisan ini tidak dibahas pembuatan partisi dengan lengkap. Bacalah Bab 12 buku FreeBSD Handbook. Pengaturan quota untuk membatasi ruang yang digunakan oleh daemon ftp dapat juga dilakukan.

Langkah 2 : Membuat user FTP

Sistem operasi server unix seperti FreeBSD mungkin sudah berisi sebuah entry data berikut ini di dalam file password untuk daemon ftp . Versi FreeBSD yang terakhir biasanya sudah ada entry berikut ini didalamnya.

ftp:*:14:14:ftp:0:0:Mr. Anonymous FTP:/home/ftp:/nonexistent

Jika sudah ada entry seperti itu, kita bisa mengabaikan langkah ini. Kita perlu membuat sebuah user upload dan download FTP anonymous. Bila kita mengijinkan user anonymous FTP pada saat instalasi FreeBSD, maka server sudah pasti sudah memiliki user anonymous FTP. Bila tidak, kita harus membuatnya. Setelah itu coba jalankan perintah vipw dan pastikan apakah entry tadi sudah ada ?

Berikut adalah perintah untuk membuat direktori ftp di dalam server unix.

# mkdir /usr/ftp

Ini adalah direktori fisik ftp sebenarnya dimana nantinya orang dapat menaruh file yang akan diberikan kepada orang lain. Tapi untuk keamanan servernya, biasanya direktori ini tidak terbaca oleh user Internet. User Internet hanya membaca direktori dan file ftp anda yang ada pada direktori simbolik. man hier mengindikasikan bahwa direktori home ftp ada di /var/spool/ftp. Lokasi ini bisa dilihat melalui link simbolik yang memungkinkan direktori fisik ada disana. Contoh, jika kita mensetup direktori home memakai vipw untuk membuat /var/spool/ftp, kita bisa meletakan file sebenarnya di dalam direktori/ftp/home (atau lokasi apa saja yang diinginkan). Kemudian buatlah sebuah link simbolik dengan baris perintah berikut ini:

# cd /var/spool

# ln -s /path/to/real/files ftp

Mari kita lihat entry data yang dilihat oleh program vipw (ada baiknya andapun membaca tentang passwd(5) pada manual FreeBSD). Pertama adalah nama user atau user name. Untuk mengijinkan user anonymous maka harus dibuat nama user atau user name ftp. Pastikan pengaturan password nya diisi dengan kode “*“, yang artinya tanpa password akan dijalankan. Pengisian tanda “*” sebagai password nya adalah ide yang baik untuk semua user yang tidak memerlukan password. Kitapun bisa membuat group baru yang disebut ftp dan pilihlah sebuah UID dan GID yang unik. Direktori home bisa dibuat sesuai kebutuhan atau mengikuti hirarki yang biasa dibuat oleh FreeBSD secara otomatis yaitu di /home/ftp. Akhirnya kita harus mengetahui apakah shell nya diisi dengan /nonexistent. Janganlah memberikan account shell ini kepada siapapun kecuali amat perlu sekali.

Langkah 3 : Membuat struktur direktori.

Sekarang kita melakukan setup direktori yang akan dilihat oleh orang orang yang memakai sarana FTP server anda. Buatlah direktori yang diatur sebagai direktori home ftp, disini dipakai /home/ftp. Didalam direktori ini, buatlah direktori direktori berikut :

  • etc
  • pub
  • incoming

Berikut ini adalah perintah yang digunakan untuk membuat direktori di atas.

# cd ~ftp

# mkdir pub

# mkdir incoming

# mkdir etc

Perijinan atau permission untuk tiap direktori akan dibahas di langkah nomor 5.

Langkah 4: Buatlah direktori /etc/fstab dan kernel server unix anda di rekompilasi (recompile).

Untuk mencegah orang menghapus file orang lain yang disimpan didirektori ftp ini, kita perlu SUIDDIR . Kita harus mengerjakan dua hal agar dapat melakukan mounting system file SUIDDIR.

Pertama, editlah /etc/fstab. Letakan di baris ini :

/dev/ad2s2f /home/ftp/incoming ufs rw,SUIDDIR 2 2

Gantilah device diatas dengan partisi yang dibuat tadi di langkah nomor 1. Opsi pada SUIDDIR harus dispesifikasi dengan waktu operasinya. Bacalah manual fstab(5) dan mount(8) untuk informasi selanjutnyan.

Kemudian, kita harus membuat SUIDDIR enable di dalam kernel. Tambahkan opsi berikut ke dalam file konfigurasi kernel anda.

options SUIDDIR

Kemudian configure, compile, install, dan reboot server ke kernel baru.

Langkah 5: Membuat pengaturan perijinan (atau setting permissions)

Ketika kursor sudah tampak kembali, lakukan ini :

chown -R root:wheel /home/ftp

cd /home/ftp

chmod 755 etc pub

chown nobody incoming

chmod 5777 incoming

Direktori sekarang terlihat seperti ini :

drwxr-xr-x 4 root wheel 512 Nov 10 00:42 .

drwxr-xr-x 14 root wheel 512 Oct 20 14:58 ..

drwxr-xr-x 2 root wheel 512 Nov 10 00:44 etc

drwsrwxrwt 2 nobody wheel 512 Nov 10 00:45 incoming

drwxr-xr-x 2 root wheel 512 Nov 25 00:44 pub

Pada jenis FreeBSD lebih rendah dari versi 4, biasanya memerlukan /bin/ls pada anonymous chroot untuk melihat daftar direktori. Sekarang sudah tidak diperlukan lagi.

Alasanya adalah :

Pertama, ide yang tidak baik membuat sesuatu direktori atau file dalam status ftp. Karena semua user yang tidak dikenal akan memiliki file file anda dan direktorinya dan mungkin saja mengubah seluruh isinya. Silahkan membaca manual ftpd(8) FreeBSD yang menyebutkan bahwa /pub bisa ditempatkan pada direktori ftp, tapi penulis tidak setuju (CERT juga tidak setuju).

/etc dan /pub harus mudah terbaca oleh tiap orang dan hanya bias ditulisi oleh user root. Hal yang menarik adalah direktori /incoming. Kita ingin tiap orang dapat menulis ke dalam direktori ini, dan kitapun ingin mereka dapat melihat daftar isi direktori ini (sehingga mereka dapat memastikan file mereka sudah tersimpan di dalam direktori ini). Kita tak mau mereka dapat menghapus file-file orang lain disini. Untuk mencegahnya kita dapat melakukan dua hal yaitu:

  1. Kita telah membuat direktori SUIDDIR dan dimiliki oleh nobody. Secara normal, file file akan di upload ke direktori incoming yang dimiliki oleh user ftp. Ini berarti tiap orang yang datang kemudian dapat menghapus file file yang ada disini, karena mereka juga user ftp. Dengan membuat dirktori SUIDDIR akan menjadikan file file yang tersimpan di direktori incoming menjadi milik pemilik nobody, sehingga orang orang yang datang kemudian tidak dapat menghapus file file yang disimpan di direktori incoming.
  2. Kita cara kedua yang unik, yang mencegah orang lain menghapus file file orang lain di direktori incoming, bahkwa jika tiap orang telah memiliki ijin menulis di direktori ini. Dalam hal ini cara kedua yang unik akan mencegah user ftp untuk tidak menghapus file file yang dimiliki user nobody. Lihat perintah sticky(8).

Kita melakukan seting diatas dengan perintah chmod. Kemudian kita tentukan mode nya. Berikut adalah beberapa penentuan nilai chmod untuk mendapatkan fungsi yang diinginkan :

  • 4000 untuk SUIDDIR
  • 1000 untuk sticky bit
  • 777 untuk mengeset direktori menjadi +rwx untuk tiap orang

Penambahan nilai ini dapat lebih besar lagi dan dapat mencapai 5777. Bacalah manual chmod(1).

Catatan : Direktori /incoming tidak dimiliki oleh root. Kita tidak ingin pernah membuat sebuah SUIDDIR yang dimiliki oleh root karena setiap orang nantinya dapat membuat file file rootnya sendiri, dan ini tidak baik untuk FreeBSD. Bila itu dilakukan maka server kita akan mudah dimasuki oleh orang lain dan mengubah isi file file root server kita dengan akibat seperti informasi dalam didalam file server berubah. Bila file itu adalah file konfigurasi, maka server dapat berfungsi sebagai host lain yang tidak sesuai dengan keinginan kita atau rencana jaringan computer kita. Atau dalam hal kerusakan parah, server tidak bekerja sama sekali.

Opsi tambahan

Kita mungkin ingin menaruh file di dalam direktori /etc. Ini bukan mandatory; di dalam kenyataannya direktori /etc tidaklah diperlukan. Tapi adanya direktori ini menambah kebaikan server.

Perintah ftpmotd adalah perintah untuk menampilkan banner setelah login.

Mungkin kita perlu juga menghasilkan suatu file database password pwd.db dari file password. Tujuan langkah ini adalah untuk membuat direktori agar dapat menampilkan daftar nama user saja, bukan daftar UID. Dengan cara yang sama kita dapat membuat file group sebagai subtitusi dari nama grup untuk GID. Pergunakanlah gid dan uid dari system anda yaitu gid dan uid yang tidak terpakai saja.

Janganlah memakai /etc/passwd system atau /etc/group.

Berikut contoh fle password yang dibuat:

default:*:0:0::::::

ftp:*:65534:0::::::

Disini terlihat, nama user di dalam file password kecil ini tidak harus memiliki sebuah perintah yang terkait dengan nama user yang berkoresponden dengan UID nya. Dalam hal ini, dibuat seting sehingg file file yang dimiliki root akan tampak sebagai default dan file file yang dimiliki user nobody, akan diperlihatkan sebagai file file yang dimiliki oleh ftp. Untuk mengubah input file ini ke sebuah file pwd.db, lakukan perintah ini :

pwd_mkdb -d /home/ftp/etc passwd

Perintah itu akan menghapus passwd dan membuat master.passwd, pwd.db, dan spwd.db di dalam direktori /home/ftp/etc. Kita bias menghapus segalanya kecuali pwd.db. Sekarang buatlah file group :

default:*:0:

Sekali lagi, berilah nama grup sesuka anda.

Langkah 6: Edit file /etc/login.conf

Satu hal yang belum disampaikan dalam uraian ini adalah tentang anonymous FTP upload. Kita sudah kenal kalau user anonymous tidak diijinkan mengcopy atau download file dari direktori /incoming. Tapi di sisi lain, tempat kita akan digunakan sebagai tempat penyimpanan (atau warez drop) data oleh script program warrez kiidies. Warez kiddies memiliki script scanner ribuan IP untuk mencari situs situs ftp, dan lalu mengecek apakah mereka dapat mengupload atau download anonymous ketika mereka menemukan situs ftp. Jika situs ftp kita mengijinkan orang siapa saja mendownload atau upload file, maka situs ftp kita akan dipublikasikan di IRC sehingga bandwith ke situs kita akan terus melejit pemakaiannya. Akhirnya kita akan bertanya tanya kenapa ini terjadi ? kecuali kita berhasil memperbaiki kesalahan seting di dalam server itu.

Pengaturan ijin untuk file file yang baru dibuat diatur oleh user umask. Nilai default umask untuk user FreeBSD adalah 022, yang berarti file file akan dibuat 644 dan direktori 755. Kita ingin file file yang dibuat oleh user anonymous FTP menjadi 640, maka sekali orang melakukan upload file ke direktori ftp, mereka tidak akan dapat mendownload file-nya (karena SUIDDIR mengubah pemilikan). Maka agar maksud ini bias berjalan baik, nilai umask untuk ftp harus dibuat menjadi 027.

Sekarang kita dapat mengubah umask hanya untuk user itu saja. Tambahkan baris ini ke file konfigurasi /etc/login.conf:

ftp::umask=027:

Jalankan perintah:

cap_mkdb /etc/login.conf

untuk membangun ulang itu dan kita mengesetnya. Sekarang file yang sudah diupload akan memiliki mode 640 (artinya direktori akan dibuat dengan mode 750, yang membuatnya kurang berguna, tapi itu memiliki sisi download yang kecil). Karena mereka tidak ingin memiliki ftp, atau mereka tidak dapat dibaca, tapi mereka akan diperlihatkan di dalam daftar direktori. Langkah ini akan menghentikan operasi warez kiddies yang suka memakai situs ftp anda sebagai kotak persinggahan. Karena sekarang server ftp tidak memiliki titik upload yang besar untuk meletakan file file besar. Namun kita masih akan melihat bahwa warrez kiddies masih akan mengirimkan script untuk testing, namun kita tak perlu hawatir karena tidak akan dilanjutkan ke proses penyimpanan data sembarangan ke situs ftp anda.

Langkah 7: Restart ftpd

Langkah terakhir dari setup ftp adalah melakukan proses ftpd dengan seting logging enabled. Baris di dalam file konfigurasi /etc/inetd.conf akan terlihat seperti ini:

ftp stream tcp nowait root /usr/libexec/ftpd ftpd -lS

Peringatan: Jika ftpd kita memiliki opsi -o , sebaiknya kita menambahkan opsi -o diatas.

Itu tampak seperti default FreeBSD, kecuali adanya tanda “S” pada bagian akhirnya, yang akan memberikan peluang log anonymous mengirimkan data ke /var/log/ftpd. Kita mungkin juga ingin menyertakan opsi A untuk membatasi FTP menjadi hanya untuk user anonymous jika kita tak ingin ada user regular masuk ke situs ftp kita.

Sekarang kirimkan sebuah sinyal HUP tunggal ke (inetd dengan menjalankan perintah (killall -HUP inetd).

Langkah 8: Ujilah seting kita tadi untuk memastikan tindakan kita sudah benar!

Untuk menguji baik tidak nya langkah langkah yang sudah dilakukan, dapat dilakukan dari computer yang berjauhan (atau remote site); kirimkanlah file (atau upload a file) ke situs ftp kita dan pastikan kita tidak dapat download file itu ataupun tak dapat menghapusnya. Jika kita tidak melakukan pengecekan tiap langkah kita tadi dengan baik, server kita hanya akan menjadi target warez kiddies dari Internet.

(Bandung, 3 Maret 2007)

Pustaka :

www.FreeBSD.org

www.cert.org

www.ai3.itb.ac.id

www.freebsddiary.org

Share

Notice: ob_end_flush(): failed to send buffer of zlib output compression (1) in /home/enamyid/public_html/hendra-k.net/wp-includes/functions.php on line 5427

Notice: ob_end_flush(): failed to send buffer of zlib output compression (1) in /home/enamyid/public_html/hendra-k.net/wp-includes/functions.php on line 5427