Jinsi ya Kufunga, Kusanidi na Kulinda Seva ya FTP katika CentOS 7 - [Mwongozo Kamili]


FTP (Itifaki ya Uhawilishaji Faili) ni zana ya kawaida na inayotumika sana ya kuhamisha faili kati ya seva na wateja kupitia mtandao, haswa ambapo hakuna uthibitishaji unaohitajika (huruhusu watumiaji wasiojulikana kuunganishwa kwenye seva). Ni lazima tuelewe kwamba FTP si salama kwa chaguomsingi, kwa sababu inasambaza kitambulisho cha mtumiaji na data bila usimbaji fiche.

Katika mwongozo huu, tutaelezea hatua za kusakinisha, kusanidi na kulinda seva ya FTP (VSFTPD inawakilisha Daemon ya FTP Salama Sana) katika CentOS/RHEL 7 na usambazaji wa Fedora.

Kumbuka kuwa maagizo yote kwenye mwongozo huu yataendeshwa kama mzizi, ikiwa hautumii seva na akaunti ya mizizi, tumia amri ya sudo kupata marupurupu ya mizizi.

Hatua ya 1: Kufunga Seva ya FTP

1. Kufunga seva ya vsftpd ni moja kwa moja mbele, endesha tu amri ifuatayo kwenye terminal.

# yum install vsftpd

2. Baada ya usakinishaji kukamilika, huduma itazimwa mara ya kwanza, kwa hivyo tunahitaji kuianzisha kwa mikono kwa wakati huu na kuiwezesha kuanza kiotomatiki kutoka kwa mfumo wa boot unaofuata pia:

# systemctl start vsftpd
# systemctl enable vsftpd

3. Kisha, ili kuruhusu ufikiaji wa huduma za FTP kutoka kwa mifumo ya nje, lazima tufungue bandari 21, ambapo daemons za FTP zinasikiza kama ifuatavyo:

# firewall-cmd --zone=public --permanent --add-port=21/tcp
# firewall-cmd --zone=public --permanent --add-service=ftp
# firewall-cmd --reload

Hatua ya 2: Kusanidi Seva ya FTP

4. Sasa tutasonga mbele ili kutekeleza usanidi machache ili kusanidi na kulinda seva yetu ya FTP, wacha tuanze kwa kufanya nakala rudufu ya faili asili ya usanidi /etc/vsftpd/vsftpd.conf:

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig

Ifuatayo, fungua faili ya usanidi hapo juu na uweke chaguzi zifuatazo na maadili haya yanayolingana:

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. Sasa sanidi FTP ili kuruhusu/kukataza ufikiaji wa FTP kwa watumiaji kulingana na faili ya orodha ya watumiaji /etc/vsftpd.userlist.

Kwa chaguo-msingi, watumiaji walioorodheshwa katika userlist_file=/etc/vsftpd.userlist wananyimwa ufikiaji wa kuingia kwa userlist_deny chaguo limewekwa YES, if userlist_enable=YES.

Hata hivyo, userlist_deny=NO hubadilisha mpangilio, kumaanisha kuwa ni watumiaji walioorodheshwa wazi katika userlist_file=/etc/vsftpd.userlist wataruhusiwa kuingia.

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

Sio tu, watumiaji wanapoingia kwenye seva ya FTP, huwekwa kwenye jela ya chroot'ed, hii ni saraka ya mizizi ya ndani ambayo itafanya kama saraka yao ya nyumbani kwa kipindi cha FTP pekee.

Ifuatayo, tutaangalia hali mbili zinazowezekana za jinsi ya kuchroot watumiaji wa FTP hadi saraka za Nyumbani (mizizi ya ndani) kwa watumiaji wa FTP, kama ilivyoelezewa hapa chini.

6. Sasa ongeza chaguo hizi mbili zifuatazo ili kuwazuia watumiaji wa FTP kwenye saraka zao za Nyumbani.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES inamaanisha watumiaji wa ndani watawekwa katika jela ya chroot, saraka yao ya nyumbani baada ya kuingia kwa mipangilio chaguo-msingi.

Na pia kwa chaguo-msingi, vsftpd hairuhusu saraka ya jela ya chroot kuandikwa kwa sababu za usalama, hata hivyo, tunaweza kutumia chaguo allow_writeable_chroot=YES kubatilisha mpangilio huu.

Hifadhi faili na uifunge.

Kulinda Seva ya FTP na SELinux

7. Sasa, hebu tuweke boolean ya SELinux hapa chini ili kuruhusu FTP kusoma faili katika saraka ya nyumbani ya mtumiaji. Kumbuka kuwa hii ilifanyika hapo awali kwa kutumia amri:

# setsebool -P ftp_home_dir on

Hata hivyo, maagizo ya ftp_home_dir yamezimwa kwa chaguomsingi kama ilivyoelezwa katika ripoti hii ya hitilafu: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Sasa tutatumia amri ya semanage kuweka sheria ya SELinux kuruhusu FTP kusoma/kuandika saraka ya nyumbani ya mtumiaji.

# semanage boolean -m ftpd_full_access --on

Kwa wakati huu, lazima tuanze tena vsftpd ili kutekeleza mabadiliko yote tuliyofanya hadi sasa hapo juu:

# systemctl restart vsftpd

Hatua ya 4: Kujaribu Seva ya FTP

8. Sasa tutajaribu seva ya FTP kwa kuunda mtumiaji wa FTP kwa amri ya useradd.

# useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
# passwd ravi

Baadaye, lazima tuongeze ravi ya mtumiaji kwenye faili /etc/vsftpd.userlist kwa kutumia amri ya mwangwi kama ifuatavyo:

# echo "ravi" | tee -a /etc/vsftpd.userlist
# cat /etc/vsftpd.userlist

9. Sasa ni wakati wa kujaribu ikiwa mipangilio yetu hapo juu inafanya kazi kwa usahihi. Hebu tuanze kwa kujaribu kuingia bila kukutambulisha, tunaweza kuona kutoka kwenye skrini iliyo hapa chini kwamba kuingia bila kukutambulisha hakuruhusiwi:

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

10. Hebu tujaribu pia ikiwa mtumiaji ambaye hajaorodheshwa kwenye faili /etc/vsftpd.userlist atapewa ruhusa ya kuingia, jambo ambalo sivyo ilivyo katika picha ya skrini iliyo hapa chini:

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

11. Sasa fanya ukaguzi wa mwisho ikiwa mtumiaji aliyeorodheshwa kwenye faili /etc/vsftpd.userlist, amewekwa kwenye saraka yake ya nyumbani baada ya kuingia:

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Washa chaguo hili tu ikiwa unajua kabisa unachofanya. Ni muhimu kutambua kwamba madhara haya ya usalama si mahususi dhidi ya vsftpd, yanatumika kwa daemoni zote za FTP ambazo hutoa kuweka watumiaji wa ndani katika jela za chroot pia.

Kwa hivyo, tutaangalia njia salama zaidi ya kuweka saraka ya mizizi ya ndani isiyoweza kuandikwa katika sehemu inayofuata.

Hatua ya 5: Sanidi Saraka Tofauti za Nyumbani za Mtumiaji wa FTP

12. Fungua faili ya usanidi ya vsftpd tena na anza kwa kutoa maoni kwa chaguo lisilo salama hapa chini:

#allow_writeable_chroot=YES

Kisha unda saraka mbadala ya mizizi ya mtumiaji (ravi, yako labda ni tofauti) na uondoe ruhusa za uandishi kwa watumiaji wote kwenye saraka hii:

# mkdir /home/ravi/ftp
# chown nobody:nobody /home/ravi/ftp
# chmod a-w /home/ravi/ftp

13. Kisha, tengeneza saraka chini ya mzizi wa ndani ambapo mtumiaji atahifadhi faili zake:

# mkdir /home/ravi/ftp/files
# chown ravi:ravi  /home/ravi/ftp/files
# chmod 0700 /home/ravi/ftp/files/

Kisha ongeza/rekebisha chaguzi zifuatazo kwenye faili ya usanidi ya vsftpd na maadili haya:

user_sub_token=$USER         # inserts the username in the local root directory 
local_root=/home/$USER/ftp   # defines any users local root directory

Hifadhi faili na uifunge. Kwa mara nyingine tena, wacha tuanze upya huduma na mipangilio mipya:

# systemctl restart vsftpd

14. Sasa fanya jaribio la mwisho tena na uone kuwa saraka ya mizizi ya watumiaji ni saraka ya FTP tuliyounda kwenye saraka yake ya nyumbani.

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Ni hayo tu! Katika makala haya, tulielezea jinsi ya kusakinisha, kusanidi na vile vile kulinda seva ya FTP katika CentOS 7, tumia sehemu ya maoni iliyo hapa chini kutuandikia kuhusu mwongozo/kushiriki taarifa yoyote muhimu kuhusu mada hii.

Katika makala inayofuata, tutakuonyesha pia jinsi ya kupata seva ya FTP kwa kutumia miunganisho ya SSL/TLS katika CentOS 7, hadi wakati huo, endelea kushikamana na TecMint.