本次實驗的環境是redhat7.0系統,實驗內容來自《linux就該這麼學》
ftp是一種在互聯網中進行文件傳輸的協議,基於客戶端/服務端模式,默認使用的是20/21端口,20端口用於傳輸數據,21端口用於接收客戶端發出的相關ftp命令和參數。
ftp分爲:linux
vsftpd(very secure ftp daemon,很是安全的ftp守護進程)是一款隱形在linux操做系統上的ftp服務程序,不單單徹底開源並且免費。vim
三種模式:安全
參數 | 做用 |
---|---|
anonymous_enable = YES | 開啓匿名用戶模式 |
anon_umask = 022 | 匿名用戶上傳文件的umask值 |
anon_upload_enable = YES | 容許匿名用戶上傳文件 |
anon_mkdir_write_enable = YES | 容許匿名用戶建立目錄 |
anon_other_write_enable = YES | 容許匿名用戶修改和刪除目錄 |
[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
將/var/ftp/pub目錄的屬主設置爲ftp用戶服務器
[root@localhost vsftpd]# chown -fR ftp /var/ftp/pub
[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'
[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
在另外一臺的客戶端進行鏈接app
[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.
測試成功。ssh
參數 | 做用 |
---|---|
anonymous_enable = NO | 禁止匿名用戶模式 |
local_enable = YES | 開啓本地用戶模式 |
write_enable=YES | 設置寫權限 |
local_umask=022 | 本地用戶模式上傳文件的umask |
userlist_enable=YES | 啓用「禁止用戶名單」,名單文件爲ftpusers和user_list |
userlist_deny=YES | 開啓用戶做用名單文件功能 |
在上面已經修改selinux,這裏就再也不設置了tcp
[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
[root@localhost vsftpd]# vim vsftpd.conf [root@localhost vsftpd]# systemctl restart vsftpd
建立一個普通用戶,在客戶端測試時,使用這個普通用戶登陸ftp,服務器端默認是禁止root用戶登陸的,名單文件是 /etc/vsftpd/user_list 和 /etc/vsftpd/ftpuserside
[root@localhost vsftpd]# useradd developer [root@localhost vsftpd]# echo "redhat" |passwd --stdin developer Changing password for user developer. passwd: all authentication tokens updated successfully.
登陸另外一臺客戶端進行測試測試
[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>
測試成功ui
參數 | 做用 |
---|---|
anonymous_enable=NO | 關閉匿名用戶模式 |
guest_enable=YES | 開啓虛擬用戶模式 |
guest_username=auser | 虛擬用戶名稱 |
allow_writeable_chroot=YES | 容許對禁錮的ftp根目錄執行寫入操做,並且不拒絕用戶的登陸請求 |
pam_service_anme=vsftpd.vu | 指定pam文件 |
建立用戶進行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
建立存儲文件的目錄已經虛擬用戶映射的系統本地用戶。若是不映射本地用戶,那麼在建立文件時,這個文件的權限將會出現錯誤。虛擬用戶登陸ftp,會進入到映射的本地用戶的家目錄。
[root@localhost vsftpd]# useradd -d /var/auser -s /sbin/nologin auser [root@localhost vsftpd]# chmod -Rf 755 /var/auser
[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
[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在上文已經設置過了
在另外一臺客戶端上測試
測試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.
測試成功