Rocky Linux 9 安裝FTP服務(wù)器搭建實(shí)戰(zhàn):一文學(xué)會(huì),高效文件傳輸!
大家好,我是星哥,之前的文章中介紹了在Rocky Linux 9系統(tǒng)中安裝LNMP。 文件傳輸?shù)男屎桶踩灾陵P(guān)重要。FTP(File Transfer Protocol)作為一種經(jīng)典的文件傳輸協(xié)議,在許多場(chǎng)景下依然扮演著不可或缺的角色。
本文將詳細(xì)介紹如何在Rocky Linux 9上安裝和配置FTP服務(wù)器,幫助您快速搭建一個(gè)穩(wěn)定高效的文件傳輸平臺(tái)。
![]()
快速安裝
功能:Rocky Linux 9系統(tǒng)中源碼包安裝 Vsftpd 的shell腳本
端口:62920
FTP用戶: www
FTP日志存放路徑: /data/wwwroot/ftp_log/
登錄用戶名和密碼: yxkj_web Password123 【請(qǐng)修改密碼】
FTP配置文件:/data/conf/vsftpd/vsftpd.conf
被動(dòng)模式端口范圍: 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主配置文件 關(guān)鍵配置項(xiàng)說(shuō)明配置項(xiàng)
默認(rèn)值
修改后值
anonymous_enable
YES
NO
禁用匿名登錄(安全第一,避免未授權(quán)訪問(wèn))
local_enable
YES
YES
允許本地用戶登錄
write_enable
YES
YES
允許用戶寫入文件(上傳/創(chuàng)建目錄)
chroot_local_user
NO
YES
限制用戶只能訪問(wèn)自己的主目錄(防止越權(quán)訪問(wèn)系統(tǒng)文件)
allow_writeable_chroot
YES
解決用戶主目錄寫權(quán)限沖突(必須添加,否則登錄失敗)
配置FTP配置文件
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak cat > /data/conf/vsftpd/vsftpd.conf << EOF #ftp時(shí)間和系統(tǒng)同步,如果啟動(dòng)有錯(cuò)誤,請(qǐng)注銷 use_localtime=NO ,解決客戶端登錄緩慢問(wèn)題!重要!默認(rèn)vsftpd開啟了DNS反向解析!這里需要關(guān)閉,如果啟動(dòng)有錯(cuò)誤,請(qǐng)注銷! reverse_lookup_enable=NO #默認(rèn)無(wú)此行,ftp端口為21,添加listen_port=2222把默認(rèn)端口修改為2222,注意:防火墻同時(shí)要開啟2222端口 listen_port=62920 #禁止匿名用戶 anonymous_enable=NO #設(shè)定本地用戶可以訪問(wèn)。注意:主要是為虛擬宿主用戶,如果該項(xiàng)目設(shè)定為NO那么所有虛擬用戶將無(wú)法訪問(wèn) local_enable=YES #全局設(shè)置,是否容許寫入(無(wú)論是匿名用戶還是本地用戶,若要啟用上傳權(quán)限的話,就要開啟他) write_enable=YES #創(chuàng)建或上傳后文件的權(quán)限掩碼,文件的權(quán)限是644 local_umask=022 #禁止匿名用戶上傳 anon_upload_enable=NO #禁止匿名用戶建立目錄 anon_mkdir_write_enable=NO #設(shè)定開啟目錄標(biāo)語(yǔ)功能,進(jìn)入目錄時(shí)可以顯示一些設(shè)定的信息,可以通過(guò)message_file=.message來(lái)設(shè)置 dirmessage_enable=YES #設(shè)定開啟日志記錄功能 xferlog_enable=YES #主動(dòng)連接的端口號(hào) connect_from_port_20=YES #設(shè)定禁止上傳文件更改宿主 chown_uploads=NO #設(shè)定Vsftpd的服務(wù)日志保存路徑。注意,該文件默認(rèn)不存在。必須要手動(dòng)touch出來(lái),并且由于這里更改了Vsftpd的服務(wù)宿主用戶為手動(dòng)建立的Vsftpd。必須注意給與該用戶對(duì)日志的寫入權(quán)限,否則服務(wù)將啟動(dòng)失敗 xferlog_file=/data/wwwroot/ftp_log//vsftpd_xferlog.log #格式化日志格式,使用標(biāo)準(zhǔn)格式 xferlog_std_format=YES # 如果啟用該選項(xiàng),將生成兩個(gè)相似的日志文件,默認(rèn)在 /var/log/xferlog 和 /var/log/vsftpd.log 目錄下。前者是 wu-ftpd 類型的傳輸日志,可以利用標(biāo)準(zhǔn)日志工具對(duì)其進(jìn)行分析;后者是Vsftpd類型的日志。 dual_log_enable=YES vsftpd_log_file=/data/wwwroot/ftp_log//vsftpd.log #設(shè)定支撐Vsftpd服務(wù)的宿主用戶為手動(dòng)建立的Vsftpd用戶。注意,一旦做出更改宿主用戶后,必須注意一起與該服務(wù)相關(guān)的讀寫文件的讀寫賦權(quán)問(wèn)題。比如日志文件就必須給與該用戶寫入權(quán)限等 nopriv_user=vsftpd #設(shè)定支持異步傳輸功能 async_abor_enable=YES #設(shè)定支持ASCII模式的上傳 ascii_upload_enable=YES #設(shè)定支持ASCII模式的下載 ascii_download_enable=YES #設(shè)定Vsftpd的登陸歡迎語(yǔ) ftpd_banner=Welcome to FTP service #禁止本地用戶登出自己的FTP主目錄(NO表示禁止登出,YES表示允許登出) chroot_local_user=NO #禁止虛擬用戶登出自己的FTP主目錄,即限定在自己的目錄內(nèi),不讓他出去,就比如如果設(shè)置成NO,那么當(dāng)你登陸到ftp的時(shí)候,可以訪問(wèn)服務(wù)器的其他一些有權(quán)限目錄。設(shè)置為YES后,即鎖定你的目錄了 chroot_list_enable=YES #文件中的用戶被禁錮在自己的宿主目錄中。/etc/vsftp/chroot_list本身是不存在的,這要建立vim /etc/vsftp/chroot_list,然后將帳戶輸入一行一個(gè),保存就可以了 chroot_list_file=/etc/vsftpd/chroot_list #設(shè)為YES時(shí),以standalone方式來(lái)啟動(dòng),否則以超級(jí)進(jìn)程的方式啟動(dòng)。順便展開說(shuō)明一下,所謂StandAlone模式就是該服務(wù)擁有自己的守護(hù)進(jìn)程支持,在ps -A命令下我們將可用看到vsftpd的守護(hù)進(jìn)程名。如果不想工作在StandAlone模式下,則可以選擇SuperDaemon模式,在該模式下vsftpd將沒(méi)有自己的守護(hù)進(jìn)程,而是由超級(jí)守護(hù)進(jìn)程Xinetd全權(quán)代理,與此同時(shí),Vsftp服務(wù)的許多功能將得不到實(shí)現(xiàn)。 listen=YES #設(shè)定PAM服務(wù)下Vsftpd的驗(yàn)證配置文件名。因此,PAM驗(yàn)證將參考/etc/pam.d/下的vsftpd文件配置 pam_service_name=vsftpd #在/etc/vsftpd/user_list中的用戶將不得使用FTP,設(shè)為YES的時(shí)候,如果一個(gè)用戶名是在userlist_file參數(shù)指定的文件中,那么在要求他們輸入密碼之前,會(huì)直接拒絕他們登陸 userlist_enable=YES #設(shè)為YES時(shí),ftp服務(wù)器將使用tcp_wrappers作為主機(jī)訪問(wèn)控制方式,支持 TCP Wrappers 的防火墻機(jī)制 tcp_wrappers=NO #設(shè)定空閑連接超時(shí)時(shí)間,這里也可以不設(shè)置,將具體數(shù)值留給每個(gè)具體用戶具體指定,當(dāng)然如果不指定的話,還是使用系統(tǒng)的默認(rèn)值600,單位秒。 idle_session_timeout=300 #空閑1秒后服務(wù)器斷開 data_connection_timeout=1 ######################################################### # ssl設(shè)置 # ######################################################### 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端口設(shè)置,如果不設(shè)置,默認(rèn)還是21,但是當(dāng)客戶端以隱式ssl連接時(shí),默認(rèn)會(huì)使用990端口,導(dǎo)致連接失敗!! listen_port=62920 # 輸出ssl相關(guān)的日志信息 #debug_ssl=YES ######################################################### #以下這些是關(guān)于Vsftpd虛擬用戶支持的重要配置項(xiàng)目。 #默認(rèn)Vsftpd.conf中不包含這些設(shè)定項(xiàng)目,需要自己手動(dòng)添加配置 ######################################################### #設(shè)定啟用虛擬用戶功能 guest_enable=YES #指定虛擬用戶的宿主用戶(這個(gè)是我們后面要新建的用戶),系統(tǒng)默認(rèn)是ftp用戶,這里是全局設(shè)置,在虛擬用戶的配置文件中也可以單獨(dú)指定來(lái)覆蓋全局設(shè)置的用戶 guest_username=$FTP_USER #設(shè)定虛擬用戶個(gè)人Vsftp的配置文件存放路徑。也就是說(shuō),這個(gè)被指定的目錄里,將存放每個(gè)Vsftp虛擬用戶個(gè)性的配置文件,一個(gè)需要注意的 #地方就是這些配置文件名必須和虛擬用戶名相同。 #比如說(shuō)vsftpd.conf的配置文件,你復(fù)制到這個(gè)目錄下,你要mv一下,配置成虛擬用戶的名稱 user_config_dir=/data/conf/vsftpd/vconf #當(dāng)該參數(shù)激活(YES)時(shí),虛擬用戶使用與本地用戶相同的權(quán)限。 #當(dāng)此參數(shù)關(guān)閉(NO)時(shí),虛擬用戶使用與匿名用戶相同的權(quán)限。默認(rèn)情況下此參數(shù)是關(guān)閉的(NO)。 virtual_use_local_privs=YES #設(shè)置被動(dòng)模式的端口范圍 pasv_min_port=9000 #設(shè)置被動(dòng)模式的端口范圍 pasv_max_port=9045 #保持5秒 accept_timeout=5 #1秒后重新連接 connect_timeout=1 #解決vsftpd: refusing to run with writable root inside chroot ()錯(cuò)誤 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命令輸出加引號(hào)的字符串時(shí),將字符串原樣輸出; # 用echo命令輸出不加引號(hào)的字符串時(shí),將字符串中的各個(gè)單詞作為字符串輸出,各字符串之間用一個(gè)空格分割。 echo "yxkj_web Password123" > /etc/vsftpd/virtusers生成虛擬用戶數(shù)據(jù)文件:
dnf install -y libdb-utils db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db # 設(shè)定PAM驗(yàn)證文件,并指定對(duì)虛擬用戶數(shù)據(jù)庫(kù)文件進(jìn)行讀取 chmod 600 /etc/vsftpd/virtusers.db # 在/etc/pam.d/vsftpd的文件頭部加入以下信息(在后面加入無(wú)效,或是將vsftpd原內(nèi)容全部注釋掉,在文件末尾加) cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak # 注意:如果系統(tǒng)為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 # 添加默認(rèn)支撐Vsftpd服務(wù)的宿主用戶,-M:不創(chuàng)建家目錄 useradd vsftpd -M -s /bin/false # 創(chuàng)建保存虛擬用戶配置文件的目錄 mkdir -p /data/conf/vsftpd/vconf cd /data/conf/vsftpd/vconf # 這里創(chuàng)建三個(gè)虛擬用戶配置文件 touch yxkj_web # 創(chuàng)建要將哪些用戶固定在家目錄的配置文件 touch /etc/vsftpd/chroot_list編輯用戶yxkj_web配置文件,其他的跟這個(gè)配置文件類似
cd /data/conf/vsftpd/vconf/ for VUSER in yxkj_web ;do cat > $VUSER << EOF #啟用虛擬用戶,centos下yes必須為小寫字母 #guest_enable=yes #通過(guò)此項(xiàng)可以配置不同的虛擬用戶屬于不同宿主用戶,默認(rèn)則用全局配置中的設(shè)置 #映射本地虛擬用戶 guest_username=www #如果當(dāng)時(shí)創(chuàng)建用戶的時(shí)候鎖定一個(gè)目錄了,那就可以不寫 local_root=/data/wwwroot/ftp/$VUSER #用戶會(huì)話空閑后10分鐘 idle_session_timeout=600 #將數(shù)據(jù)連接空閑2分鐘斷 data_connection_timeout=120 #最大客戶端連接數(shù) max_clients=10 #每個(gè)ip最大連接數(shù) max_per_ip=5 #限制上傳速率,0為無(wú)限制 local_max_rate=0 #設(shè)置一個(gè)文件名或者目錄名式樣(注意:只能是文件名或是目錄名,不支持路徑模式)以阻止在任何情況下訪問(wèn)它們。并不是隱藏它們,而是拒絕任何試圖對(duì)它們進(jìn)行的操作(下載,改變目錄層,和其他有影響的操作)。 deny_file={*.mov,.private} #設(shè)置了一個(gè)文件名或者目錄名(注意:只能是文件名或是目錄名,不支持路徑模式)列表,這個(gè)列表內(nèi)的資源會(huì)被隱藏,不管是否有隱藏屬性。但如果用戶知道了它的存在,將能夠?qū)λM(jìn)行完全的訪問(wèn)。 hide_file={.hidden,hide*} EOF # 創(chuàng)建測(cè)試用戶ftp目錄 mkdir -p /data/wwwroot/ftp/$VUSER # 將用戶固定在家目錄 echo $VUSER >> /etc/vsftpd/chroot_list done chown www:www -R /data/wwwroot/ftp6.開機(jī)啟動(dòng)(掛載)systemctl enable rc-local &>/dev/null if [ $? -ne 0 ]; then echo"rc-local.service 不存在,開始創(chuàng)建 systemd 單元..." # 創(chuàng)建 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"已創(chuàng)建 rc-local.service" # 創(chuàng)建 /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"已創(chuàng)建 /etc/rc.d/rc.local 文件并添加 exit 0" fi # 添加執(zhí)行權(quán)限 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 # 啟動(dòng)服務(wù) systemctl start rc-local # 顯示服務(wù)狀態(tài) 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 #啟動(dòng)服務(wù)并設(shè)置開機(jī)自啟 systemctl restart vsftpd systemctl enable vsftpd systemctl status vsftpd8.使用FTP軟件登錄![]()
新建一個(gè)vsftp用戶
添加新用戶的方法
建立虛擬用戶名單文件 vi /etc/vsftpd/virtusers 生成虛擬用戶數(shù)據(jù)文件 db_load -T-t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db 建立虛擬用戶個(gè)人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 創(chuàng)建用戶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 開機(jī)啟動(dòng): echo "mount --bind /data/wwwroot/web/test.web.com /data/wwwroot/ftp/test/test.web.com">>/etc/rc.local 重啟服務(wù) systemctl restart vsftpd總結(jié)通過(guò)以上步驟,你已成功在Rocky Linux 9上搭建了一個(gè)安全的FTP服務(wù)器。關(guān)鍵配置包括禁用匿名登錄、限制用戶目錄、開放防火墻端口。
如有任何問(wèn)題或建議,歡迎在評(píng)論區(qū)留言交流!覺(jué)得有用的話,別忘了點(diǎn)贊收藏哦~
寫文不易,如果你都看到了這里,請(qǐng)點(diǎn)個(gè)贊和在看,分享給更多的朋友;也別忘了關(guān)注星哥玩云!這里有滿滿的干貨分享,還有輕松有趣的技術(shù)交流~點(diǎn)個(gè)贊、分享給身邊的小伙伴,一起成長(zhǎng),一起玩轉(zhuǎn)技術(shù)世界吧!
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
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.