Centos 7.5 搭建FTP配置虛擬用戶


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

根目錄權限不對

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM