Centos 7.5 搭建FTP配置虛擬用戶1.安裝vsftpd#vsftpd下載地址 http://mirror./centos/7/os/x86_64/Packages/vsftpd-3.0.2-25.el7.x86_64.rpm #安裝vsftpd rpm -ivh vsftpd-3.0.2-25.el7.x86_64.rpm
2.創(chuàng)建vsftpd系統(tǒng)用戶#建立Vsftpd服務的宿主用戶 useradd vsftpd -M -s /sbin/nologin #建立Vsftpd虛擬宿主用戶 useradd virftpuser -M -s /sbin/nologin –d /var/ftp/
3.配置vsftpdmv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsfftpd.conf.bak #新建vsftpd.conf vim /etc/vsftpd/vsftpd.conf 內(nèi)容如下: anonymous_enable=NO #設成YES,允許匿名用戶登陸 local_enable=YES #允許/禁止本地用戶登陸 注意:主要是為虛擬宿主用戶,如果該項目設定為NO那么所有虛擬用戶將無法訪問。 write_enable=YES #設定可以進行寫操作。 local_umask=022 #設定上傳后文件的權限掩碼,文件644,文件夾755 dirmessage_enable=YES #設定開啟目錄標語功能 xferlog_enable=YES #設定開啟日志記錄功能。 connect_from_port_20=YES #設定端口20進行數(shù)據(jù)連接 xferlog_std_format=YES #設定日志使用標準的記錄格式 listen=YES #開啟獨立進程vsftpd,不使用超級進程xinetd。設定該Vsftpd服務工作在StandAlone模式下。 pam_service_name=vsftpd #設定,啟用pam認證,并指定認證文件名/etc/pam.d/vsftpd userlist_enable=YES #設定userlist_file中的用戶將不得使用FTP tcp_wrappers=YES #設定支持TCP Wrappers chroot_local_user=YES #限制所有用戶在主目錄 #限制所有用戶在主目錄 #以下這些是關于Vsftpd虛擬用戶支持的重要配置項目。默認Vsftpd.conf中不包含這些設定項目,需要自己手動添加配置 guest_enable=YES #設定啟用虛擬用戶功能 guest_username=virftpuser #指定虛擬用戶的宿主用戶 virtual_use_local_privs=YES #設定虛擬用戶的權限符合他們的宿主用戶 user_config_dir=/etc/vsftpd/vconf #設定虛擬用戶個人Vsftp的配置文件存放路徑。也就是說,這個被指定的目錄里,將存放每個Vsftp虛擬用戶個性的配置文件, #一個需要注意的地方就是這些配置文件名必須和虛擬用戶名相同。
#建立Vsftpd的日志文件,修改屬主為vsftpd服務用戶 touch /var/log/vsftpd.log chown vsftpd.vsftpd /var/log/vsftpd.log
4.虛擬用戶配置#創(chuàng)建虛擬用戶配置文件存放路徑 mkdir –pv /etc/vsftpd/vconf/ #制作虛擬用戶數(shù)據(jù)庫文件 vim /etc/vsftpd/virtusers #編輯虛擬用戶名單文件virtusers,在其中加入用戶的用戶名和口令信息。格式:“奇數(shù)行用戶名,偶數(shù)行口令”。 virtusers文件格式如下: test #用戶名 test1234 #用戶密碼 test1 #用戶名 test1234 #用戶密碼 #生成虛擬用戶數(shù)據(jù)文件:
#添加用戶需添加至virtusers文件,然后重新執(zhí)行上述命令。 5. 設置認證文件PAM#備份配置文件 cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak #編輯Vsftpd的PAM驗證配置文件,把原來的配置文件全部注釋掉(不注釋掉虛擬用戶會登錄不上),添加如下行 auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers #以上兩條是手動添加的,內(nèi)容是對虛擬用戶的安全和帳戶權限進行驗證。 這里的auth是指對用戶的用戶名口令進行驗證。 這里的accout是指對用戶的帳戶有哪些權限哪些限制進行驗證。 其后的sufficient表示充分條件,也就是說,一旦在這里通過了驗證,那么也就不用經(jīng)過下面剩下的驗證步驟了。相反,如果沒有通過的話,也不會被系統(tǒng)立即擋之門外,因為sufficient的失敗不決定整個驗證的失敗,意味著用戶還必須將經(jīng)歷剩下來的驗證審核。 再后面的/lib/security/pam_userdb.so表示該條審核將調(diào)用pam_userdb.so這個庫函數(shù)進行。 最后的db=/etc/vsftpd/virtusers則指定了驗證庫函數(shù)將到這個指定的數(shù)據(jù)庫中調(diào)用數(shù)據(jù)進行驗證。 --------------------------------------------------------------------------------- vim /etc/pam.d/vsftpd #%PAM-1.0 auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers #session optional pam_keyinit.so force revoke #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so #auth include password-auth #account include password-auth #session required pam_loginuid.so #session include password-auth 6.虛擬用戶配置#虛擬用戶權限介紹 例,分別創(chuàng)建admin web download upload 4個賬戶, 權限分配如下: admin #管理員賬戶,虛擬用戶具有寫權限(上傳、下載、刪除、重命名),新建目錄
web #web網(wǎng)站文件傳輸賬戶, 和admin管理員權限相同,由于web頁面的特殊性,故單獨設置上傳文件權限為755
download #下載賬戶,只能瀏覽目錄和下載
upload #上傳賬戶,只能新建目錄和上傳、下載
#各虛擬用戶配置文件如下: #admin local_root=/home/ftp #虛擬用戶根目錄 anon_world_readable_only=NO #開放下載權限 write_enable=YES #寫權限 anon_mkdir_write_enable=YES #新建目錄權限 anon_upload_enable=YES #上傳權限 anon_other_write_enable=YES #刪除/重命名的權限
#web local_root=/var/www #虛擬用戶根目錄 anon_world_readable_only=NO #開放下載權限 anon_umask=022 #umask =022時,新建的目錄權限是755(777-022),文件的權限是 644, #umask =077時,新建的目錄權限是700,文件的權限時 600 write_enable=YES (寫權限)
#download local_root=/home/ftp #虛擬用戶根目錄 anon_world_readable_only=NO #開放下載權限, 寫YES,將不能列出文件和目錄 anon_mkdir_write_enable=NO #這句可以不寫,不寫同樣不能新建文件夾
#upload local_root=/home/ftp #虛擬用戶根目錄 virtual_use_local_privs=NO #虛擬用戶和匿名用戶有相同的權限,默認是NO;與本地用戶權限相同是YES anon_world_readable_only=NO #開放下載權限,寫成YES,將不能列出文件和目錄 write_enable=YES #寫權限 anon_upload_enable=YES #上傳權限
#創(chuàng)建虛擬用戶根目錄,這里我使用默認目錄 /var/ftp/pub/ #屬主修改為虛擬宿主用戶virftpuser chown –R virftpuser:virftpuser /vat/ftp/pub/ #在虛擬用戶配置文件目錄創(chuàng)建虛擬用戶對應配置文件,文件名與虛擬用戶名一致 vim /etc/vsftpd/vconf/username #配置文件內(nèi)容根據(jù)需求自行配置。
7.firewall和SElinux設置#如無特殊要求可直接關閉firewall和SElinux
firewall-cmd --list-services #查看防火墻允許的服務。 firewall-cmd --add-service=ftp --permanent #永久開放ftp服務 firewall-cmd --add-port=20/tcp –permanent firewall-cmd --add-port=21/tcp --permanent #開放端口,允許外網(wǎng)訪問 firewall-cmd –reload #重新載入配置 setsebool ftpd_full_access 1 #selinux設置 setsebool tftp_home_dir 1
8.啟動服務,測試systemctl start vsftpd #啟動vsftpd systemctl enable vsftpd #添加服務至開機啟動
#測試需安裝ftp軟件 ftp >open 127.0.0.1
9. vsftpd單用戶多目錄的配置#可讀寫掛載 mount --bind /home/test1/ /data/www/virtual/test1/ #只讀掛載 mount –bind –o ro /home/test2/ /data/www/virtual/test2/
#mount --bind連接的兩個目錄的inode號碼并不一樣,只是目標目錄的block被屏蔽掉,inode被重定向到原目錄的inode (目標目錄的inode和block依然沒變,就是說目標目錄只是隱藏不是刪除,數(shù)據(jù)都沒有改變,只是訪問不到了) #兩個目錄的對應關系存在于內(nèi)存里,一旦重啟掛載關系就不存在了,所以我們想要服務器重啟之后還有效的話就需要寫到/etc/rc.local 或修改fstab文件。
#fstab文件格式 # /home/test1/ /data/www/virtual/test1/ xfs bind 0 0 #/home/test2/ /data/www/virtual/test2/ xfs bind,ro 0 0
#修改rc.local vim /etc/rc.local #添加如下內(nèi)容 #可讀寫掛載 mount --bind /home/test1/ /data/www/virtual/test1/ #只讀掛載 mount --bind /home/test2/ /data/www/virtual/test2/ mount -o remount,ro /data/www/virtual/test2/
#權限設置 chmod +x /etc/rc.d chmod +x /etc/rc.d/rc.local #設置服務啟動腳本。 cd /usr/lib/systemd/system vim rc-local.service 注釋掉之前內(nèi)容,添加以下內(nèi)容 [Unit] Description=/etc/rc.d/rc.local Compatibility ConditionFileIsExecutable=/etc/rc.d/rc.local After=network.target
[Service] Type=forking ExecStart=/etc/rc.d/rc.local start TimeoutSec=0 RemainAfterExit=yes SysVStartPriority=99
[Install] WantedBy=multi-user.target
#啟動服務 systemctl start rc-local systemctl enable rc-local
10.常見問題1.centos7 550 create directory operation failed 目錄權限不足,SElinux配置問題
2.500 OOPS: vsftpd: refusing to run with writable root inside chroot() 原因 用戶主目錄具有寫權限,chmod a-w ,去除寫權限 或在用戶配置文件追加 allow-writeable_chroot=yes, echo “allow_writeable_chroot=YES” >> /etc/vsftpd/vconf/$username
3.開啟了匿名模式,但訪問一直提示輸入用戶及密碼 原因1 參數(shù)不對造成,添加anon_umask=022 原因2 根目錄權限不對
|
|