Centos 7.5 搭建FTP配置虛擬用戶 1.安裝vsftpd #vsftpd下載地址 http://mirror.centos.org/centos/7/os/x86_64/Packages/vsftpd-3.0.2-25.el7.x86_64.rpm #安裝vsftpd rpm -ivh v ...
Centos 7.5 搭建FTP配置虛擬用戶
1.安裝vsftpd
#vsftpd下載地址
http://mirror.centos.org/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.創建vsftpd系統用戶
#建立Vsftpd服務的宿主用戶
useradd vsftpd -M -s /sbin/nologin
#建立Vsftpd虛擬宿主用戶
useradd virftpuser -M -s /sbin/nologin –d /var/ftp/
3.配置vsftpd
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsfftpd.conf.bak
#新建vsftpd.conf
vim /etc/vsftpd/vsftpd.conf
內容如下:
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進行數據連接
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.虛擬用戶配置
#創建虛擬用戶配置文件存放路徑
mkdir –pv /etc/vsftpd/vconf/
#製作虛擬用戶資料庫文件
vim /etc/vsftpd/virtusers
#編輯虛擬用戶名單文件virtusers,在其中加入用戶的用戶名和口令信息。格式:“奇數行用戶名,偶數行口令”。
virtusers文件格式如下:
test #用戶名
test1234 #用戶密碼
test1 #用戶名
test1234 #用戶密碼
#生成虛擬用戶數據文件:
db_load -T -t hash -f
/etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
#添加用戶需添加至virtusers文件,然後重新執行上述命令。
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
#以上兩條是手動添加的,內容是對虛擬用戶的安全和帳戶許可權進行驗證。
這裡的auth是指對用戶的用戶名口令進行驗證。
這裡的accout是指對用戶的帳戶有哪些許可權哪些限制進行驗證。
其後的sufficient表示充分條件,也就是說,一旦在這裡通過了驗證,那麼也就不用經過下麵剩下的驗證步驟了。相反,如果沒有通過的話,也不會被系統立即擋之門外,因為sufficient的失敗不決定整個驗證的失敗,意味著用戶還必須將經歷剩下來的驗證審核。
再後面的/lib/security/pam_userdb.so表示該條審核將調用pam_userdb.so這個庫函數進行。
最後的db=/etc/vsftpd/virtusers則指定了驗證庫函數將到這個指定的資料庫中調用數據進行驗證。
---------------------------------------------------------------------------------
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.虛擬用戶配置
#虛擬用戶許可權介紹
例,分別創建admin web download upload 4個賬戶,
許可權分配如下:
admin #管理員賬戶,虛擬用戶具有寫許可權(上傳、下載、刪除、重命名),新建目錄
web #web網站文件傳輸賬戶, 和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 (寫許可權)
anon_mkdir_write_enable=YES (新建目錄許可權)
anon_upload_enable=YES(上傳許可權)
anon_other_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 #上傳許可權
#創建虛擬用戶根目錄,這裡我使用預設目錄 /var/ftp/pub/
#屬主修改為虛擬宿主用戶virftpuser
chown –R virftpuser:virftpuser /vat/ftp/pub/
#在虛擬用戶配置文件目錄創建虛擬用戶對應配置文件,文件名與虛擬用戶名一致
vim /etc/vsftpd/vconf/username #配置文件內容根據需求自行配置。
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 #開放埠,允許外網訪問
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依然沒變,就是說目標目錄只是隱藏不是刪除,數據都沒有改變,只是訪問不到了)
#兩個目錄的對應關係存在於記憶體里,一旦重啟掛載關係就不存在了,所以我們想要伺服器重啟之後還有效的話就需要寫到/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
#添加如下內容
#可讀寫掛載
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
註釋掉之前內容,添加以下內容
[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
參數不對造成,添加anon_umask=022
原因2
根目錄許可權不對