【E20200102-1】centos 7 下vsftp的安裝和配置
一、準備工作
1.1、服務器準備
- 操作系統:centos 7.x
- 關閉防火墻(firewall/iptables)和SELinux
參見筆記《【E20200101-1】Centos 7.x 關閉防火墻(firewall)和SELinux》
- 更新服務器(不含內核)
# yum --exclude=kernel* update
- 安裝好用的文本工具(nano)
# yum -y install nano
1.2、理解“Port模式(主動模式)和Pasv模式(被動模式)”的概念
Port模式(主動模式):
當FTP服務器配置的是Port模式:那么【客戶端C】會在登入【服務端S】后發送一條命令告訴【服務端S】(“客戶端C”在本地打開了一個端口N在等著“服務端S”進行數據連接),當【服務端S】收到【客戶端C】發來的信息后 就會向【客戶端C】打開的端口N進行連接,并通過端口N提供數據服務。
Pasv模式(被動模式):
當FTP服務器配置的是Pasv模式,那么【客戶端C】會在登入【服務端S】后【服務端S】會發信息給【客戶端C】(“服務端S”在服務器上打開了一個端口M在等著“客戶端C”進行數據連接),當【客戶端C】收到【服務端S】發來的信息后,就會向【服務端S】打開的端口M進行連接,并通過端口N提供數據服務。
二、安裝vsftp
2.1、yum安裝vsftp
yum -y install vsftpd
2.2、啟動服務
systemctl start vsftpd.service
三、配置vsftp
3.1、主要配置文件默認地址
vsftp主要配置文件默認地址(可以通過vsftpd另外指定)
/etc/vsftpd/vsftpd.conf
其他常用配置文件地址可以在vsftpd.conf配置中指定,以下為vsftpd: version 3.0.2默認配置信息
#定義不能跳出用戶主目錄的文件
chroot_list_file=/etc/vsftpd/chroot_list
#定義限制/允許用戶登錄的文件
userlist_file=/etc/vsftpd/user_list
#定義登錄信息文件的位置
banner_file=/etc/vsftpd/banner
#禁止使用的匿名用戶登陸時作為密碼的電子郵件地址
banned_email_file=/etc/banned_emails
#日志文件位置
xferlog_file=/var/log/vsftpd.log
#目錄信息文件
message_file=.message
3.2、修改vsftpd.conf配置文件
配置文件路徑
/etc/vsftpd/vsftpd.conf
備份一份配置文件
# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
使用nano文本編輯器修改配置文件
# nano /etc/vsftpd/vsftpd.conf
使用一下內容替換原有配置文件
############允許本地用戶登入,拒絕匿名登入#####################
#控制是否允許匿名用戶登入,YES 為允許匿名登入,NO 為不允許。默認值為YES。
#anonymous_enable=YES/NO(YES)
anonymous_enable=NO
#控制是否允許本地用戶登入,YES 為允許本地用戶登入,NO為不允許;
#local_enable=YES/NO(YES)默認值為YES;
local_enable=YES
#設置本地用戶登入者新增或上傳檔案時的 umask (匿名用戶的掩碼)值;
#如umask是022,這時創建一個權限為666的文件,文件的實際權限為666-022=644
#默認值為077 對應新建檔案的對應權限為700;
local_umask=022
############設置增、刪、改、查權限###################
#是否允許登陸用戶有寫權限。屬于全局設置,默認值為YES;
#write_enable=YES/NO(YES)默認值為YES;
write_enable=YES
#是否將所有用戶限制在主目錄,YES為啟用 NO禁用;
#在安裝vsftpd后不做配置的話,ftp用戶是可以向上切換到要目錄之外的;
#chroot_local_user=YES/NO (NO) 默認值為NO;
chroot_local_user=YES
##用于指定用戶列表文件中的用戶不允許切換到上級目錄;
#chroot_list_enable=YES/NO (NO) 默認值為NO;
chroot_list_enable=YES
#是否限制在“主目錄”下的用戶名單文件地址;
#當chroot_list_enable=YES(默認值為NO)時生效;
#至于是“限制名單”還是“排除名單”,這取決于chroot_local_user的值;
#當chroot_local_user=YES時,該文件里的用戶作為“例外”不做限制;
#當chroot_local_user=NO時,該文件里的用戶作為“例外”受到限制;
chroot_list_file=/etc/vsftpd/chroot_list
#從2.3.5之后,vsftpd增強了安全檢查;
#如果用戶被限定在了其主目錄下,則該用戶的主目錄不能再具有寫權限了!
#如果檢查發現還有寫權限,就會報該錯誤。
#要修復這個錯誤,可以用命令chmod a-w /home/user去除用戶主目錄的寫權限;
#注意把目錄替換成你自己的。或者你可以在vsftpd的配置文件中增加下列項
allow_writeable_chroot=YES
#############虛擬用戶配置:配置成使用本地用戶相同的權限###############
#默認Vsftpd.conf中不包含這些設定項目,需要自己手動添加配置
#虛擬用戶使用PAM認證方式。
#設置PAM使用的名稱,默認值為/etc/pam.d/vsftpd。
pam_service_name=vsftpd
#設定啟用虛擬用戶功能;
#guest_enable= YES/NO(NO)默認值為NO。
guest_enable=YES
#這里用來映射虛擬用戶。默認值為ftp。
#指定虛擬用戶映射的宿主用戶
#也可以指定虛擬用戶的宿主用戶為apache/nginx運行賬戶,可以避免很多權限設置問題
guest_username=nginx
#當該參數激活(YES)時,虛擬用戶使用與本地用戶相同的權限;
#當此參數關閉(NO)時,虛擬用戶使用與匿名用戶相同的權限。
#virtual_use_local_privs=YES/NO(NO)默認情況下此參數是關閉的(NO)。
virtual_use_local_privs=YES
#設定虛擬用戶個人Vsftp的配置文件存放路徑;
#也就是說,這個被指定的目錄里,將存放每個Vsftp虛擬用戶個性的配置文件;
#需要注意的地方就是這些配置文件名必須和虛擬用戶名相同;
user_config_dir=/etc/vsftpd/vuser_conf
############配置日志#############
#開啟日記功能
xferlog_enable=YES
#使用標準格式
xferlog_std_format=YES
#當xferlog_std_format關閉且本選項開啟時,記錄所有ftp請求和回復,當調試比較有用
log_ftp_protocol=NO
###############端口與主被動配置:配置成Pasv模式(被動模式)##########
#ftp服務監聽端口
listen_port=21
#設置開啟Pasv模式(被動模式)
#pasv_enable=YES
#設置Pasv模式(被動模式)數據連接端口范圍從 10060~10065
pasv_min_port=10060
pasv_max_port=10065
###############時間相關配置##################
#顯示目錄清單時是用本地時間還是GMT時間,可以通過mdtm命令來達到一樣的效果
use_localtime=YES
#Pasv模式(被動模式)請求超時
accept_timeout=5
#Port模式(主動模式)連接超時
connect_timeout=10
#空閑等待時長
idle_session_timeout=120
#數據連接超時時間
data_connection_timeout=120
3.3、創建虛擬賬戶映射的宿主用戶
這里要注意宿主用戶對于ftp主目錄的屬主權限和讀寫權限
//創建nginx用戶并添加到ftp組
# useradd -g ftp -M -d /data/vsftpd -s /sbin/nologin nginx
//設置用戶 nginx 的密碼
# passwd nginx
//創建ftp主目錄
# mkdir /data/vsftpd
//把主目錄 /data/vsftpd 的所有權給nginx賬號和ftp組
# chown -R nginx:ftp /data/vsftpd
3.4、創建虛擬用戶清單文件
使用nano文本編輯器創建虛擬用戶文件
# nano /etc/vsftpd/vuser_passwd
# 編輯虛擬用戶名單文件內容;
# 第奇數行為賬號,偶數行為密碼;
#注意:不能使用系統保留的用戶名,例如root
ftp1
12345678
ftp2
12345678
3.5、生成虛擬用戶數據文件
//使用db_load命令生成vsftpd的認證文件,將用戶信息文件轉換為數據庫并使用hash加密:
# db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
//修改數據庫文件權限
# chmod 600 /etc/vsftpd/vuser_passwd.db
數據庫生成后最好清空該文本文件,并在安全的地方記錄用戶名和密碼;
如果用戶賬號有所變化,需要重新生成虛擬用戶數據文件
3.6、為各虛擬用戶建立獨立的配置文件
這里以使用nano文檔編輯工具為虛擬用戶ftp1建立獨立的配置文件為例
//建立虛擬用戶個人vsftp的配置文件目錄,路徑需要vsftpd.conf中配置的路徑一致
# mkdir /etc/vsftpd/vuser_conf
//創建并編輯虛擬用戶ftp1的配置文件
# nano /etc/vsftpd/vuser_conf/ftp1
虛擬用戶ftp1的配置文件內容如下
#ftp1虛擬用戶獨立配置文件
#登入時所在目錄
local_root=/home/vsftpd/ftp1 用戶登入時,
#是否允許登陸用戶有寫權限。屬于全局設置,默認值為YES;
#這里可以直接使用全局配置而無需獨立配置,除非是和全局配置不一樣
#write_enable=YES/NO(YES)默認值為YES;
#write_enable=YES
########### 訪問權限配置#########################
#只有當vsftpd.conf中virtual_use_local_privs=NO 時以下配置生效
#virtual_use_local_privs配置說明如下
#當該參數激活(YES)時,虛擬用戶使用與本地用戶相同的權限;
#當此參數關閉(NO)時,虛擬用戶使用與匿名用戶相同的權限。
#virtual_use_local_privs=YES/NO(NO)默認情況下此參數是關閉的(NO)。
################################################
# 是否只讀,不能下載
# anon_world_readable_only=(YES/NO)
anon_world_readable_only=NO
#如果設為YES,則允許匿名登入者有上傳文件(非目錄)的權限;
#只有全局的write_enable=YES(默認YES)時,此項才有效;
#當然,匿名用戶必須要有對上層目錄的寫入權。默認值為NO;
anon_upload_enable=YES
#如果設為YES,則允許匿名登入者有新增目錄的權限
#只有全局的write_enable=YES(默認YES)時,此項才有效;
#當然,匿名用戶必須要有對上層目錄的寫入權。
#anon_mkdir_write_enable=YES/NO(NO)默認值為NO。
anon_mkdir_write_enable=YES
#如果設為YES,則允許匿名登入者擁有上傳或者建立目錄之外的權限,譬如刪除或者重命名。
#如果anon_upload_enable=NO,則匿名用戶不能上傳文件,但可以刪除或者重命名已經存在的文件;
#如果anon_mkdir_write_enable=NO,則匿名用戶不能上傳或者新建文件夾,但可以刪除或者重命名已經存在的文件夾。
#anon_other_write_enable=YES/NO(NO)默認值為NO。
anon_other_write_enable=YES
3.7、創建用戶目錄
根據擬用戶獨立配置文件中配置的路徑建立用戶目錄
# mkdir -p /home/vsftpd/ftp1
3.8、生成虛擬用戶的PAM文件(重要)
這里的pam文件路徑是由vsftpd.conf中的【pam_service_name=vsftpd】配置
默認Vsftpd.conf中不包含這些設定項目,需要自己手動添加配置
如果沒設置PAM使用的名稱,默認值為/etc/pam.d/vsftpd。
//進入pam.d目錄
# cd /etc/pam.d/
//備份vsftpd文件
# cp vsftpd vsftpd.bak
修改vsftpd文件內容
- 加入第三和第四行;
- 下面的全部注釋掉;
#%PAM-1.0
#注意下面是64位操作系統,如果是32位的話lib64需要改成lib
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
#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
至此vsftp已經安裝并配置好了 nice~
四、服務運維
//重啟服務
# systemctl restart vsftpd.service
//啟動服務
# systemctl start vsftpd.service
//服務狀態查看
# systemctl status vsftpd.service
Eword 原創學習筆記
文檔編號:E20200102-1
文檔標簽:Centos、vsftp、ftp
轉載請注明出處

浙公網安備 33010602011771號