1.安裝vsftp
在安裝前查看是否已安裝vsftpd
# 查看是否已安裝 方法一
[root@localhost ~]# rpm -q vsftpd
vsftpd-3.0.2-21.el7.x86_64
# 查看是否已安裝 方法二
[root@localhost ~]# vsftpd -v
vsftpd: version 3.0.2
# 安裝 vsftpd
[root@localhost ~]# yum -y install vsftpd
查看位置
[root@localhost ~]# whereis vsftpd
vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz
啓動vsftpd服務
systemctl start vsftpd.service
關閉firewall和SELinux
setenforce 0 # 設置SELinux 成爲permissive模式 (關閉SELinux)
setenforce 1 # 設置SELinux 成爲enforcing模式 (開啓SELinux)
# 或者修改配置
vi /etc/selinux/config
# SELINUX=enforcing
# 註釋掉
# SELINUXTYPE=targeted
# 註釋掉
SELINUX=disabled
# 增加
:wq! #保存退出
setenforce 0
或者設置SELinux
getsebool -a | grep ftp
setsebool -P ftpd_full_access on
systemctl stop firewalld.service
#停止firewall
systemctl disable firewalld.service
#禁止firewall開機啓動
如果你不願意關閉防火牆,需要防火牆添加FTP服務。
firewall-cmd --permanent --zone=public --add-service=ftp firewall-cmd --reload
或者
firewall-cmd --add-port=21/tcp --permanent
firewall-cmd --reload
firewall-cmd --add-port=10060-10090/tcp --permanent
firewall-cmd --reload
修改配置文件
配置文件/etc/vsftpd/vsftpd.conf
# 不允許匿名訪問,禁用匿名登錄
anonymous_enable=NO
# 啓用限定用戶在其主目錄下
chroot_local_user=YES
# 使用本地時(自行添加)
use_localtime=YES
# 允許使用本地帳戶進行FTP用戶登錄驗證
chroot_list_enable=YES
local_enable=YES
# 如果啓用了限定用戶在其主目錄下需要添加這個配置
allow_writeable_chroot=YES
# 啓用上傳和下載的日誌功能,默認開啓。
xferlog_enable=YES
# 設置本地用戶默認文件掩碼022
local_umask=022
# 使用本地時(自行添加)
use_localtime=YES
# 啓用限定用戶在其主目錄下
listen_port=21
chroot_local_user=YES
idle_session_timeout=300
# 數據連接超時時間
data_connection_timeout=120
# 設定啓用虛擬用戶功能
guest_enable=YES
# 指定虛擬用戶的宿主用戶
#guest_username=wiseasy
# 虛擬用戶配置文件目錄
user_config_dir=/etc/vsftpd/vconf
# NO時,虛擬用戶和匿名用戶有相同的權限,默認是NO
virtual_use_local_privs=YES
# 被動模式最小端口號10060
pasv_min_port=6000
# 被動模式最大端口號10090
pasv_max_port=7000
pasv_promiscuous=YES
#關閉PASV模式的安全檢查
pasv_enable=YES
##主動模式
accept_timeout=5
connect_timeout=1
pam_service_name=vsftpd
#禁止反向域名解析,若是沒有添加這個參數可能會出現用戶登陸較慢,或則客戶鏈接不上ftp的現象
#reverse_lookup_enable=NO
#設定虛擬用戶的權限符合他們的宿主用戶
#virtual_use_local_privs=YES
write_enable=YES
匿名登錄
安裝完默認情況下是開啓匿名登錄的,對應的是 /var/ftp
目錄,這時只要服務啓動了,就可以直接連上FTP了。默認用戶名是ftp
,密碼是空的。如果你在配置裏面配置了anonymous_enable=NO
,匿名就無法登錄。
$ ftp 192.168.188.114
Connected to 192.168.188.114.
220 (vsFTPd 3.0.2)
Name (192.168.188.114:kennywang): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||47867|).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 12 Jan 18 06:31 README.md
drwxr-xr-x 2 0 0 6 Nov 05 19:43 pub
226 Directory send OK.
創建宿主用戶
新建系統用戶ftpuser,用戶目錄爲/home/vsftpd
, 用戶登錄終端設爲/bin/false(即使之不能登錄系統)
# 方法一
# 創建用戶 ftpuser 指定 `/home/vsftpd` 目錄
useradd -g root -M -d /home/vsftpd -s /sbin/nologin ftpuser
# 設置用戶 ftpuser 的密碼
passwd ftpuser
# 把 /home/vsftpd 的所有權給ftpuser.root
chown -R ftpuser.root /home/vsftpd
# 方法二
useradd ftpuser -d /home/vsftpd -s /bin/false
chown ftpuser:ftpuser /home/vsftpd -R
# 如果虛擬用戶的宿主用戶爲www,需要這樣設置
# www目錄是你應用的目錄
chown www:www /home/www -R
刪除用戶 userdel ftpuser
建立虛擬用戶文件
touch /etc/vsftpd/vuser_passwd
# 編輯虛擬用戶名單文件:(
# 第一行賬號,第二行密碼,注意:不能使用root做用戶名,系統保留)
vi /etc/vsftpd/vuser_passwd
# 編輯內容,下面是 vuser_passwd 內容
wcj
123456
hss
123456
#保存退出
生成虛擬用戶數據文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
chmod 600 /etc/vsftpd/vuser_passwd.db
創建用戶配置
mkdir /etc/vsftpd/vuser_conf # 建立虛擬用戶個人vsftp的配置文件
cd /etc/vsftpd/vuser_conf # 進入目錄
touch hss wcj
每一個文件配置文件都差不多,只是參數local_root
不一樣。
local_root=/home/vsftpd/hss # 用戶 hss 配置目錄,這個地方不一樣
write_enable=YES # 允許本地用戶對FTP服務器文件具有寫權限
anon_world_readable_only=NO
anon_upload_enable=YES # 允許匿名用戶上傳文件(須將全局的write_enable=YES,默認YES)
anon_mkdir_write_enable=YES # 允許匿名用戶創建目錄
anon_other_write_enable=YES # 允許匿名用戶刪除和重命名權限(自行添加)
創建用戶目錄
每個用戶目錄文件夾是有root用戶創建的,也就是上面local_root
配置目錄,其權限應設置爲755。因爲權限的問題在該文件夾內無法直接上傳文件。而如果設置爲777則無法訪問,這是由於vsftpd的安全性設置。解決上傳問題的方法是在local_root文件夾內新建一個upload的文件夾,權限設置爲777,可將文件上傳到該文件夾。
mkdir -p /home/vsftpd/hss # 每個用戶對於一個目錄,創建兩個目錄“hss”、“wcj”
# 下面是目錄結構
/home/vsftpd
├── hss
│ ├── filename.md
│ └── upload
└── wcj
└── filename.md
# 賦予其權限
chmod -R 777 /var/vsftpd/hss/upload/
# 在/var/ftp下新建一個目錄來實現匿名用戶上傳
mkdir /var/ftp/upload
vsftpd中幾種用戶的區分:
本地用戶:用戶在FTP服務器擁有賬號,且該賬號爲本地用戶的賬號,可以通過自己的賬號和口令進行授權登錄,登錄目錄爲自己的home目錄$HOME
虛擬用戶:用戶在FTP服務器上擁有賬號,但該賬號只能用於文件傳輸服務。登錄目錄爲某一特定的目錄,通常可以上傳和下載
匿名用戶:用戶在FTP服務器上沒有賬號,登錄目錄爲/var/ftp
最後重啓vsftpd服務器
systemctl restart vsftpd.service
systemctl restart vsftpd.service # 重啓服務
systemctl start vsftpd.service # 啓動服務
systemctl status vsftpd.service # 服務狀態查看