本文環境:centos7,IP=192.168.1.11
1.安裝vsftpd和默認配置啟動
1.1 安裝vsftpd
yum install -y vsftpd
1.2 啟動vsftpd
systemctl start vsftpd
查看vsftpd狀態和運行
systemctl status vsftpd
或者通過端口占用查看
netstat -nltp | grep 21
2.配置vsftpd
2.1 配置路徑
vsftpd 的配置目錄為 /etc/vsftpd,包含下列的配置文件:
- vsftpd.conf 為主要配置文件
- ftpusers 配置禁止訪問 FTP 服務器的用戶列表
- user_list 配置用戶訪問控制
以下需要修改vsftpd.conf,所以都是基於使用
vim /etc/vsftpd/vsftpd.conf
2.2 配置端口
2.2.1 添加要更改的監聽端口,可以在最下面添加配置
#remote_charset=CP1251 # # Enable this options if you have double "я" # #double_377=0
listen_port=221
保存退出
2.2.2 修改系統端口管理的services
vim /etc/services
將默認的21端口更改成自己的端口
# 21 is registered to ftp, but also used by fsp ftp 221/tcp ftp 221/udp fsp fspd
2.3 禁用匿名用戶
# 禁用匿名用戶將 YES 改為 NO
anonymous_enable=NO
2.4 禁止用戶切換目錄
# 禁止切換根目錄,解除注釋
chroot_local_user=YES
3 重新啟動vsftpd
systemctl restart vsftpd
注意:可能很多人和我一樣,遇到一個無法正常啟動的原因,如下解決。
a. 粗暴關閉防火牆或者放開端口
systemctl stop Firewalld
b. 關閉Linux新安全子系統SELinux(Security-Enhanced Linux)
查看SELinux運行狀態
sestatus -v
SELinux status: enabled就是開啟的;disabled就是關閉
開啟的時候我們還需要看它的模式(Current mode),它有三種模式
enforcing:強制模式,代表 SELinux 運作中,且已經正確的開始限制 domain/type 了;
permissive:寬容模式:代表 SELinux 運作中,不過僅會有警告訊息並不會實際限制 domain/type 的存取;
disabled:關閉,SELinux 並沒有實際運作。
所以我們更改模式即可解決:
setenforce 0
優點:一條語句及時生效;
缺點:系統重起后恢復為enforcing模式。(可以自行搜索開機不恢復的方式,修改/etc/selinux/config文件,需要重啟機器,此處就不羅列了)
此時再重啟vsftpd,應該運行成功。
4. 添加FTP用戶和管理
4.1 創建一個用戶 ftpuser
useradd ftpuser
為用戶 ftpuser 設置密碼
echo "password" | passwd ftpuser --stdin
4.2 限制ftpuser僅有ftp訪問權限
限制用戶 ftpuser
只能通過 FTP 訪問服務器,而不能直接登錄服務器:
usermod -s /sbin/nologin ftpuser
4.3 為ftpuser分配主目錄
為用戶 ftpuser
創建主目錄並約定:
/data/ftp
為主目錄, 該目錄不可上傳文件 /data/ftp/pub
文件只能上傳到該目錄下
創建相關的目錄
mkdir -p /data/ftp/pub
4.4 設置訪問權限
chmod a-w /data/ftp && chmod 777 -R /data/ftp/pub
設置用戶主目錄
usermod -d /data/ftp ftpuser
5 訪問ftp,驗證ftp
可以通過資源管理器或者瀏覽器訪問:
ftp://ftpuser:password@192.168.1.11/pub
5.1 常見問題解決
很多時候服務正常啟動了,但是死活連不上,需要查看防火牆狀態,是否是防火牆阻礙了
systemctl status Firewalld
好,那我們停掉防火牆
systemctl stop Firewalld
可能出現了好轉,服務能訪問了,但是咱們想防火牆不能隨便關,是否可以一起存在呢,開放端口可以嗎?
↓注意:先打開防火牆,然后執行一下命令,每次cmd更改,都需要reload規則。
firewall-cmd --zone=public --add-port=21/tcp --permanent firewall-cmd --zone=public --add-port=21/udp --permanent
firewall-cmd --reload
干脆來一個全的,21的端口開放。可能有人還會遇到我一樣的問題,不行。。。,是不是防火牆會攔住服務呢?
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --reload
終於,我這的問題解決了。
總結:本人遇到的問題,從網站上羅列下來的隨筆。