【linux運維】Linux伺服器玩轉vsftpd安裝與配置

龍騰萬里sky發表於2022-02-11

Linux伺服器搭建ftp詳細教程。

前言

本文,主要以vsftp軟體為主進行講解,版本為3.0.2。以介紹設定虛擬使用者、許可權驗證為主,linux許可權知識預設大家都有所瞭解。vsftpd設定有兩種模式:主動模式、被動模式。

Linux網路檔案共享。例如NFS、Sambs、FTP,其中以FTP應用最為廣泛,成為了當下linux檔案系統中主流的網路檔案共享工具。介紹FTP主要有幾種常見的工具vsftp、proftp、wu-ftp、pureftp,各種FTP軟體無優劣之分,實際工作中選擇自己熟悉的一款即可。

正文

一、vsftp安裝

注意:以Redhat7系列(或者支援systemd環境的linux系統)

1、準備安裝包

我的gitee倉庫:https://gitee.com/dywangk/SQL-study/tree/master/vsftpd

當然可以到此網站下載各個版本:http://www.rpmfind.net/linux/rpm2html/search.php?query=vsftpd

vsftpd-3.0.2-29.el7_9.x86_64.rpm

2、安裝

rpm -ivh vsftpd-3.0.2-29.el7_9.x86_64.rpm

查詢是否安裝

rpm -qa | grep vsftpd

二、啟動與停止

1、設定開啟自啟

systemctl enable vsftpd.service

2、啟動vsftpd服務

systemctl start vsftpd.service

3、檢視vsftpd服務狀態

systemctl status vsftpd.service

4、檢視vsftpd程式

ps -ef | grep vsftpd
#或者
ps -aux | grep vsftpd

三、錯誤排查

1、通過Git Bash驗證ftp登入

在本機會提示沒有ftp命令,直接就在遠端測試連線。

ftp remote_ip

2、排查錯誤

其實翻譯一下就知道了,chroot配置沒有寫入的許可權。

OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.

3、在vsftpd.conf加入如下配置

後續的版本更新了,需要手動加上allow_writeable_chroot=YES引數配置

allow_writeable_chroot=YES

4、重啟vsftpd服務(Redhat7系列)

systemctl restart vsftpd.service

四、優化設定

1、設定防火牆規則

關於防火牆的設定,可以參考我的歷史文章

【Redhat系列linux防火牆工具】firewalld與iptables防火牆工具的激烈碰撞

https://blog.csdn.net/Tolove_dream/article/details/122293458

重啟測試vsftpd上傳檔案,預設儲存路徑為該使用者的home目錄下

#例如
/home/vsftpd/test

如需更改配置,如下設定

local_root=/var/ftp/pub

防火牆加入ftp服務

firewall-cmd --zone=public --add-service=ftp --permanent

主動模式,防火牆開啟20、21埠

firewall-cmd --zone=public --add-port=21/tcp --permanent 
firewall-cmd --zone=public --add-port=20/tcp --permanent

設定當前ftp儲存目錄使用者許可權、chroot_list檔案配置使用者登入、設定虛擬使用者。

注意:在Windows資源管理訪問,網路共享中心->Internet屬性->高階,開啟被動訪問ftp(開啟相容模式)

2、設定selinux

1、設定SELinux為寬容模式或者臨時關閉

#臨時改成寬容模式
setenforce 0
#檢視selinux
[root@dywangk test]# getenforce
Permissive

2、永久設定selinux,修改配置檔案/etc/sysconfig/selinux

#檢視,預設配置檔案是開啟的
cat /etc/sysconfig/selinux
SELINUX=enforcing
#禁用selinux
SELINUX=disable
#寬容模式
SELINUX=Permissive

五、配置參考

1、示例配置虛擬使用者

編輯配置檔案vim /etc/vsftpd/vsftpd.conf

# Example config file /etc/vsftpd/vsftpd.conf
#繫結本機IP
listen_address=192.168.245.134
#禁止匿名使用者登入
anonymous_enable=NO
#允許本地使用者訪問
local_enable=YES
#開啟寫入許可權
write_enable=YES
#在後續比較高的版本中需要加入允許chroot寫的許可權
allow_writeable_chroot=YES
#上傳檔案後預設許可權掩碼
local_umask=022
#預設不開放匿名使用者上傳許可權
#anon_upload_enable=YES
#預設不開放匿名使用者建立於寫的許可權
#anon_mkdir_write_enable=YES
#
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
#預設為FTP主動模式,需要開啟防火牆20、21埠
connect_from_port_20=YES
#
#chown_uploads=YES
#chown_username=whoever
#
#xferlog_file=/var/log/xferlog
#
xferlog_std_format=YES
#
#idle_session_timeout=600
#
#data_connection_timeout=120
#
#nopriv_user=ftpsecure
#
#async_abor_enable=YES
#
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
#ftpd_banner=Welcome to blah FTP service.
#
#deny_email_enable=YES

#banned_email_file=/etc/vsftpd/banned_emails
#禁止FTP使用者離開自己的主目錄
chroot_local_user=YES
chroot_list_enable=NO
# (default follows)
#虛擬使用者列表,設定預設允許登入FTP的使用者,每行一個使用者
chroot_list_file=/etc/vsftpd/chroot_list
#開啟虛擬使用者功能
guest_enable=YES
#虛擬使用者宿主目錄
guest_username=ftp
#使用者登入後操作主目錄和本地使用者具有同樣的許可權
virtual_use_local_privs=YES
#虛擬使用者主目錄配置檔案
user_config_dir=/etc/vsftpd/vconf

#ls_recurse_enable=YES
#開啟監聽,開啟ipv4就禁用listen_ipv6
listen=YES
#
listen_ipv6=NO
#許可權驗證需要的加密檔案
pam_service_name=vsftpd.vu
#pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

在/etc/vsftpd/chroot_list加入虛擬使用者user1和user2。這裡直接用vim編輯是一樣的加入配置,每行對應一個使用者。

echo 'user1' >> /etc/vsftpd/chroot_list
echo 'user2' >> /etc/vsftpd/chroot_list

2、新增使用者並指定目錄

建議:linux下賦予許可權底線,在最小許可權範圍內滿足需求即可

#建立虛擬使用者目錄
mkdir -p /data/{user1,user2}
#賦予許可權,測試直接賦予最高許可權了,實際工作中建議在最小許可權範圍內滿足即可。
chmod -R 777 /data/user1 
chmod -R 777 /data/user2

3、設定使用者名稱密碼資料庫

下面使用的\n並非錯誤輸入,是的,就是正常的換行。熟悉程式設計的小夥伴應該不陌生,在Java語言的列印輸出大家應該有印象吧!

class test{
	public static void main(String args){
		system.out.println("hello world!!!");    
	}       
}

在虛擬使用者儲存使用者名稱以及密碼

#用vusers.list來區分本機使用者與虛擬使用者配置
echo -e "user1\n123456\nuser2\n123456" > /etc/vsftpd/vusers.list
#切換到vsftpd配置目錄
cd /etc/vsftpd/
#解析vusers.list到vusers.db
db_load -T -t hash -f vusers.list vusers.db
#賦予許可權
chmod 600 vusers.*

4、指定認證方式

echo -e "#%PAM-1.0\n\nauth required pam_userdb.so db=/etc/vsftpd/vusers\naccount required  pam_userdb.so db=/etc/vsftpd/vusers" > /etc/pam.d/vsftpd.vu
#建立虛擬配置檔案目錄
mkdir /etc/vsftpd/vconf
#進入虛擬使用者配置檔案目錄
cd vconf/
#新增配置
echo 'local_root=/data/user1' > user1
echo 'local_root=/data/user2' > user2
#檢視配置
ls
user1 user2
#檢視user1與user2的主目錄
cat user1
local_root=/data/user1
cat user2
local_root=/data/user2

#新建測試檔案
touch /data/user1/test1
touch /data/user2/test2

如果沒有指定虛擬使用者的ftp目錄,預設訪問目錄如下

/var/ftp/pub/

經過測試設定的虛擬使用者user2禁錮在了/data/user2 目錄下

#在Windows下訪問到新增的test1、test2檔案,如果沒變過來多重新整理幾遍
/data/user1/test1
/data/user2/test2

5、ftp命令登入驗證

Git Bash驗證

ftp remote_ip

或者在資源管理驗證測試新增、刪除、修改。

ftp://remote_ip
by 龍騰萬里sky 原創不易,白嫖有癮

相關文章