Rocky Linux 9 安裝FTP服務器搭建實戰:一文學會,高效文件傳輸!
大家好,我是星哥,之前的文章中介紹了在Rocky Linux 9系統中安裝LNMP。 文件傳輸的效率和安全性至關重要。FTP(File Transfer Protocol)作為一種經典的文件傳輸協議,在許多場景下依然扮演著不可或缺的角色。
本文將詳細介紹如何在Rocky Linux 9上安裝和配置FTP服務器,幫助您快速搭建一個穩定高效的文件傳輸平臺。
![]()
快速安裝
功能:Rocky Linux 9系統中源碼包安裝 Vsftpd 的shell腳本
端口:62920
FTP用戶: www
FTP日志存放路徑: /data/wwwroot/ftp_log/
登錄用戶名和密碼: yxkj_web Password123 【請修改密碼】
FTP配置文件:/data/conf/vsftpd/vsftpd.conf
被動模式端口范圍: 9000-9045
# 使用: # gitee: # wget https://gitee.com/funet8/Rocky-Linux-Shell/raw/main/shell/Rocky_Linux_9_Install_Vsftpd.sh # sh Rocky_Linux_9_Install_Vsftpd.sh # github: # wget https://raw.githubusercontent.com/funet8/Rocky-Linux-Shell/refs/heads/main/shell/Rocky_Linux_9_Install_Vsftpd.sh # sh Rocky_Linux_9_Install_Vsftpd.sh1.新建用戶和用戶組groupadd www useradd -g www www2.新建目錄mkdir -p /data/wwwroot/ftp chown www:www -R /data/wwwroot/ftp chown www:www -R /data/wwwroot/web/ mkdir -p /data/conf/vsftpd/ mkdir -p /data/wwwroot/ftp_log/3.安裝vsftpdnf clean all dnf makecache # 安裝 vsftpd dnf install -y vsftpd安裝完成后檢查版本:
vsftpd -version4.修改vsftp主配置文件 關鍵配置項說明配置項
默認值
修改后值
anonymous_enable
YES
NO
禁用匿名登錄(安全第一,避免未授權訪問)
local_enable
YES
YES
允許本地用戶登錄
write_enable
YES
YES
允許用戶寫入文件(上傳/創建目錄)
chroot_local_user
NO
YES
限制用戶只能訪問自己的主目錄(防止越權訪問系統文件)
allow_writeable_chroot
YES
解決用戶主目錄寫權限沖突(必須添加,否則登錄失敗)
配置FTP配置文件
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak cat > /data/conf/vsftpd/vsftpd.conf << EOF #ftp時間和系統同步,如果啟動有錯誤,請注銷 use_localtime=NO ,解決客戶端登錄緩慢問題!重要!默認vsftpd開啟了DNS反向解析!這里需要關閉,如果啟動有錯誤,請注銷! reverse_lookup_enable=NO #默認無此行,ftp端口為21,添加listen_port=2222把默認端口修改為2222,注意:防火墻同時要開啟2222端口 listen_port=62920 #禁止匿名用戶 anonymous_enable=NO #設定本地用戶可以訪問。注意:主要是為虛擬宿主用戶,如果該項目設定為NO那么所有虛擬用戶將無法訪問 local_enable=YES #全局設置,是否容許寫入(無論是匿名用戶還是本地用戶,若要啟用上傳權限的話,就要開啟他) write_enable=YES #創建或上傳后文件的權限掩碼,文件的權限是644 local_umask=022 #禁止匿名用戶上傳 anon_upload_enable=NO #禁止匿名用戶建立目錄 anon_mkdir_write_enable=NO #設定開啟目錄標語功能,進入目錄時可以顯示一些設定的信息,可以通過message_file=.message來設置 dirmessage_enable=YES #設定開啟日志記錄功能 xferlog_enable=YES #主動連接的端口號 connect_from_port_20=YES #設定禁止上傳文件更改宿主 chown_uploads=NO #設定Vsftpd的服務日志保存路徑。注意,該文件默認不存在。必須要手動touch出來,并且由于這里更改了Vsftpd的服務宿主用戶為手動建立的Vsftpd。必須注意給與該用戶對日志的寫入權限,否則服務將啟動失敗 xferlog_file=/data/wwwroot/ftp_log//vsftpd_xferlog.log #格式化日志格式,使用標準格式 xferlog_std_format=YES # 如果啟用該選項,將生成兩個相似的日志文件,默認在 /var/log/xferlog 和 /var/log/vsftpd.log 目錄下。前者是 wu-ftpd 類型的傳輸日志,可以利用標準日志工具對其進行分析;后者是Vsftpd類型的日志。 dual_log_enable=YES vsftpd_log_file=/data/wwwroot/ftp_log//vsftpd.log #設定支撐Vsftpd服務的宿主用戶為手動建立的Vsftpd用戶。注意,一旦做出更改宿主用戶后,必須注意一起與該服務相關的讀寫文件的讀寫賦權問題。比如日志文件就必須給與該用戶寫入權限等 nopriv_user=vsftpd #設定支持異步傳輸功能 async_abor_enable=YES #設定支持ASCII模式的上傳 ascii_upload_enable=YES #設定支持ASCII模式的下載 ascii_download_enable=YES #設定Vsftpd的登陸歡迎語 ftpd_banner=Welcome to FTP service #禁止本地用戶登出自己的FTP主目錄(NO表示禁止登出,YES表示允許登出) chroot_local_user=NO #禁止虛擬用戶登出自己的FTP主目錄,即限定在自己的目錄內,不讓他出去,就比如如果設置成NO,那么當你登陸到ftp的時候,可以訪問服務器的其他一些有權限目錄。設置為YES后,即鎖定你的目錄了 chroot_list_enable=YES #文件中的用戶被禁錮在自己的宿主目錄中。/etc/vsftp/chroot_list本身是不存在的,這要建立vim /etc/vsftp/chroot_list,然后將帳戶輸入一行一個,保存就可以了 chroot_list_file=/etc/vsftpd/chroot_list #設為YES時,以standalone方式來啟動,否則以超級進程的方式啟動。順便展開說明一下,所謂StandAlone模式就是該服務擁有自己的守護進程支持,在ps -A命令下我們將可用看到vsftpd的守護進程名。如果不想工作在StandAlone模式下,則可以選擇SuperDaemon模式,在該模式下vsftpd將沒有自己的守護進程,而是由超級守護進程Xinetd全權代理,與此同時,Vsftp服務的許多功能將得不到實現。 listen=YES #設定PAM服務下Vsftpd的驗證配置文件名。因此,PAM驗證將參考/etc/pam.d/下的vsftpd文件配置 pam_service_name=vsftpd #在/etc/vsftpd/user_list中的用戶將不得使用FTP,設為YES的時候,如果一個用戶名是在userlist_file參數指定的文件中,那么在要求他們輸入密碼之前,會直接拒絕他們登陸 userlist_enable=YES #設為YES時,ftp服務器將使用tcp_wrappers作為主機訪問控制方式,支持 TCP Wrappers 的防火墻機制 tcp_wrappers=NO #設定空閑連接超時時間,這里也可以不設置,將具體數值留給每個具體用戶具體指定,當然如果不指定的話,還是使用系統的默認值600,單位秒。 idle_session_timeout=300 #空閑1秒后服務器斷開 data_connection_timeout=1 ######################################################### # ssl設置 # ######################################################### ssl_enable=NO allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO rsa_cert_file=/etc/vsftpd/vsftpd.pem ssl_ciphers=HIGH # 是否啟用隱式ssl功能,不建議開啟 implicit_ssl=YES # 隱式ftp端口設置,如果不設置,默認還是21,但是當客戶端以隱式ssl連接時,默認會使用990端口,導致連接失敗!! listen_port=62920 # 輸出ssl相關的日志信息 #debug_ssl=YES ######################################################### #以下這些是關于Vsftpd虛擬用戶支持的重要配置項目。 #默認Vsftpd.conf中不包含這些設定項目,需要自己手動添加配置 ######################################################### #設定啟用虛擬用戶功能 guest_enable=YES #指定虛擬用戶的宿主用戶(這個是我們后面要新建的用戶),系統默認是ftp用戶,這里是全局設置,在虛擬用戶的配置文件中也可以單獨指定來覆蓋全局設置的用戶 guest_username=$FTP_USER #設定虛擬用戶個人Vsftp的配置文件存放路徑。也就是說,這個被指定的目錄里,將存放每個Vsftp虛擬用戶個性的配置文件,一個需要注意的 #地方就是這些配置文件名必須和虛擬用戶名相同。 #比如說vsftpd.conf的配置文件,你復制到這個目錄下,你要mv一下,配置成虛擬用戶的名稱 user_config_dir=/data/conf/vsftpd/vconf #當該參數激活(YES)時,虛擬用戶使用與本地用戶相同的權限。 #當此參數關閉(NO)時,虛擬用戶使用與匿名用戶相同的權限。默認情況下此參數是關閉的(NO)。 virtual_use_local_privs=YES #設置被動模式的端口范圍 pasv_min_port=9000 #設置被動模式的端口范圍 pasv_max_port=9045 #保持5秒 accept_timeout=5 #1秒后重新連接 connect_timeout=1 #解決vsftpd: refusing to run with writable root inside chroot ()錯誤 allow_writeable_chroot=YES EOF建立Vsftpd配置文件軟鏈接
ln -s /data/conf/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf用openssl生成vsftpd的證書
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout /etc/vsftpd/vsftpd.pem \ -out /etc/vsftpd/vsftpd.pem \ -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=MyCompany/OU=IT/CN=ftp.yourdomain.com"5.虛擬用戶配置文件建立虛擬用戶名單文件
# 建立虛擬用戶名單文件 touch /etc/vsftpd/virtusers # 用echo命令輸出加引號的字符串時,將字符串原樣輸出; # 用echo命令輸出不加引號的字符串時,將字符串中的各個單詞作為字符串輸出,各字符串之間用一個空格分割。 echo "yxkj_web Password123" > /etc/vsftpd/virtusers生成虛擬用戶數據文件:
dnf install -y libdb-utils db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db # 設定PAM驗證文件,并指定對虛擬用戶數據庫文件進行讀取 chmod 600 /etc/vsftpd/virtusers.db # 在/etc/pam.d/vsftpd的文件頭部加入以下信息(在后面加入無效,或是將vsftpd原內容全部注釋掉,在文件末尾加) cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak # 注意:如果系統為64為,則下面的lib改為lib64,否則配置失敗 # 注釋文件 sed -ir 's/^/#/g' /etc/pam.d/vsftpd echo'auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers' >> /etc/pam.d/vsftpd # 添加默認支撐Vsftpd服務的宿主用戶,-M:不創建家目錄 useradd vsftpd -M -s /bin/false # 創建保存虛擬用戶配置文件的目錄 mkdir -p /data/conf/vsftpd/vconf cd /data/conf/vsftpd/vconf # 這里創建三個虛擬用戶配置文件 touch yxkj_web # 創建要將哪些用戶固定在家目錄的配置文件 touch /etc/vsftpd/chroot_list編輯用戶yxkj_web配置文件,其他的跟這個配置文件類似
cd /data/conf/vsftpd/vconf/ for VUSER in yxkj_web ;do cat > $VUSER << EOF #啟用虛擬用戶,centos下yes必須為小寫字母 #guest_enable=yes #通過此項可以配置不同的虛擬用戶屬于不同宿主用戶,默認則用全局配置中的設置 #映射本地虛擬用戶 guest_username=www #如果當時創建用戶的時候鎖定一個目錄了,那就可以不寫 local_root=/data/wwwroot/ftp/$VUSER #用戶會話空閑后10分鐘 idle_session_timeout=600 #將數據連接空閑2分鐘斷 data_connection_timeout=120 #最大客戶端連接數 max_clients=10 #每個ip最大連接數 max_per_ip=5 #限制上傳速率,0為無限制 local_max_rate=0 #設置一個文件名或者目錄名式樣(注意:只能是文件名或是目錄名,不支持路徑模式)以阻止在任何情況下訪問它們。并不是隱藏它們,而是拒絕任何試圖對它們進行的操作(下載,改變目錄層,和其他有影響的操作)。 deny_file={*.mov,.private} #設置了一個文件名或者目錄名(注意:只能是文件名或是目錄名,不支持路徑模式)列表,這個列表內的資源會被隱藏,不管是否有隱藏屬性。但如果用戶知道了它的存在,將能夠對它進行完全的訪問。 hide_file={.hidden,hide*} EOF # 創建測試用戶ftp目錄 mkdir -p /data/wwwroot/ftp/$VUSER # 將用戶固定在家目錄 echo $VUSER >> /etc/vsftpd/chroot_list done chown www:www -R /data/wwwroot/ftp6.開機啟動(掛載)systemctl enable rc-local &>/dev/null if [ $? -ne 0 ]; then echo"rc-local.service 不存在,開始創建 systemd 單元..." # 創建 rc-local.service 單元文件 cat <
/dev/null [Unit] Description=/etc/rc.d/rc.local Compatibility ConditionPathExists=/etc/rc.d/rc.local After=network.target [Service] Type=forking ExecStart=/etc/rc.d/rc.local start TimeoutSec=0 RemainAfterExit=yes GuessMainPID=no [Install] WantedBy=multi-user.target EOF echo"已創建 rc-local.service" # 創建 /etc/rc.d/rc.local 文件(如果不存在) if [ ! -f /etc/rc.d/rc.local ]; then sudo bash -c 'echo -e "#!/bin/bash\n\nexit 0" > /etc/rc.d/rc.local' echo"已創建 /etc/rc.d/rc.local 文件并添加 exit 0" fi # 添加執行權限 sudo chmod +x /etc/rc.d/rc.local # 重新加載 systemd 并啟用 rc-local sudo systemctl daemon-reload sudo systemctl enable rc-local echo"已啟用 rc-local.service" fi # 啟動服務 systemctl start rc-local # 顯示服務狀態 systemctl status rc-local --no-pager mount --bind /data/wwwroot/web /data/wwwroot/ftp/yxkj_web echo"##vsftpd-user-mount##" >> /etc/rc.local echo"mount --bind /data/wwwroot/web /data/wwwroot/ftp/yxkj_web" >> /etc/rc.local
7.配置防火墻# 配置防火墻 firewall-cmd --zone=public --add-port=62920/tcp --permanent firewall-cmd --reload firewall-cmd --zone=public --list-ports #firewall-cmd 放開9000至9045端口 firewall-cmd --zone=public --permanent --add-port=9000-9045/tcp firewall-cmd --reload #啟動服務并設置開機自啟 systemctl restart vsftpd systemctl enable vsftpd systemctl status vsftpd8.使用FTP軟件登錄![]()
新建一個vsftp用戶
添加新用戶的方法
建立虛擬用戶名單文件 vi /etc/vsftpd/virtusers 生成虛擬用戶數據文件 db_load -T-t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db 建立虛擬用戶個人vsftp的配置文件 cp /data/conf/vsftpd/vconf/yxkj_web /data/conf/vsftpd/vconf/zhts_new 修改用戶的ftp目錄:修改文件:/data/conf/vsftpd/vconf/zhts_new中的local_root=/data/wwwroot/ftp/zhts_new 創建用戶ftp目錄 mkdir -p /data/wwwroot/ftp/zhts_new 將用戶固定在家目錄 echo zhts_new >>/etc/vsftpd/chroot_list mkdir -p /data/wwwroot/web/test.web.com /data/wwwroot/ftp/test/test.web.com chown www.www -R/data/wwwroot/web /data/wwwroot/ftp/test 綁定路徑: mount --bind /data/wwwroot/web/test.web.com /data/wwwroot/ftp/test/test.web.com 開機啟動: echo "mount --bind /data/wwwroot/web/test.web.com /data/wwwroot/ftp/test/test.web.com">>/etc/rc.local 重啟服務 systemctl restart vsftpd總結通過以上步驟,你已成功在Rocky Linux 9上搭建了一個安全的FTP服務器。關鍵配置包括禁用匿名登錄、限制用戶目錄、開放防火墻端口。
如有任何問題或建議,歡迎在評論區留言交流!覺得有用的話,別忘了點贊收藏哦~
寫文不易,如果你都看到了這里,請點個贊和在看,分享給更多的朋友;也別忘了關注星哥玩云!這里有滿滿的干貨分享,還有輕松有趣的技術交流~點個贊、分享給身邊的小伙伴,一起成長,一起玩轉技術世界吧!
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.