( 更新日志:
時(shí)間:2019年1月12日
事件:
1、在目錄7第4點(diǎn)修改了錯(cuò)誤。pam_service_name=vsftpd.virtual修改為vsftpd。
2、在目錄7第5點(diǎn)增加了配置選項(xiàng):write_enable=YES,解決無(wú)法讀取目錄的問(wèn)題。
3、在目錄6vsftpd.conf配置文件中添加以下配置選項(xiàng),解決云服務(wù)器被動(dòng)模式無(wú)法登錄的問(wèn)題,提示,要在云服務(wù)器平臺(tái)安全策略那里開(kāi)放40000~40080的端口。一個(gè)人用的話就用主動(dòng)模式,把pasv_enable=YES改為NO。
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40080
pasv_promiscuous=YES
)
目錄
1)vsftpd簡(jiǎn)介
2)安裝vsftpd
3)firewalld防火墻和selinux設(shè)置
4)運(yùn)行,登錄
5)局域網(wǎng)登錄
6)認(rèn)識(shí)vsftpd軟件配置文件
7)設(shè)置虛擬賬號(hào)登錄
8)認(rèn)識(shí)vsftpd傳輸模式
9)500 OOPS:priv_sock_get_cmd錯(cuò)誤
10)參考文獻(xiàn)
一、vsftpd簡(jiǎn)介
FTP,F(xiàn)ile transfer protocol的縮寫,中文叫文本傳輸協(xié)議,是用于在網(wǎng)絡(luò)上進(jìn)行文件傳輸?shù)囊惶讟?biāo)準(zhǔn)協(xié)議,屬于網(wǎng)絡(luò)傳輸協(xié)議的應(yīng)用層。注意,它是協(xié)議,不是軟件,今天搭建的vsftpd是基于FTP開(kāi)發(fā)的一套程序,也是一款在Linux發(fā)行版中最受推崇的FTP服務(wù)器程序,特點(diǎn)是小巧輕快,安全易用。
二、安裝vsftpd
yum install vsftpd
三、firewall防火墻和selinux設(shè)置
firewall-cmd --list-services //查看防火墻允許的服務(wù)。
firewall-cmd --add-service=ftp --permanent //永久開(kāi)放ftp服務(wù)
firewall-cmd --add-port=20/tcp --permanent
firewall-cmd --add-port=21/tcp --permanent //允許外網(wǎng)訪問(wèn)
firewall-cmd --reload //重新載入配置
setsebool ftpd_full_access 1 //selinux設(shè)置
setsebool tftp_home_dir 1
四、運(yùn)行,登錄
useradd test
passwd test
ftp localhost
輸入賬號(hào)密碼,成功登錄。

五、局域網(wǎng)測(cè)試
Centos下的網(wǎng)卡設(shè)置是在/etc/sysconfig/network-scripts/這個(gè)文件夾下,進(jìn)入該文件夾,前綴為ifcfg-后面跟的就是網(wǎng)卡的名稱。
默認(rèn)的話是開(kāi)啟dhcp的,首先把BOOTPROTO="dhcp"改成BOOTPROTO="static"表示靜態(tài)獲取。之后在寫進(jìn)以下配置:
IPADDR=192.168.1.6
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
BROADCAST設(shè)置的是局域網(wǎng)廣播地址,IPADDR就是靜態(tài)IP,NETMASK是子網(wǎng)掩碼,
GATEWAY就是網(wǎng)關(guān)或者路由地址,DNS就是域名系統(tǒng)地址,
這里用的就是本地網(wǎng)關(guān),也可以設(shè)置其它,比如谷歌、360DNS地址。
systemctl restart network //重啟網(wǎng)絡(luò)服務(wù)
ip addr或者ifconfig //查看ip地址。
接下來(lái)在windows平臺(tái)用FileZilla Client軟件登陸。
這里有些朋友會(huì)使用虛擬機(jī)測(cè)試,但是按照上面配置后發(fā)現(xiàn)鏈接不了,那是因?yàn)樘摂M機(jī)的網(wǎng)絡(luò)連接模式的影響。這里有一個(gè)簡(jiǎn)單的方法,就是直接獲取虛擬機(jī)里面系統(tǒng)的ip地址,然后在FileZilla客戶端填入。



系統(tǒng)賬號(hào)默認(rèn)登陸是在賬號(hào)的家目錄,可以切換到其它目錄。
到這里,基本的vsftpd搭建成功。
六、認(rèn)識(shí)vsftpd配置文件vsftpd.conf
主程序:/usr/sbin/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
數(shù)據(jù)根目錄:/var/ftp
就算是經(jīng)驗(yàn)豐富的老手也會(huì)做好備份工作
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

anonymous_enable=NO //設(shè)定不允許匿名訪問(wèn)
local_enable=YES //設(shè)定本地用戶可以訪問(wèn)。
write_enable=YES //設(shè)定可以進(jìn)行寫操作。
local_umask=022 //設(shè)定上傳后文件的權(quán)限掩碼。
anon_upload_enable=NO //禁止匿名用戶上傳。
anon_mkdir_write_enable=NO //禁止匿名用戶建立目錄。
dirmessage_enable=YES //設(shè)定開(kāi)啟目錄標(biāo)語(yǔ)功能。
xferlog_enable=YES //設(shè)定開(kāi)啟日志記錄功能。
connect_from_port_20=YES //設(shè)定端口20進(jìn)行數(shù)據(jù)連接。(主動(dòng)模式)
chown_uploads=NO //設(shè)定禁止上傳文件更改宿主。
#chown_username=whoever
xferlog_file=/var/log/xferlog //設(shè)定Vsftpd的服務(wù)日志保存路徑。
xferlog_std_format=YES //設(shè)定日志使用標(biāo)準(zhǔn)的記錄格式。
#idle_session_timeout=600 //設(shè)定空閑連接超時(shí)時(shí)間,單位為秒,這里默認(rèn)。
#data_connection_timeout=120 //設(shè)定空閑連接超時(shí)時(shí)間,單位為秒,這里默認(rèn)。 #nopriv_user=ftptest
async_abor_enable=YES //設(shè)定支持異步傳輸功能。
ascii_upload_enable=YES
ascii_download_enable=YES //設(shè)定支持ASCII模式的上傳和下載功能。
ftpd_banner=Welcome to blah FTP service. //設(shè)定Vsftpd的登陸標(biāo)語(yǔ)。
#deny_email_enable=YES // (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
Chroot_local_user=YES
chroot_list_enable=YES //禁止用戶登出自己的FTP主目錄。
chroot_list_file=/etc/vsftpd/chroot_list //這個(gè)文件里的用戶不受限制,不限制在本目錄。
ls_recurse_enable=NO //禁止用戶登陸FTP后使用"ls -R"的命令。該命令會(huì)對(duì)服務(wù)器性能造成巨大開(kāi)銷。
#listen=NO
#listen_ipv6=YES
userlist_enable=YES //設(shè)定userlist_file中的用戶將不得使用FTP。
tcp_wrappers=YES //設(shè)定支持TCP Wrappers
allow_writeable_chroot=YES //這個(gè)可以解決chroot權(quán)限問(wèn)題
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40080
pasv_promiscuous=YES
systemctl restart vsftpd //重啟vsftpd服務(wù)

注意,“/”在這里就是用戶賬號(hào)的家目錄,并不是系統(tǒng)的根目錄。
七、vsftpd虛擬用戶的使用
vsftpd提供了三種認(rèn)證方式,分別是:匿名用戶認(rèn)證、本地用戶認(rèn)證和虛擬用戶認(rèn)證。上面test用戶就是本地用戶。從安全的角度來(lái)說(shuō),虛擬用戶最安全,接下來(lái),我們開(kāi)始配置虛擬用戶。
虛擬用戶配置步驟:
1) 建立虛擬FTP用戶數(shù)據(jù)庫(kù)文件。
2) 創(chuàng)建FTP根目錄及虛擬用戶映射的系統(tǒng)用戶。
3) 建立支持虛擬用戶的PAM認(rèn)證文件。
4) 在vsftpd.conf中添加支持配置。
5) 為虛擬用戶設(shè)置權(quán)限。
6) 虛擬賬號(hào)登錄。
- 建立虛擬FTP用戶數(shù)據(jù)庫(kù)文件
- 建立一個(gè)虛擬用戶名單文件,這個(gè)文件就是來(lái)記錄vsftpd虛擬用戶的用戶名和口令的數(shù)據(jù)文件,我這里給它命名為vuser.list,保存在/etc/vsftpd/目錄下。
vim vuser.list
一行賬號(hào),一行密碼
vuser
123456
- 安裝Berkeley DB
yum install db4*
安裝后
db_load -T -t hash -f vuser.list vuser.db//生成用戶加密文件
chmod 600 vuser.db //敏感文件限制只允許屬主讀寫
- 創(chuàng)建虛擬用戶及虛擬用戶的家目錄
useradd -d /var/vusers -s /sbin/nologin vftp //創(chuàng)建系統(tǒng)用戶vftp,并制定其家目錄為/var/vusers
chmod -Rf 755 /var/vusers/ //修改目錄的權(quán)限使得其他用戶也可以訪問(wèn)。
- 建立支持虛擬用戶的PAM認(rèn)證文件
- vsftpd的pam文件在/etc/pam.d/目錄下,先做備份工作。
cp vsftpd vsftpd.bak
vim vsftpd
- 先注釋掉所有的內(nèi)容后添加以下內(nèi)容.
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser //此句用于檢查用戶密碼,數(shù)據(jù)庫(kù)文件不要寫后綴.db
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vus此句用于檢查用戶是否在有效期內(nèi),數(shù)據(jù)庫(kù)支持虛擬用戶的PAM認(rèn)證文件。
- 在vsftpd.conf中添加支持配置
guest_enable=YES //開(kāi)啟虛擬用戶模式
guest_username=vftp //指定虛擬用戶賬號(hào)
pam_service_name=vsftpd //指定pam文件
user_config_dir=/etc/vsftpd/vusers_profile //指定虛擬用戶的權(quán)限配置目錄。
virtual_use_local_privs=NO //虛擬用戶和匿名用戶有相同的權(quán)限
- 為虛擬用戶設(shè)置不同的權(quán)限。
mkdir /etc/vsftpd/vusers_profile //新建虛擬用戶目錄
vim /etc/vsftpd/vusers_profile/vuser//新建虛擬用戶配置文件,文件名要和上面的虛擬用戶名單里的賬號(hào)名字對(duì)等。
local_root=/var/vusers/vuser //虛擬賬號(hào)的家目錄
write_enable=YES
anonymous_enable=NO
local_umask=022
anon_upload_enable=YES //上傳權(quán)限
anon_mkdir_write_enable //創(chuàng)建文件和目錄的權(quán)限
anon_other_write_enable //刪除文件和目錄的權(quán)限
anon_world_readable_only=YES //當(dāng)文件的“其他人”有讀權(quán)限的時(shí)候可以下載
download_enable=YES //下載權(quán)限
- 保存配置,重啟服務(wù)。
systemctl restart vsftpd
-
虛擬賬號(hào)登錄
虛擬賬號(hào)登錄
登錄成功
八、認(rèn)識(shí)vsftpd傳輸模式
-
主動(dòng)模式
FTP主動(dòng)模式
在主動(dòng)模式下,F(xiàn)TP客戶端從任意端口5150(端口號(hào)>1023)發(fā)起一個(gè)FTP請(qǐng)求,并攜帶自己監(jiān)聽(tīng)的端口號(hào)5151(發(fā)送的端口號(hào)+1=監(jiān)聽(tīng)端口號(hào));隨后服務(wù)器返回確認(rèn),然后從服務(wù)器本地的20端口主動(dòng)發(fā)起連接請(qǐng)求到客戶端的監(jiān)聽(tīng)端口5151,最后客戶端返回確認(rèn)。
- 被動(dòng)模式
FTP被動(dòng)模式
在被動(dòng)模式中,命令連接和數(shù)據(jù)連接都由客戶端來(lái)發(fā)起,如上圖所示,客戶端用隨機(jī)命令端口5150向服務(wù)器的21命令端口發(fā)送一個(gè)PASV請(qǐng)求,然后服務(wù)器返回?cái)?shù)據(jù)端口3267,告訴客戶端我在哪個(gè)端口監(jiān)聽(tīng)數(shù)據(jù)連接。然后客戶端向服務(wù)器的監(jiān)聽(tīng)端口3268發(fā)起數(shù)據(jù)連接,最后服務(wù)器回復(fù)確認(rèn)。
vsftpd默認(rèn)是被動(dòng)模式。所以客戶端要設(shè)置被動(dòng)模式連接,如果到現(xiàn)在還沒(méi)連接成功的看客戶端有沒(méi)有設(shè)置被動(dòng)傳輸模式。如果你有一臺(tái)云服務(wù)器,自己或者為數(shù)不多的人使用,建議你使用主動(dòng)模式。
再次提醒一遍,云服務(wù)器,例如阿里云平臺(tái),你需要在安全策略那里開(kāi)放端口。通常你在本地配置可以使用,但在云服務(wù)器上發(fā)現(xiàn)不行,可以從日志文件、防火墻、selinux這幾塊入手。
九、500 OOPS:priv_sock_get_cmd錯(cuò)誤
網(wǎng)上很多說(shuō)是selinux設(shè)置問(wèn)題,我按照他們的都改了,但是還是不行。最后我發(fā)現(xiàn)問(wèn)題是出在pam文件里。
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
如果你是64位,你需要添加的/lib64/,我遇到的問(wèn)題就這么的解決了。
十、參考文獻(xiàn)
如果哪里有寫錯(cuò)的,請(qǐng)指出來(lái),謝謝。
一起學(xué)習(xí),一起討論。



