前言
FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱。用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基於不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。
一般在各種linux的發行版中,默認帶有的ftp軟件是vsftp,我們需要利用相關命令來開啟安裝ftp服務器,然后再在vsftpd.conf中進行相關配置,下面我來介紹在Linux中vsftpd安裝與配置增加用戶的方法。
知識鏈接:關於vsftpd服務配置講解
一、部署
部署環境:Centos 7
- 檢查是否已經安裝vsftpd,如果已經安裝,會顯示版本號
rpm -qa | grep vsftpd
- 安裝
yum install vsftpd ftp db4 db4-utils pam* libcap libcap-devel tcp_wrappers tcp_wrappers-devel -y
二、配置vsftpd
cp -fr /etc/vsftpd/vsftpd.conf{,.bak}
cp -fr /etc/pam.d/vsftpd{,.default}
1、匿名用戶登錄配置
匿名登陸
只能通過2個用戶(默認:FTP 和anonymous)進行登陸
- 創建匿名登錄后的使用者
匿名用戶參數:ftp_username=anontest
useradd anontest -s /sbin/nologin -d /data/ftp/anontest
chmod 755 /data/ftp/anontest
- 修改配置文件
# 打開匿名用戶模式
anonymous_enable=YES
## 打開本地用戶登錄
local_enable=YES
## 打開全局寫權限
write_enable=YES
## 系統用戶新增或上傳檔案時的umask值
#local_umask=022
# 若是啟動這項功能,則使用匿名登入時,不會詢問密碼。默認值為NO
no_anon_password=YES
# 定義匿名登入的使用者名稱。默認值為ftp
ftp_username=anontest
# 使用匿名登入時,所登入的目錄。默認值為/var/ftp。注意ftp目錄不能是777的權限屬性,即匿名用戶的家目錄不能有777的權限
#anon_root=/data/ftp/anontest
anon_root=/data/ftp
# 如果設為YES,則允許匿名登入者有上傳文件(非目錄)的權限,只有在write_enable=YES時,此項才有效。當然,匿名用戶必須要有對上層目錄的寫入權。默認值為NO
anon_upload_enable=YES
# 開啟匿名用戶創建目錄的權限
anon_mkdir_write_enable=YES
# 開啟匿名用戶可以刪除目錄和文件
# (如果anon_upload_enable=NO,則匿名用戶不能上傳文件,但可以刪除或者重命名已經存在的文件;如果anon_mkdir_write_enable=NO,則匿名用戶不能上傳或者新建文件夾,但可以刪除或者重命名已經存在的文件夾。)
anon_other_write_enable=YES
# 開啟匿名用戶下載權限
anon_world_readable_only=YES
# 設置匿名用戶可以下載自己上傳的文件:新建的目錄 權限是755,文件的權限是 644
# 設置是否改變匿名用戶上傳文件(非目錄)的屬主。默認值為NO
chown_uploads=NO
# 設置匿名用戶上傳文件(非目錄)的屬主名。建議不要設置為root
chown_username=anontest
# 設置匿名登入者新增或上傳檔案時的umask值。
anon_umask=022
# 是否顯示目錄消息
dirmessage_enable=YES
# 是否讓系統自動維護上傳和下載的日志文件
xferlog_enable=YES
# 是否啟用端口20進行FTP數據連接請求
connect_from_port_20=YES
# 設定系統維護記錄FTP服務器上傳和下載情況的日志文件
xferlog_file=/var/log/vsftpd.log
# 開啟日志功能(記錄刪除、下載、刪除所有動作)
log_ftp_protocol=yes
# 是否以標准xferlog的格式書寫傳輸日志文件
xferlog_std_format=no
xferlog_enable=yes
#standalone模式 (must config)
# 設置vsftpd服務器是否以standalone模式運行。以standalone模式運行是一種較好的方式,此時listen必須設置為YES,此為默認值。建議不要更改,有很多與服務器運行相關的配置命令,需要在此模式下才有效。若設置為NO,則vsftpd不是以獨立的服務運行,要受到xinetd服務的管控,功能上會受到限制
# 是否允許監聽。如果設置為YES,則vsftpd將以獨立模式運行,由vsftpd自己監聽和處理IPv4端口的連接請求
listen=YES
listen_port=666
#listen_ipv6=YES
# 被動模式傳輸
pasv_enable=YES
pasv_promiscuous=YES
pasv_min_port=12351
pasv_max_port=12551
# 列出與vsftpd相關的pam文件
pam_service_name=vsftpd
# 是否啟用禁止登錄用戶名單
userlist_enable=YES
# 是否支持tcp_wrappers
tcp_wrappers=NO
# 設置vsftpd允許的最大連接數,默認值為0,表示不受限制。若設置為100時,則同時允許有100個連接,超出的將被拒絕。只有在standalone模式運行才有效。
max_clients=0
# 設置每個IP允許與FTP服務器同時建立連接的數目。默認值為0,表示不受限制。只有在standalone模式運行才有效
max_per_ip=0
# 設置FTP服務器在指定的IP地址上偵聽用戶的FTP請求。若不設置,則對服務器綁定的所有IP地址進行偵聽。只有在standalone模式運行才有效
#listen_address=IP地址
2、系統用戶登錄配置
以下配置可
允許本地用戶及虛擬用戶
的登錄訪問
知識鏈接:關於vsftpd服務配置講解
- 修改配置文件
#允許匿名訪問
anonymous_enable=NO
#允許本地用戶登錄
local_enable=YES
#設置本地用戶登錄后所在的目錄。默認配置文件中沒有設置該項,此時用戶登錄FTP服務器后,所在的目錄為該用戶的主目錄
local_root=/data/ftp
#是否允許登陸用戶有寫權限
write_enable=YES
#設置本地用戶的文件掩碼022
local_umask=022
#是否允許匿名用戶上傳。
#anon_upload_enable=YES
#是否允許匿名用戶建立目錄。
#anon_mkdir_write_enable=YES
#是否顯示目錄消息
dirmessage_enable=YES
#是否讓系統自動維護上傳和下載的日志文件
xferlog_enable=YES
#是否啟用端口20進行FTP數據連接請求
connect_from_port_20=NO
#設定系統維護記錄FTP服務器上傳和下載情況的日志文件
xferlog_file=/var/log/vsftpd.log
#開啟日志功能(記錄刪除、下載、刪除所有動作)
log_ftp_protocol=yes
#是否以標准xferlog的格式書寫傳輸日志文件
xferlog_std_format=no
xferlog_enable=yes
#禁止域名反向解析,解決登錄慢的問題
reverse_lookup_enable=NO
#是否允許監聽。如果設置為YES,則vsftpd將以獨立模式運行,由vsftpd自己監聽和處理IPv4端口的連接請求
listen=YES
#修改默認端口21,提高安全性
listen_port=666
#被動模式傳送
pasv_enable=YES
pasv_promiscuous=YES
#設定在PASV模式下,建立數據傳輸所可以使用port范圍的下界和上界,0 表示任意,設置50000-60000,將有助於安全性的提高
pasv_min_port=12351
pasv_max_port=12551
#虛擬用戶使用PAM認證方式;設置PAM使用的名稱,默認值為/etc/pam.d/vsftpd
pam_service_name=vsftpd
#(用戶的訪問控制可以通過user_list和ftpusers(ftpuser不受任何配制項的影響!它總是有效,它是一個黑名單)文件來實現)
#控制用戶訪問FTP的文件,里面寫着用戶名稱。一個用戶名稱一行
userlist_file=/etc/vsftpd/user_list
#userlist_enable和userlist_deny兩個選項聯合起來針對的是:本地全體用戶(除去ftpusers中的用戶)和出現在user_list文件中的用戶以及不在在user_list文件中的用戶這三類用戶集合進行的設置。
#當且僅當userlist_enable=YES時:userlist_deny項的配置才有效,user_list文件才會被使用;當其為NO時,無論userlist_deny項為何值都是無效的,本地全體用戶(除去ftpusers中的用戶)都可以登入FTP
#當userlist_enable=YES時,userlist_deny=YES時:user_list是一個黑名單,即:所有出現在名單中的用戶都會被拒絕登入;
#當userlist_enable=YES時,userlist_deny=NO時:user_list是一個白名單,即:只有出現在名單中的用戶才會被准許登入(user_list之外的用戶都被拒絕登入);另外需要特別提醒的是:使用白名單后,匿名用戶將無法登入!除非顯式在user_list中加入一行:anonymous
# 是否使userlist這個文件生效
userlist_enable=YES
#設置是否阻扯user_list文件中的用戶登錄FTP服務器
userlist_deny=YES
#是否使用tcp_wrappers作為主機訪問控制方式。
tcp_wrappers=NO
#指定用戶獨立的配置文件存放目錄
user_config_dir=/etc/vsftpd/vusers_dir
#匿名/本地用戶傳輸速率(單位:K/S)
anon_max_rate=30000000
local_max_rate=30000000
use_localtime=YES
#是否將所有用戶限制在主目錄,YES為啟用 NO禁用.(該項默認值是NO,即在安裝vsftpd后不做配置的話,ftp用戶是可以向上切換到主目錄之外的)
chroot_local_user=NO
#是否啟動限制用戶的名單 YES為啟用 NO禁用(包括注釋掉也為禁用)
chroot_list_enable=YES
#是否限制在主目錄下的用戶名單,至於是限制名單還是排除名單,這取決於chroot_local_user的值,我們可以這樣記憶: chroot_local_user總是一個全局性的設定,其為YES時,全部用戶被鎖定於主目錄,其為NO時,全部用戶不被鎖定於主目錄。那么我們勢必需要在全局設定下能做出一些“微調”,即,我們總是需要一種“例外機制",所以當chroot_list_enable=YES時,表示我們“需要例外”。而”例外“的含義總是有一個上下文的,即,當”全部用戶被鎖定於主目錄“時(即chroot_local_user=YES),"例外"就是:不被鎖定的用戶是哪些;當"全部用戶不被鎖定於主目錄"時(即chroot_local_user=NO),"例外"“就是:要被鎖定的用戶是哪些。這樣解釋和記憶兩者之間的關系就很清晰了!
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
#從2.3.5之后,vsftpd增強了安全檢查,如果用戶被限定在了其主目錄下,則該用戶的主目錄不能再具有寫權限了!如果檢查發現還有寫權限,就會報該錯誤#要修復這個錯誤可以用命令chmod a-w 去除主目錄寫權限,或者你可以在vsftpd的配置文件中增加下列兩項中的一項
allow_writeable_chroot=YES
#禁用反向域名解析
reverse_lookup_enable=NO
#每個來源IP可建立多少ftp連接
max_per_ip=0
##最多允許100個人同時使用FTP服務器
max_clients=100
##設置客戶端/數據連接超時時間
idle_session_timeout=600
data_connection_timeout=120
#
- 創建系統用戶
useradd local_one -s /sbin/nologin -d /data/ftp/local_one
chmod 755 /data/ftp/local_one
- 指定系統用戶登錄后的家目錄
如果使用系統用戶登錄,當用戶數大於1時,通過默認vsftpd.conf來管理、限制用戶權限的方法顯然有些力不從心;
因此通過配置文件參數--user_config_dir,將每個用戶配置獨立化可以解決上述問題。
例:指定用戶獨立的配置文件存放目錄:user_config_dir=/etc/vsftpd/vusers_dir
mkdir -p /etc/vsftpd/vusers_dir
touch /etc/vsftpd/vusers_dir/local_one
cat >/etc/vsftpd/vusers_dir/local_one<<EOF
#指定該用戶的登陸目錄
local_root=/data/ftp/local_one
EOF
- 創建用戶限制名單
touch /etc/vsftpd/vsftpd.chroot_list
3、虛擬用戶登錄配置
- 修改配置文件:
#允許匿名訪問
anonymous_enable=NO
#允許本地用戶登錄
local_enable=YES
#設置本地用戶登錄后所在的目錄。默認配置文件中沒有設置該項,此時用戶登錄FTP服務器后,所在的目錄為該用戶的主目錄
local_root=/data/ftp
#是否允許登陸用戶有寫權限
write_enable=YES
#設置本地用戶的文件掩碼022
local_umask=022
#是否允許匿名用戶上傳。
#anon_upload_enable=YES
#是否允許匿名用戶建立目錄。
#anon_mkdir_write_enable=YES
#是否顯示目錄消息
dirmessage_enable=YES
#是否讓系統自動維護上傳和下載的日志文件
xferlog_enable=YES
#是否啟用端口20進行FTP數據連接請求
connect_from_port_20=NO
#設定系統維護記錄FTP服務器上傳和下載情況的日志文件
xferlog_file=/var/log/vsftpd.log
#開啟日志功能(記錄刪除、下載、刪除所有動作)
log_ftp_protocol=yes
#是否以標准xferlog的格式書寫傳輸日志文件
xferlog_std_format=no
xferlog_enable=yes
#禁止域名反向解析,解決登錄慢的問題
reverse_lookup_enable=NO
#是否允許監聽。如果設置為YES,則vsftpd將以獨立模式運行,由vsftpd自己監聽和處理IPv4端口的連接請求
listen=YES
#修改默認端口21,提高安全性
listen_port=666
#被動模式傳送
pasv_enable=YES
pasv_promiscuous=YES
#設定在PASV模式下,建立數據傳輸所可以使用port范圍的下界和上界,0 表示任意,設置50000-60000,將有助於安全性的提高
pasv_min_port=12351
pasv_max_port=12551
#虛擬用戶使用PAM認證方式;設置PAM使用的名稱,默認值為/etc/pam.d/vsftpd
pam_service_name=vsftpd
#(用戶的訪問控制可以通過user_list和ftpusers(ftpuser不受任何配制項的影響!它總是有效,它是一個黑名單)文件來實現)
#控制用戶訪問FTP的文件,里面寫着用戶名稱。一個用戶名稱一行
userlist_file=/etc/vsftpd/user_list
#userlist_enable和userlist_deny兩個選項聯合起來針對的是:本地全體用戶(除去ftpusers中的用戶)和出現在user_list文件中的用戶以及不在在user_list文件中的用戶這三類用戶集合進行的設置。
#當且僅當userlist_enable=YES時:userlist_deny項的配置才有效,user_list文件才會被使用;當其為NO時,無論userlist_deny項為何值都是無效的,本地全體用戶(除去ftpusers中的用戶)都可以登入FTP
#當userlist_enable=YES時,userlist_deny=YES時:user_list是一個黑名單,即:所有出現在名單中的用戶都會被拒絕登入;
#當userlist_enable=YES時,userlist_deny=NO時:user_list是一個白名單,即:只有出現在名單中的用戶才會被准許登入(user_list之外的用戶都被拒絕登入);另外需要特別提醒的是:使用白名單后,匿名用戶將無法登入!除非顯式在user_list中加入一行:anonymous
# 是否使userlist這個文件生效
userlist_enable=YES
#設置是否阻扯user_list文件中的用戶登錄FTP服務器
userlist_deny=YES
#是否使用tcp_wrappers作為主機訪問控制方式。
tcp_wrappers=NO
#啟用虛擬用戶。默認值為NO
guest_enable=YES
#這里用來映射虛擬用戶。默認值為ftp。
#guest_username=vsftpd
guest_username=virtual
#指定用戶獨立的配置文件存放目錄
user_config_dir=/etc/vsftpd/vusers_dir
#匿名/本地用戶傳輸速率(單位:K/S)
anon_max_rate=30000000
local_max_rate=30000000
use_localtime=YES
#是否將所有用戶限制在主目錄,YES為啟用 NO禁用.(該項默認值是NO,即在安裝vsftpd后不做配置的話,ftp用戶是可以向上切換到主目錄之外的)
chroot_local_user=NO
#是否啟動限制用戶的名單 YES為啟用 NO禁用(包括注釋掉也為禁用)
chroot_list_enable=YES
#是否限制在主目錄下的用戶名單,至於是限制名單還是排除名單,這取決於chroot_local_user的值,我們可以這樣記憶: chroot_local_user總是一個全局性的設定,其為YES時,全部用戶被鎖定於主目錄,其為NO時,全部用戶不被鎖定於主目錄。那么我們勢必需要在全局設定下能做出一些“微調”,即,我們總是需要一種“例外機制",所以當chroot_list_enable=YES時,表示我們“需要例外”。而”例外“的含義總是有一個上下文的,即,當”全部用戶被鎖定於主目錄“時(即chroot_local_user=YES),"例外"就是:不被鎖定的用戶是哪些;當"全部用戶不被鎖定於主目錄"時(即chroot_local_user=NO),"例外"“就是:要被鎖定的用戶是哪些。這樣解釋和記憶兩者之間的關系就很清晰了!
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
#從2.3.5之后,vsftpd增強了安全檢查,如果用戶被限定在了其主目錄下,則該用戶的主目錄不能再具有寫權限了!如果檢查發現還有寫權限,就會報該錯誤#要修復這個錯誤可以用命令chmod a-w 去除主目錄寫權限,或者你可以在vsftpd的配置文件中增加下列兩項中的一項
allow_writeable_chroot=YES
#禁用反向域名解析
reverse_lookup_enable=NO
#每個來源IP可建立多少ftp連接
max_per_ip=0
##最多允許100個人同時使用FTP服務器
max_clients=100
##設置客戶端/數據連接超時時間
idle_session_timeout=600
data_connection_timeout=120
#
虛擬用戶不是系統中存在的,因此比本地用戶安全,具體步驟如下:
1. 創建虛擬用戶名單文件
touch /etc/vsftpd/vftpuser.txt
加入用戶的用戶名和口令信息。格式很簡單:“奇數行用戶名,偶數行口令”。
hyywnobody
123456
2. 生成虛擬用戶口令認證文件
使用db_load命令用HASH算法生成FTP用戶數據庫文件vftpuser.db
\db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db
chmod 600 /etc/vsftpd/vftpuser.db
3. 創建FTP根目錄及虛擬用戶映射的系統用戶
為保證其他用戶可以訪問,給予rwxr-xr-x權限
useradd virtual -s /sbin/nologin
mkdir -p /data/ftp/
chmod -Rf 755 /data/ftp
4. 建立支持虛擬用戶的PAM認證文件
mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.back
cat /etc/pam.d/vsftpd
參數db用於指向剛剛生成的vftpuser.db文件,但不要寫后綴
centos7系列:
auth required pam_userdb.so db=/etc/vsftpd/vftpuser
account required pam_userdb.so db=/etc/vsftpd/vftpuser
centos6系列:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser
5. 虛擬用戶訪問權限設置
虛擬用戶的權限默認不能上傳、創建、修改文件
如果希望用戶能夠訪問或管理FTP內的資料,就需要讓FTP程序支持獨立的用戶權限配置文件了
首先,編輯vsftpd.conf中的配置指定用戶獨立的配置文件存放目錄:
user_config_dir=/etc/vsftpd/vusers_dir
創建用戶配置文件存放目錄
mkdir -p /etc/vsftpd/vusers_dir
創建以用戶名命名的配置文件
touch /etc/vsftpd/vusers_dir/hyywnobody
配置用戶權限,常用組合:
- 瀏覽+上傳+下載
#指定該用戶的登陸目錄
local_root=/data/ftp/hyywnobody
anon_umask=022
#yes=禁止瀏覽;no=只讀,下載
anon_world_readable_only=no
#是否開啟寫權限
write_enable=yes
#是否可上傳
anon_upload_enable=yes
#是否可以創建目錄
anon_mkdir_write_enable=yes
#是否可刪除
anon_other_write_enable=yes
- 瀏覽+下載
local_root=/data/ftp/hyywnobody
anon_world_readable_only=no
- 可上傳
local_root=/data/ftp/hyywnobody
write_enable=yes
anon_upload_enable=yes
根據虛擬用戶配置文件中設置的local_root,創建虛擬用戶主目錄並更改權限
mkdir -p /data/ftp/hyywnobody
chown virtual.virtual /data/ftp/hyywnobody
6. 重啟vsftpd服務
systemctl restart vsftpd
4、登錄驗證
略...