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
根目錄權限不對
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/238413.html
標籤:其他
