前言 本文,主要以vsftp軟件為主進行講解,版本為3.0.2。以介紹設置虛擬用戶、權限驗證為主,linux權限知識默認大家都有所了解。vsftpd設置有兩種模式:主動模式、被動模式。 Linux網絡文件共享。例如NFS、Sambs、FTP,其中以FTP應用最為廣泛,成為了當下linux文件系統中主流的網絡文件共享工具。介紹FTP主要有幾種常見的工具vsftp、proftp、wu-ftp、pureftp,各種FTP軟件無優劣之分,實際工作中選擇自己熟悉的一款即可。 ![]() 正文一、vsftp安裝注意:以Redhat7系列(或者支持systemd環境的linux系統) 1、準備安裝包 我的gitee倉庫: 當然可以到此網站下載各個版本: vsftpd-3.0.2-29.el7_9.x86_64.rpm 2、安裝 rpm -ivh vsftpd-3.0.2-29.el7_9.x86_64.rpm 查詢是否安裝 rpm -qa | grep vsftpd 二、啟動與停止1、設置開啟自啟systemctl enable vsftpd.service 2、啟動vsftpd服務systemctl start vsftpd.service 3、查看vsftpd服務狀態systemctl status vsftpd.service 4、查看vsftpd進程ps -ef | grep vsftpd#或者ps -aux | grep vsftpd 三、錯誤排查1、通過Git Bash驗證ftp登錄在本機會提示沒有ftp命令,直接就在遠端測試連接。 ftp remote_ip 2、排查錯誤其實翻譯一下就知道了,chroot配置沒有寫入的權限。 OOPS: vsftpd: refusing to run with writable root inside chroot()Login failed. 3、在vsftpd.conf加入如下配置后續的版本更新了,需要手動加上allow_writeable_chroot=YES參數配置 allow_writeable_chroot=YES 4、重啟vsftpd服務(Redhat7系列)systemctl restart vsftpd.service 四、優化設置1、設置防火墻規則關于防火墻的設置,可以參考我的歷史文章 【Redhat系列linux防火墻工具】firewalld與iptables防火墻工具的激烈碰撞 https://blog.csdn.net/Tolove_dream/article/details/122293458 重啟測試vsftpd上傳文件,默認存儲路徑為該用戶的home目錄下 #例如/home/vsftpd/test 如需更改配置,如下設置 local_root=/var/ftp/pub 防火墻加入ftp服務 firewall-cmd --zone=public --add-service=ftp --permanent 主動模式,防火墻開啟20、21端口 firewall-cmd --zone=public --add-port=21/tcp --permanent firewall-cmd --zone=public --add-port=20/tcp --permanent 設置當前ftp存儲目錄用戶權限、chroot_list文件配置用戶登錄、設置虛擬用戶。 注意:在Windows資源管理訪問,網絡共享中心->Internet屬性->高級,開啟被動訪問ftp(開啟兼容模式) 2、設置selinux1、設置SELinux為寬容模式或者臨時關閉 #臨時改成寬容模式setenforce 0#查看selinux[root@dywangk test]# getenforcePermissive 2、永久設置selinux,修改配置文件/etc/sysconfig/selinux #查看,默認配置文件是開啟的cat /etc/sysconfig/selinuxSELINUX=enforcing#禁用selinuxSELINUX=disable#寬容模式SELINUX=Permissive 五、配置參考1、示例配置虛擬用戶編輯配置文件vim /etc/vsftpd/vsftpd.conf # Example config file /etc/vsftpd/vsftpd.conf#綁定本機IPlisten_address=192.168.245.134#禁止匿名用戶登錄anonymous_enable=NO#允許本地用戶訪問local_enable=YES#開啟寫入權限write_enable=YES#在后續比較高的版本中需要加入允許chroot寫的權限allow_writeable_chroot=YES#上傳文件后默認權限掩碼local_umask=022#默認不開放匿名用戶上傳權限#anon_upload_enable=YES#默認不開放匿名用戶創建于寫的權限#anon_mkdir_write_enable=YES#dirmessage_enable=YES## Activate logging of uploads/downloads.xferlog_enable=YES## Make sure PORT transfer connections originate from port 20 (ftp-data).#默認為FTP主動模式,需要開啟防火墻20、21端口connect_from_port_20=YES##chown_uploads=YES#chown_username=whoever##xferlog_file=/var/log/xferlog#xferlog_std_format=YES##idle_session_timeout=600##data_connection_timeout=120##nopriv_user=ftpsecure##async_abor_enable=YES##ascii_upload_enable=YES#ascii_download_enable=YES##ftpd_banner=Welcome to blah FTP service.##deny_email_enable=YES#banned_email_file=/etc/vsftpd/banned_emails#禁止FTP用戶離開自己的主目錄chroot_local_user=YESchroot_list_enable=NO# (default follows)#虛擬用戶列表,設置默認允許登錄FTP的用戶,每行一個用戶chroot_list_file=/etc/vsftpd/chroot_list#開啟虛擬用戶功能guest_enable=YES#虛擬用戶宿主目錄guest_username=ftp#用戶登錄后操作主目錄和本地用戶具有同樣的權限virtual_use_local_privs=YES#虛擬用戶主目錄配置文件user_config_dir=/etc/vsftpd/vconf#ls_recurse_enable=YES#開啟監聽,開啟ipv4就禁用listen_ipv6listen=YES#listen_ipv6=NO#權限驗證需要的加密文件pam_service_name=vsftpd.vu#pam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YES 在/etc/vsftpd/chroot_list加入虛擬用戶user1和user2。這里直接用vim編輯是一樣的加入配置,每行對應一個用戶。 echo 'user1' >> /etc/vsftpd/chroot_listecho 'user2' >> /etc/vsftpd/chroot_list 2、新增用戶并指定目錄建議:linux下賦予權限底線,在最小權限范圍內滿足需求即可。 #創建虛擬用戶目錄mkdir -p /data/{user1,user2}#賦予權限,測試直接賦予最高權限了,實際工作中建議在最小權限范圍內滿足即可。chmod -R 777 /data/user1 chmod -R 777 /data/user2 3、設置用戶名密碼數據庫下面使用的\n并非錯誤輸入,是的,就是正常的換行。熟悉編程的小伙伴應該不陌生,在Java語言的打印輸出大家應該有印象吧! class test{ public static void main(String args){ system.out.println('hello world!!!'); } } 在虛擬用戶存儲用戶名以及密碼 #用vusers.list來區分本機用戶與虛擬用戶配置echo -e 'user1\n123456\nuser2\n123456' > /etc/vsftpd/vusers.list#切換到vsftpd配置目錄cd /etc/vsftpd/#解析vusers.list到vusers.dbdb_load -T -t hash -f vusers.list vusers.db#賦予權限chmod 600 vusers.* 4、指定認證方式echo -e '#%PAM-1.0\n\nauth required pam_userdb.so db=/etc/vsftpd/vusers\naccount required pam_userdb.so db=/etc/vsftpd/vusers' > /etc/pam.d/vsftpd.vu#創建虛擬配置文件目錄mkdir /etc/vsftpd/vconf#進入虛擬用戶配置文件目錄cd vconf/#新增配置echo 'local_root=/data/user1' > user1echo 'local_root=/data/user2' > user2#查看配置lsuser1 user2#查看user1與user2的主目錄cat user1local_root=/data/user1cat user2local_root=/data/user2#新建測試文件touch /data/user1/test1touch /data/user2/test2 如果沒有指定虛擬用戶的ftp目錄,默認訪問目錄如下 /var/ftp/pub/ 經過測試設置的虛擬用戶user2禁錮在了/data/user2 目錄下 #在Windows下訪問到新增的test1、test2文件,如果沒變過來多刷新幾遍/data/user1/test1/data/user2/test2 5、ftp命令登錄驗證Git Bash驗證 ftp remote_ip 或者在資源管理驗證測試新增、刪除、修改。 ftp://remote_ip
|
|