CentOS7.4雲伺服器配置ftp伺服器
一、雲伺服器先設定安全組規則
首先要了解FTP工作原理,20,21,1024-65535這些埠必須開啟
FTP工作在TCP/IP模型的第四層上,伺服器與客戶機之間利用TCP的21號埠傳送訊號指令;利用20號埠用於傳送資料;具體工作過程如下:
1.當FTP客戶端發出請求時,系統將動態分配一個埠(如1032)。
2.若FTP伺服器在埠21偵聽到該請求,則在FTP客戶端的埠1032和FTP伺服器的埠21之間建立起一個FTP會話連線。
3.當需要傳輸資料時,FTP客戶端再動態開啟一個連線到FTP伺服器的埠20的第2個埠(如1033),這樣就可在這兩個埠之間進行資料的傳輸。當資料傳輸完畢後,這兩個埠會自動關閉。
4.當FTP客戶端斷開與FTP伺服器的連線時,客戶端上動態分配的埠將自動釋放掉。
二、安裝配置vsftpd
1.下載安裝vsftpd
yum install -yq vsftpd
2.設定開機自啟動
systemctl list-dependencies chkconfig --list|grep vsftpd 檢視開機自啟
systemctl enable vsftpd 同 chkconfig vsftpd on 設定開機自啟
systemctl enable firewalld
systemctl start firewalld 同 service firewalld start 啟動服務
systemctl start vsftpd
systemctl在centos7中必不可缺少的管理工具,它具備service和chkconfig的所有功能;
檢查vsftpd是否開啟:ps -e|grep vsftpd 或者 檢視21埠是否被監聽,netstat -an | grep 21
可以使用netstat -ntpl | grep vsftpd命令檢視到系統現在監聽的vsftpd的埠為 21
3.防火牆設定
放開21埠:firewall-cmd --zone=public --add-port=21/tcp --permanent
永久開放 ftp 服務:firewall-cmd --add-service=ftp --permanent (關閉ftp服務:firewall-cmd --remove-service=ftp --permanent)
在不改變狀態的條件下重新載入防火牆:firewall-cmd --reload
可以使用firewall-cmd --list-all 顯示防火牆應用列表檢視是否設定成功,設定必須在重新載入防火牆:firewall-cmd --reload才會生效
可能用到的命令:
systemctl start firewalld 啟動防火牆服務
firewall-cmd --add-service=ftp 暫時開放ftp服務
firewall-cmd --add-service=ftp --permanent永久開放ftp服務
firewall-cmd --remove-service=ftp --permanent永久關閉ftp服務
systemctl restart firewalld 重啟firewalld服務
firewall-cmd --reload 過載配置檔案
firewall-cmd --query-service ftp檢視服務的啟動狀態
firewall-cmd --list-all 顯示防火牆應用列表
firewall-cmd --add-port=8001/tcp 新增自定義的開放埠
iptables -L -n | grep 21 檢視設定是否生效
firewall-cmd --state 檢測防火牆狀態
4.配置 FTP 許可權
1、瞭解 VSFTP 配置
vsftpd 的配置目錄為 /etc/vsftpd,包含下列的配置檔案:
vsftpd.conf 為主要配置檔案
ftpusers 配置禁止訪問 FTP 伺服器的使用者列表
user_list 配置使用者訪問控制------這裡的使用者預設情況(即在/etc/vsftpd/vsftpd.conf中設定了userlist_deny=YES)下也不能訪問FTP伺服器
2、阻止匿名訪問和切換根目錄
匿名訪問和切換根目錄都會給伺服器帶來安全風險,我們把這兩個功能關閉。編輯 /etc/vsftpd/vsftpd.conf,找到下面兩處配置並修改:
# 禁用匿名使用者 YES 改為NO anonymous_enable=NO
sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" /etc/vsftpd/vsftpd.conf
# 禁止切換根目錄 刪除# chroot_local_user=YES
sed -i "s/#chroot_local_user=YES/chroot_local_user=YES/g" /etc/vsftpd/vsftpd.conf
編輯完成後儲存配置,重新啟動 FTP 服務 service vsftpd restart
其它配置項說明:
anonymous_enable=YES #允許匿名登陸
local_enable=YES #啟動home目錄
write_enable=YES #ftp寫的許可權
local_umask=022
dirmessage_enable=YES #連線列印的訊息
connect_from_port_20=YES #20埠
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=300
accept_timeout=60
connect_timeout=60
ascii_upload_enable=YES #上傳
ascii_download_enable=YES #下載
chroot_local_user=NO #是否限制使用者在主目錄活動
chroot_list_enable=YES #啟動限制使用者的列表
chroot_list_file=/etc/vsftpd/chroot_list #每行一個使用者名稱
allow_writeable_chroot=YES #允許寫
listen=NO
listen_ipv6=YES
pasv_min_port=50000 允許ftp工具訪問的埠起止埠
pasv_max_port=60000
pam_service_name=vsftpd #配置虛擬使用者需要的
userlist_enable=NO #配置yes之後,user_list的使用者不能訪問ftp
tcp_wrappers=YES
chroot_list 檔案需要自己建,內容一行一個使用者名稱字
anon_root=/data/ftp/public #修改匿名使用者的訪問路徑
3 建立 FTP 使用者
新建一個不能登入系統使用者. 只用來登入ftp服務 ,這裡如果沒設定使用者目錄。預設是在home下:
useradd -g root -d /home/ftpuser -s /sbin/nologin ftpuser #-s /sbin/nologin 禁止使用者登陸shell,只能登陸FTP伺服器
passwd ftpuser #設定密碼
chown -R ftpuser /home/ftpuser #遞迴更改目錄和檔案的檔案主
setsebool -P ftpd_full_access on #更改檔案中的屬性值
sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" /etc/vsftpd/vsftpd.conf #替換操作,禁止匿名登陸
禁止使用者在主目錄活動,可選項,更改以下三個屬性並去掉前面的#
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list #需要建立該檔案
另外,從2.3.5之後,vsftpd增強了安全檢查,如果使用者被限定在了其主目錄下,則該使用者的主目錄不能再具有寫許可權了!如果檢查發現還有寫許可權,就會報該錯誤。
要修復這個錯誤,可以用命令chmod a-w /home/user去除使用者主目錄的寫許可權,注意把目錄替換成你自己的。或者你可以在vsftpd的配置檔案中增加下列項:
allow_writeable_chroot=YES
禁止使用者在主目錄活動時可能需要使用reboot重啟伺服器
# 重啟ftp伺服器
systemctl restart vsftpd
可能用到:
設定使用者的主目錄:usermod -d /data/ftp ftpuser
徹底刪除使用者:#userdel -rf Fuser //強制刪除使用者及相關目錄檔案
變更使用者屬性:#usermod -s /sbin/nologinftpuser (/bin/bash:可以登入shell,/bin/false:禁止登入shell )
檢視當前服務:#netstat -lntp
三、使用root使用者登陸
在設定安全組規則後可直接使用root賬號sftp協議登陸,但不能使用ftp協議登陸,需要在ftpusers和user_list中允許root才能登陸ftp
四、連線軟體
1.xftp
2.FileZilla
文章為個人學習筆記與總結,會不斷修改,如若有不對的地方,請留言指出!