Vsftpd服務

Vsftpd服務linux

 

 

1.匿名開放模式:算法

是一種最不安全的認證模式,任何人均可以無需密碼驗證而直接登陸到FTP服務器。數據庫

搭建過程:vim

yum install vsftpd* ftp  -y安全

iptables -F服務器

service iptables saveapp

 

mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bakssh

grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conftcp

 

cat /etc/vsftpd/vsftpd.conf測試

默認配置:

anonymous_enable=YES

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

 

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

 

1步:修改主配置文件:vim /etc/vsftpd/vsftpd.conf

添加下5注意空格,刪除譯文

anonymous_enable=YES(默認開啓)#是否容許匿名用戶訪問

anon_umask=022     #匿名用戶上傳文件的umask

anon_upload_enable=YES #是否容許匿名用戶上傳文件

anon_mkdir_write_enable=YES #是否容許匿名用戶建立目錄

anon_other_write_enable=YES #是否容許匿名用戶修改、刪除 建立目錄

 

#2行,默認不添加

anon_max_rate=0 #匿名用戶的最大傳輸速率(字節/秒),0爲不限制

anon_root=/var/ftp/pub #指定匿名用戶的FTP根目錄

 

 

2步:重啓服務,並設置開機啓動

systemctl restart vsftpd

systemctl enable vsftpd

 

 

3步:測試

報錯1

[root@gyt~]# ftp 192.168.1.109

Connected to 192.168.1.109 (192.168.1.109).

220 (vsFTPd 3.0.2)

Name (192.168.1.109:root): ftp

331 Please specify the password.

Password:此處敲擊回車便可

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> cd pub  #切換匿名用戶根目錄/var/ftp/pub

250 Directory successfully changed.

ftp> mkdir files    #建立目錄文件

550 Permission denied.  #系統提示「權限拒絕」(Permission denied

vsftpd服務程序的匿名開放認證模式下,默認訪問的是/var/ftp目錄。查看該目錄的權限得知,只有root管理員纔有寫入權限。下面將目錄的全部者身份改爲系統帳戶ftp便可(該帳戶在系統中已經存在),這樣應該能夠了吧:

 

解決報錯1

 

1)查看目錄權限:

[root@gyt ~]# ls -ld /var/ftp/pub

drwxr-xr-x. 3 root root 16 Jul 13 14:38 /var/ftp/pub

(2)修改屬主

[root@gyt ~]# chown -Rf ftp /var/ftp/pub

[root@gyt ~]# ls -ld /var/ftp/pub

drwxr-xr-x. 3 ftp root 16 Jul 13 14:38 /var/ftp/pub

 

 

報錯2

[root@linuxprobe ~]# ftp 192.168.1.109

Connected to 192.168.1.109 (192.168.1.109).

220 (vsFTPd 3.0.2)

Name (192.168.1.109:root): ftp

331 Please specify the password.

Password:此處敲擊回車便可

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> cd pub

250 Directory successfully changed.

ftp> mkdir files

550 Create directory operation failed.   

#系統提示「建立目錄的操做失敗」(Create directory operation failed

 

想必各位讀者也應該意識到是SELinux服務在「搗亂」

下面使用getsebool命令查看與FTP相關的SELinux域策略都有哪些:

 

[root@gyt ~]# getsebool -a | grep ftp

ftp_home_dir --> off

ftpd_anon_write --> off

ftpd_connect_all_unreserved --> off

ftpd_connect_db --> off

ftpd_full_access --> off

ftpd_use_cifs --> off

ftpd_use_fusefs --> off

ftpd_use_nfs --> off

ftpd_use_passive_mode --> off

httpd_can_connect_ftp --> off

httpd_enable_ftp_server --> off

sftpd_anon_write --> off

sftpd_enable_homedirs --> off

sftpd_full_access --> off

sftpd_write_ssh_home --> off

tftp_anon_write --> off

tftp_home_dir --> off

 

解決報錯2

根據經驗(須要長期培養,別無它法)和策略的名稱判斷出ftpd_full_access--> off策略規則致使了操做失敗。接下來修改該策略規則,而且在設置時使用-P參數讓修改過的策略永久生效,確保在服務器重啓後依然可以順利寫入文件。

 

[root@gyt ~]# setsebool -P ftpd_full_access=on

 

再次測試:

[root@gyt ~]# ftp 192.168.1.109

Connected to 192.168.1.109 (192.168.1.109).

220 (vsFTPd 3.0.2)

Name (192.168.1.109:root): ftp

331 Please specify the password.

Password:此處敲擊回車便可

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> cd pub

250 Directory successfully changed.

ftp> mkdir files

257 "/pub/files" created

ftp> rename files database

350 Ready for RNTO.

250 Rename successful.

ftp> rmdir database

250 Remove directory operation successful.

ftp> exit

221 Goodbye.

 

 

 

 

 

2.本地用戶模式:

是經過Linux系統本地的帳戶密碼信息進行認證的模式,相較於匿名開放模式更安全,並且配置起來也很簡單。可是若是被黑客破解了帳戶的信息,就能夠暢通無阻地登陸FTP服務器,從而徹底控制整臺服務器。

 

搭建過程:

yum install vsftpd* ftp  -y

iptables -F

service iptables save

 

mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak

grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

 

cat /etc/vsftpd/vsftpd.conf

默認配置:

anonymous_enable=YES

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

 

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

 

1步:修改配置文件:

[root@gyt ~]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO #禁止匿名訪問模式

local_enable=YES #容許本地用戶模式

write_enable=YES #設置可寫權限

local_umask=022 #本地用戶模式建立文件的umask

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

 

pam_service_name=vsftpd

userlist_enable=YES #開啓用戶做用名單文件功能

tcp_wrappers=YES

 

 

默認不配置下行:

userlist_deny=YES #啓用「禁止用戶名單」,名單文件爲ftpusersuser_list

 

2步:重啓服務

[root@gyt ~]# systemctl restart vsftpd

[root@gyt ~]# systemctl enable vsftpd

 

3步:測試

#按理來說,如今已經徹底能夠本地用戶的身份登陸FTP服務器了。可是在使用root管理員登陸後,系統提示以下的錯誤信息:

報錯1

[root@gyt ~]# ftp 192.168.1.109

Connected to 192.168.1.109 (192.168.1.109).

220 (vsFTPd 3.0.2)

Name (192.168.1.109:root): root

530 Permission denied.

Login failed.    #登陸失敗

ftp>

#緣由:ftpusersuser_list這兩個文件裏的系統用戶禁止登陸。

解決方法1:刪除這2個文件裏的系統用戶以下:

解決辦法2:從新建立新系統用戶,保證這2個文件裏沒有用戶名。

[root@gyt ~]# cat /etc/vsftpd/user_list

1 # vsftpd userlist

2 # If userlist_deny=NO, only allow users in this file

3 # If userlist_deny=YES (default), never allow users in this file, and

4 # do not even prompt for a password.

5 # Note that the default vsftpd pam config also check/etc/vsftpd/ftpusers

6 # for users that are denied.

7 root #刪除root

8 bin

9 daemon

.....

[root@gyt ~]# cat /etc/vsftpd/ftpusers 

# Users that are not allowed to login via ftp

1 root    #刪除root

2 bin

3 daemon

.....

果真如此!vsftpd服務程序爲了保證服務器的安全性而默認禁止了root管理員和大多數系統用戶的登陸行爲,這樣能夠有效地避免黑客經過FTP服務對root管理員密碼進行暴力破解。若是您確認在生產環境中使用root管理員不會對系統安全產生影響,只需按照上面的提示刪除掉root用戶名便可。咱們也能夠選擇ftpusersuser_list文件中沒有的一個普通用戶嘗試登陸FTP服務器:

 

#在採用本地用戶模式登陸FTP服務器後,默認訪問的是該用戶的家目錄,也就是說,訪問的是/home/gyt目錄。並且該目錄的默認全部者、所屬組都是該用戶本身,所以不存在寫入權限不足的狀況。可是當前的操做仍然被拒絕,是由於咱們剛纔將虛擬機系統還原到最初的狀態了。爲此,須要再次開啓SELinux域中對FTP服務的容許策略:

 

設置SELinux域容許策略,而後使用本地用戶模式登陸FTP服務器。

[root@gyt ~]# getsebool -a | grep ftp

[root@gyt ~]# setsebool -P ftpd_full_access=on

#在實驗課程和生產環境中設置SELinux域策略時,必定記得添加-P參數,不然服務器在重啓後就會按照原有的策略進行控制,從而致使配置過的服務沒法使用。

 

 

[root@gyt ~]# ftp 192.168.1.109

Connected to 192.168.1.109 (192.168.1.109).

220 (vsFTPd 3.0.2)

Name (192.168.1.109:root): root

331 Please specify the password.

Password:此處輸入該用戶的密碼

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> mkdir files

257 "/home/gyt/files" created

ftp> rename files database

350 Ready for RNTO.

250 Rename successful.

ftp> rmdir database

250 Remove directory operation successful.

ftp> exit

221 Goodbye.

 

 

 

 

3.虛擬用戶模式:

虛擬用戶模式是這三種模式中最安全的一種認證模式,固然,由於安全性較之於前面兩種模式有了提高,因此配置流程也會稍微複雜一些。

 

搭建過程

yum -y install lrzsz*  (遠程鏈接rz上傳 sz 文件名 下載軟件)

yum install vsftpd* ftp  -y

iptables -F

service iptables save

 

mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak

 

grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

cat /etc/vsftpd/vsftpd.conf

#默認配置:

anonymous_enable=YES

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

 

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

 

1步:建立用於進行FTP認證的用戶數據庫文件,其中奇數行爲帳戶名,偶數行爲密碼。例如,咱們分別建立出gyt和pemglang兩個用戶。

[root@gyt ~]# cd /etc/vsftpd/

[root@gyt vsftpd]# vim vuser.list

gyt

123.com

penglang

123456

xiaowang

123456

 

#可是,明文信息既不安全,也不符合讓vsftpd服務程序直接加載的格式,所以須要使用db_load命令用哈希(hash)算法將原始的明文信息文件轉換成數據庫文件,而且下降數據庫文件的權限(避免其餘人看到數據庫文件的內容),而後再把原始的明文信息文件刪除。

 

[root@gyt vsftpd]# db_load -T -t hash -f vuser.list vuser.db #轉換成數據庫文件

[root@gyt vsftpd]# file vuser.db  

vuser.db: Berkeley DB (Hash, version 9, native byte-order)

[root@gyt vsftpd]# chmod 600 vuser.db

[root@gyt vsftpd]# rm -f vuser.list

 

2步:建立vsftpd服務程序用於存儲文件的根目錄以及虛擬用戶映射的系統本地用戶FTP服務用於存儲文件的根目錄指的是,當虛擬用戶登陸後所訪問的默認位置。

#爲了方便管理FTP服務器上的數據,能夠把這個系統本地用戶的家目錄設置爲/var目錄(該目錄用來存放常常發生改變的數據)。而且爲了安全起見,咱們將這個系統本地用戶設置爲不容許登陸FTP服務器,這不會影響虛擬用戶登陸,並且還能夠避免黑客經過這個系統本地用戶進行登陸

[root@gyt ~]# useradd -d /var/ftproot -s /sbin/nologin virtual

[root@gyt ~]# ls -ld /var/ftproot/

drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/

[root@gyt ~]# chmod -Rf 755 /var/ftproot/

 

3步:創建用於支持虛擬用戶的PAM文件vsftpd.vu

#PAM(可插拔認證模塊)是一種認證機制,經過一些動態連接庫和統一的API把系統提供的服務與認證方式分開,使得系統管理員能夠根據需求靈活調整服務程序的不一樣認證方式。要想把PAM功能和做用徹底講透,至少要一個章節的篇幅才能夠(對該主題感興趣的讀者敬請關注本書的進階篇,裏面會詳細講解PAM)。

#通俗來說,PAM是一組安全機制的模塊,系統管理員能夠用來輕易地調整服務程序的認證方式,而沒必要對應用程序進行任何修改。PAM採起了分層設計(應用程序層、應用接口層、鑑別模塊層)的思想

#新建一個用於虛擬用戶認證的PAM文件vsftpd.vu,其中PAM文件內的「db=」參數爲使用db_load命令生成的帳戶密碼數據庫文件的路徑,但不用寫數據庫文件的後綴:

 

[root@gyt ~]# vim /etc/pam.d/vsftpd.vu

auth       required     pam_userdb.so db=/etc/vsftpd/vuser

account    required     pam_userdb.so db=/etc/vsftpd/vuser

 

4步:vsftpd主配置文件中經過pam_service_name參數將PAM認證文件的名稱修改成vsftpd.vuPAM做爲應用程序層與鑑別模塊層的鏈接紐帶,可讓應用程序根據需求靈活地在自身插入所需的鑑別功能模塊。當應用程序須要PAM認證時,則須要在應用程序中定義負責認證的PAM配置文件,實現所需的認證功能。

 

[root@gyt ~]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO   #禁止匿名開放模式

local_enable=YES #容許本地用戶模式

guest_enable=YES #開啓虛擬用戶模式

guest_username=virtual #指定虛擬用戶帳戶

allow_writeable_chroot=YES #容許對禁錮的FTP根目錄執行寫入操做

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

pam_service_name=vsftpd.vu#指定PAM文件

userlist_enable=YES

tcp_wrappers=YES

 

5步:爲虛擬用戶設置不一樣的權限。雖然帳戶gytpenglang都是用於vsftpd服務程序認證的虛擬帳戶,可是咱們依然想對這兩人進行區別對待。好比,容許gyt上傳、建立、修改、查看、刪除文件,只容許penglang查看文件。這能夠經過vsftpd服務程序來實現。只需新建一個目錄,在裏面分別建立兩個以gyt和pemglang命名的文件,其中在名爲gyt的文件中寫入容許的相關權限(使用匿名用戶的參數):

 

[root@gyt ~]# mkdir /etc/vsftpd/vusers_dir/

[root@gyt ~]# cd /etc/vsftpd/vusers_dir/

建立3個用戶文件寫入權限:

[root@gyt vusers_dir]# vim gyt 

複製時請注意刪除譯文;

anon_upload_enable=YES #是否容許匿名用戶下載文件

anon_mkdir_write_enable=YES #是否容許匿名用戶建立目錄

anon_other_write_enable=YES #是否容許匿名用戶修改、刪除 建立目錄

 

其餘用戶配置以下:

[root@gyt vusers_dir]# vim penglang    #查看、下載 建立目錄(不能刪除)

anon_upload_enable=YES

anon_mkdir_write_enable=YES

[root@gyt vusers_dir]# vim xiaowang #查看、下載文件

anon_upload_enable=YES

 

 

 

6步:而後再次修改vsftpd主配置文件,經過添加user_config_dir參數來定義這兩個虛擬用戶不一樣權限的配置文件所存放的路徑。爲了讓修改後的參數當即生效,須要重啓vsftpd服務程序並將該服務添加到開機啓動項中:

[root@gyt ~]# vim /etc/vsftpd/vsftpd.conf

#完整配置:

anonymous_enable=NO

local_enable=YES

guest_enable=YES

guest_username=virtual

allow_writeable_chroot=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

 

pam_service_name=vsftpd.vu

userlist_enable=YES

tcp_wrappers=YES

user_config_dir=/etc/vsftpd/vusers_dir

7步:重啓服務,設置開機啓動,設置SELinux域容許策略

[root@gyt ~]# systemctl restart vsftpd

[root@gyt ~]# systemctl enable vsftpd

 

設置SELinux域容許策略,而後使用虛擬用戶模式登陸FTP服務器。

[root@gyt ~]# getsebool -a | grep ftp

[root@gyt ~]# setsebool -P ftpd_full_access=on

8步:測試

#此時,不但可使用虛擬用戶模式成功登陸到FTP服務器,還能夠分別使用帳戶gyt和pemglang來檢驗他們的權限。固然,讀者在生產環境中必定要根據真實需求來靈活配置參數,不要照搬這裏的實驗操做。

[root@gyt ~]# ftp 192.168.1.109

Connected to 192.168.1.109 (192.168.1.109).

220 (vsFTPd 3.0.2)

Name (192.168.1.109:root): xiaowang  #虛擬用戶xiaowang登陸

331 Please specify the password.

Password:此處輸入虛擬用戶的密碼

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> mkdir files     

550 Permission denied.     #系統提示「權限拒絕」(Permission denied

ftp> exit

221 Goodbye.

 

[root@gyt ~]# ftp 192.168.1.109

Connected to 192.168.1.109 (192.168.1.109).

220 (vsFTPd 3.0.2)

Name (192.168.1.109:root): gyt    #虛擬用戶gyt登陸

331 Please specify the password.

Password:此處輸入虛擬用戶的密碼

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> mkdir files #默認建立的文件根文件目錄在/var/ftproot

257 "/files" created

ftp> rename files database #重命名文件數據庫

350 Ready for RNTO. #準備好了

250 Rename successful. #更名成功

ftp> rmdir database #rmdir數據庫

250 Remove directory operation successful. #刪除目錄操做成功

ftp> exit

221 Goodbye.   

 

重啓服務器時。注意防火牆設置iptables -F 清除

注意上傳文件的屬主屬組以及權限須要改成644能夠下載。

相關文章
相關標籤/搜索