vsftp服務搭建使用--學習筆記

本次實驗的環境是redhat7.0系統,實驗內容來自《linux就該這麼學》
ftp是一種在互聯網中進行文件傳輸的協議,基於客戶端/服務端模式,默認使用的是20/21端口,20端口用於傳輸數據,21端口用於接收客戶端發出的相關ftp命令和參數。
ftp分爲:

  • 主動模式:ftp服務器主動向客戶端發起連接請求
  • 被動模式:ftp服務器等待客戶端發起連接請求(ftp的默認工作模式)

vsftpd(very secure ftp daemon,非常安全的ftp守護進程)是一款隱形在linux操作系統上的ftp服務程序,不僅僅完全開源而且免費。

1.vsftpd

三種模式:

  • 匿名訪問模式:是一種最不安全的認證模式,任何人都可以無需密碼驗證而直接登錄到ftp服務器
  • 本地用戶模式:是通過linux系統本地的賬戶密碼信息進行認證的模式,比匿名模式更安全。
  • 虛擬用戶模式:最安全的模式,爲ftp服務單獨創建用戶,使用虛擬用戶來進行口令驗證,虛擬用戶在本地的服務器上並不存在。

1.1 匿名訪問模式

參數 作用
anonymous_enable = YES 開啓匿名用戶模式
anon_umask = 022 匿名用戶上傳文件的umask值
anon_upload_enable = YES 允許匿名用戶上傳文件
anon_mkdir_write_enable = YES 允許匿名用戶創建目錄
anon_other_write_enable = YES 允許匿名用戶修改和刪除目錄

1.1.1 修改配置

[root@localhost ~]# yum install vsftpd -y
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# cp vsftpd.conf vsftpd.conf.bak
[root@localhost vsftpd]# grep -v "#" vsftpd.conf.bak >vsftpd.conf
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_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.1.2 匿名用戶默認訪問的是/var/ftp/pub目錄

將/var/ftp/pub目錄的屬主設置爲ftp用戶

[root@localhost vsftpd]# chown -fR ftp /var/ftp/pub

1.1.3 啓動服務

[root@localhost vsftpd]# systemctl restart vsftpd
[root@localhost vsftpd]# systemctl enable vsftpd
ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'

1.1.4 設置selinux

[root@localhost vsftpd]# 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
[root@localhost vsftpd]# setsebool -P ftpd_full_access=on

1.1.5 客戶端測試

在另一臺的客戶端進行連接

[root@localhost Desktop]# ftp 192.168.137.10   【服務端的地址】
Connected to 192.168.137.10 (192.168.137.10).
220 (vsFTPd 3.0.2)
Name (192.168.137.10:root): anonymous  【匿名用戶】
331 Please specify the password.
Password:  【沒有密碼,直接回車】
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,137,10,224,111).
150 Here comes the directory listing.
drwxr-xr-x    2 14       0               6 Mar 07  2014 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> mkdir adir  【創建目錄】
257 "/pub/adir" created
ftp> rename adir bdir  【目錄改名】
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir bdir  【刪除目錄】
250 Remove directory operation successful.

測試成功。

1.2 本地用戶模式

參數 作用
anonymous_enable = NO 禁止匿名用戶模式
local_enable = YES 開啓本地用戶模式
write_enable=YES 設置寫權限
local_umask=022 本地用戶模式上傳文件的umask
userlist_enable=YES 啓用“禁止用戶名單”,名單文件爲ftpusers和user_list
userlist_deny=YES 開啓用戶作用名單文件功能

1.2.1 修改配置文件

在上面已經修改selinux,這裏就不再設置了

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
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.2.2 啓動服務

[root@localhost vsftpd]# vim vsftpd.conf
[root@localhost vsftpd]# systemctl restart vsftpd

1.2.3 創建一個用戶

創建一個普通用戶,在客戶端測試時,使用這個普通用戶登錄ftp,服務器端默認是禁止root用戶登錄的,名單文件是 /etc/vsftpd/user_list 和 /etc/vsftpd/ftpusers

[root@localhost vsftpd]# useradd developer
[root@localhost vsftpd]# echo "redhat" |passwd --stdin developer
Changing password for user developer.
passwd: all authentication tokens updated successfully.

1.2.3 客戶端測試

登錄另一臺客戶端進行測試

[root@localhost Desktop]# ftp 192.168.137.10
Connected to 192.168.137.10 (192.168.137.10).
220 (vsFTPd 3.0.2)
Name (192.168.137.10:root): developer  【服務端的用戶】
331 Please specify the password.
Password:  【developer的密碼】
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.    【這裏進入的developer的家目錄】
ftp> mkdir adir
257 "/home/developer/adir" created
ftp> rename adir bdir
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir bdir
250 Remove directory operation successful.
ftp> 

測試成功

1.3 虛擬用戶模式

參數 作用
anonymous_enable=NO 關閉匿名用戶模式
guest_enable=YES 開啓虛擬用戶模式
guest_username=auser 虛擬用戶名稱
allow_writeable_chroot=YES 允許對禁錮的ftp根目錄執行寫入操作,而且不拒絕用戶的登錄請求
pam_service_anme=vsftpd.vu 指定pam文件

1.3.1 創建用戶

創建用戶進行ftp認證的用戶數據文件,啓動奇數行爲賬戶名,偶數行爲密碼,創建兩個用戶xiaoming和xiaohong,密碼都是redhat:

[root@localhost vsftpd]# vim user.list
xiaoming
redhat
xiaohong
redhat

使用db_load對明文的數據文件進行加密,產生一個user.db的加密文件

[root@localhost vsftpd]# db_load -T -t hash -f user.list user.db
[root@localhost vsftpd]# ls
ftpusers  user.db  user_list  user.list  vsftpd.conf  vsftpd.conf.bak  vsftpd_conf_migrate.sh
# 設置權限最小
[root@localhost vsftpd]# chmod 600 user.db 
# 刪除明文密碼文件
[root@localhost vsftpd]# rm -f user.list 

1.3.2 創建ftp存儲目錄

創建存儲文件的目錄已經虛擬用戶映射的系統本地用戶。如果不映射本地用戶,那麼在創建文件時,這個文件的權限將會出現錯誤。虛擬用戶登錄ftp,會進入到映射的本地用戶的家目錄。

[root@localhost vsftpd]# useradd -d /var/auser -s /sbin/nologin auser
[root@localhost vsftpd]# chmod -Rf 755 /var/auser

1.3.4 創建支持虛擬用戶的pam文件

[root@localhost vsftpd]# vim /etc/pam.d/vsftpd.vu
auth    required    pam_userdb.so db=/etc/vsftpd/user
account required    pam_userdb.so db=/etc/vsftpd/user

1.3.5 修改配置文件

[root@localhost vsftpd]# cd /etc/vsftpd/
[root@localhost vsftpd]# vim vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=auser
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/user_dir  # 虛擬用戶不通權限的配置文件所存放的路徑

爲虛擬用戶設置不同的權限。xiaoming用戶只能查看文件。xiaohong用戶可以創建、修改、刪除

[root@localhost vsftpd]# mkdir /etc/vsftpd/user_dir
[root@localhost vsftpd]# cd /etc/vsftpd/user_dir
[root@localhost user_dir]# touch xiaoming
[root@localhost user_dir]# vim xiaohong
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@localhost user_dir]# systemctl restart vsftpd

防火牆,selinux在上文已經設置過了

1.3.6 客戶端測試

在另一臺客戶端上測試
測試xiaoming用戶,只能登陸和查看

[root@localhost Desktop]# ftp 192.168.137.10
Connected to 192.168.137.10 (192.168.137.10).
220 (vsFTPd 3.0.2)
Name (192.168.137.10:root): xiaoming
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls 【可以查看文件】
227 Entering Passive Mode (192,168,137,10,82,131).
150 Here comes the directory listing.
226 Directory send OK.
ftp> mkdir adir 【創建目錄沒有權限】
550 Permission denied.

測試xiaohong用戶,可以登錄,查看,創建、修改、刪除

[root@localhost Desktop]# ftp 192.168.137.10
Connected to 192.168.137.10 (192.168.137.10).
220 (vsFTPd 3.0.2)
Name (192.168.137.10:root): xiaohong
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,137,10,213,178).
150 Here comes the directory listing.
226 Directory send OK.
ftp> mkdir adir
257 "/adir" created
ftp> rename adir bdir
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir bdir
250 Remove directory operation successful.

測試成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章