一、vsftp
介紹
vsftp是基于GPL發(fā)布的FTP服務器軟件蹈丸。
一個是數(shù)據(jù)端口成黄,一個是控制端口,控制端口一般為21逻杖。
而數(shù)據(jù)端口不一定是20奋岁,這和FTP的應用模式有關,如果是主動模式荸百,應該為20闻伶,如果為被動模式,由服務器端和客戶端協(xié)商而定
centos7 安裝vsftpd后够话,默認為被動模式(pasv_enable=YES)蓝翰,允許匿名用戶(anonymous)登陸。
安裝
yum -y install vsftpd
配置文件vsftpd.conf詳解
- 允許匿名用戶讀寫
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
- 允許本地用戶登錄
local_enable=YES
local_mask=022
- 記錄日志
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
- 定制歡迎信息
dirmessage_enable=YES
ftpd_banner=Welcome to chenlf FTP service
chown_username=username #是否改變上傳文件的屬主女嘲,如果是則輸入一個系統(tǒng)用戶名
- chroot
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #是否將系統(tǒng)用戶限制在自己的home目錄下畜份,如果chroot_local_user選擇了yes,那么chroot_list_file中列出的是不chroot的用戶列表
max_clients=NUMBER #最大用戶訪問數(shù)
- port 設定
connect_from_port_20
如果設為YES欣尼,則強制ftp-data的數(shù)據(jù)傳送使用port 20
ftp_data_port
設定ftp數(shù)據(jù)聯(lián)機所使用的port漂坏,默認為20
listen_port
ftp server 監(jiān)聽的端口,默認為21
pasv_enable 被動模式媒至,默認為YES
pasv_max_port
pasv_min_port
- 更換檔案所有權
chown_uploads 用戶 YES/NO
若啟動顶别,所有匿名上傳數(shù)據(jù)的擁有者被更改為chown_username所設定的使用者。
chown_username
- guest 設定
guest_enable
若啟用這項功能拒啰,所有非匿名用戶登陸者都視為guest驯绎,默認關閉
guest_username
定義guest的使用者名稱,默認為ftp
- 用戶限制文件
用戶控制文件vsftpd.ftpusers,所有出現(xiàn)在此文件中的用戶就不可以通過ftp登錄系統(tǒng)
另一個用戶控制文件vsftpd.user_list谋旦,當在vsftpd.conf文件中定義了userlist_enable=YES剩失,它才會生效。
userlist_deny=YES(默認)册着,在vsftpd.user_list中定義的用戶不可以使用ftp拴孤;
當定義了userlist_deny=NO,只有在vsftpd.user_list文件中定義的用戶可以使用ftp
- 一般啟動vsftp時,我們只會看到一個名為vsftpd的進程運行甲捏,但若希望每一個聯(lián)機都能以獨立的進程來呈現(xiàn)演熟,則:
setproctitle_enable=YES
- 限制傳輸檔案的速度
anon_max_rate=50000 #限制匿名用戶50KB/s
local_max_rate=200000 #限制本地用戶200KB/s
- 針對不同的用戶限制速度
新增一行:
user_config_dir=/etc/vsftpd/userconf
新建目錄:
mkdir /etc/vsftpd/userconf
在這個目錄下新增名為用戶名的文件test1,test2
在test1文件中加入一行:
local_max_rate=25000
在test2文件中加入一行:
local_max_rate=30000
- 建立一個防火墻下的ftp
使用PORT FTP mode:
iptables -A INPUT -p tcp -m multiport --dport 21,20 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
這樣配置后fpt客戶端聯(lián)機方式不能選擇passive mode,否則無法建立數(shù)據(jù)聯(lián)機芒粹,也就是說客戶端
可以連上ftp server 但是執(zhí)行l(wèi)s get等指令兄纺,便無法操作
使用PASS FTP mode:ftp port 21,ftp-data port :9981到9985
iptables -A INPUT -p tcp -m multiport --dport 21,9981,9982,9983,9984,9985 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
修改vsftpd.conf文件:
listen_port=21
pasv_enable=YES
pasv_min_port=9981
pasv_max_port=9985
這樣配置后ftp client聯(lián)機方式只能選擇passvive mode
vsftp 配置虛擬用戶
- 配置文件修改
anonymous_enable=NO #禁止匿名用戶訪問
chroot_list_enable=YES # 限定用戶不可以離開主目錄
chroot_list_file=/etc/vsftpd/chroot_list
local_enable=YES #本地用戶是否可以訪問 注:如果為NO 則所有虛擬用戶都將不能訪問原因:虛擬用戶訪問在主機上其實是以本地ftp用戶訪問的
pam_service_name=vsftpd #pam認證文件名在/etc/pam.d/vsftpd
guest_enable=YES #啟用虛擬用戶功能
guest_username=ftp # 指定虛擬用戶的宿主用戶 –centos 里面已經(jīng)有內(nèi)置的ftp用戶了(注:此用戶在chroot_list_file=/etc/vsftpd/chroot_list文件里所指定的用戶)
user_config_dir=/etc/vsftpd/vuser_conf #設置虛擬用戶個人vsftp的服務配置文件
- 查看是否安裝 db4 db4-utils
[root@localhost ~]#rpm -qa|grep db4 運行后出現(xiàn)下面內(nèi)容 說明已經(jīng)安裝可以使用db_load命令(主要是 db4-utils)
db4-devel-4.3.29-10.el5_5.2
db4-4.3.29-10.el5_5.2
db4-devel-4.3.29-10.el5_5.2
db4-4.3.29-10.el5_5.2
db4-tcl-4.3.29-10.el5_5.2
db4-utils-4.3.29-10.el5_5.2
[root@localhost ~]#
如果沒安裝則要安裝db4-utils
[root@localhost ~]#yum -y install db4-utils
- 創(chuàng)建 chroot_list_file=/etc/vsftpd/chroot_list文件
touch /etc/vsftpd/chroot_list
echo ftp >> /etc/vsftpd/chroot_list #(此處ftp 也要是/etc/vsftpd/vsftpd.conf中的guest_username的值)
- 創(chuàng)建虛擬用戶目錄(密碼文本)
[root@localhost ~]#vi /etc/vsftpd/vftpuser.txtx (奇數(shù)行為用戶名 化漆,偶數(shù)行為密碼)
本文中添加如下(用cat 命令查看)
[root@localhost ~]#cat /etc/vsftpd/vftpuser.txtx
hope
hope
- 生成虛擬用戶的db文件
[root@localhost ~]#db_load -T -t hash -f /etc/vsftpd/vftpuser.txtx /etc/vsftpd/vftpuser.db
- 生成虛擬用戶的認證文件
[root@localhostvsftpd]# vi /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=denyfile=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
注釋掉/etc/pam.d/vsftpd中所有的內(nèi)容 反正已經(jīng)不要本地用戶的認證了
特別注意 以下區(qū)別
32位系統(tǒng)增加以下兩句:
auth required pam_userdb.so db=/etc/vsftpd/vftpuser
account required pam_userdb.so db=/etc/vsftpd/vftpuser
64位系統(tǒng)增加以下兩句:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser
account required /lib64/security/pam_userdb.sodb=/etc/vsftpd/vftpuser
這里我發(fā)現(xiàn)加了db后綴以后就不識別數(shù)據(jù)庫了
注:db=/etc/vsftpd/vftpuser 中的vftpuser 是你生成的虛擬用戶的db文件
- 創(chuàng)建每個虛擬用戶自己的配置文件
配置文件的路徑是 /etc/vsftpd/vsftpd.conf 中的
user_config_dir=/etc/vsftpd/vuser_conf路徑
在 /etc/vsftpd/vuser_conf/下D面創(chuàng)建以用戶名為名稱的文件(名稱是/etc/vsftpd/vftpuser.txtx 下面的奇數(shù)行)
[root@localhostvsftpd]# mkdir vuser_conf
[root@localhostvsftpd]# vi /etc/vsftpd/vuser_conf/hope
內(nèi)容如下
local_root=/var/www(虛擬用戶的根目錄根據(jù)實際修改)
write_enable=YES (可寫)
allow_writeable_chroot=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022
by default, virtual users are treated with anonymous (i.e. maxi-mally restricted) privilege.
默認情況下估脆,匿名用戶所有上傳下載,所使用的用戶都是ftp用戶的權限座云,若要上傳文件疙赠,則需要ftp用戶有寫的權限,若要下載朦拖,則需要ftp用戶有讀的權限棺聊,也就是說一般情況下,ftp用戶對文件有讀權限就對文件有下載權限了文件有三種權限贞谓,文件所有人限佩,文件所有組,文件的其他人裸弦,這個anon_world_readable_only參數(shù)意思是祟同,當他為YES時候,文件的其他人必須有讀的權限才允許下載理疙,單單所有人為ftp且有讀權限是無法下載的晕城,必須其他人也有讀權限,才允許下載窖贤,這是為安全性的一方面考慮砖顷,若為NO則只要ftp用戶對文件有讀權限即可下載
- 給文夾權限(否則不能上傳 權限可自定 本人給的是 777)
[root@localhostvsftpd]# chmod 777 /var/www/
- 重啟vsftpd
[root@localhostvsftpd]# systemctl restart vsftpd
ftp數(shù)字代碼意義
110 重新啟動標記應答
120 服務在多久時間內(nèi)ready
125 數(shù)據(jù)鏈路埠開啟,準備傳送
150 文件狀態(tài)正常赃梧,開啟數(shù)據(jù)連接端口
200 命令執(zhí)行成功
202 命令執(zhí)行失敗
211 系統(tǒng)狀態(tài)或是系統(tǒng)求助響應
212 目錄的狀態(tài)
213 文件的狀態(tài)
214 求助的訊息
215 名稱系統(tǒng)類型
220 新的聯(lián)機服務ready
221 服務的控制連接已關閉滤蝠,可以注銷
225 數(shù)據(jù)連接開啟,但無傳輸動作
226 關閉數(shù)據(jù)端口授嘀,請求的文件操作成功
227 進入passive mode
230 使用者登入
250 請求的文件操作完成
257 顯示目前的路徑名稱
331 用戶名稱正確物咳,需要密碼
332 登入時需要賬號信息
350 請求的操作需要進一步的命令
421 無法提供服務,關閉控制連接
425 無法開啟數(shù)據(jù)鏈路
426 關閉聯(lián)機蹄皱,終止傳輸
450 請求的操作未執(zhí)行
451 命令終止览闰,有本地的錯誤
452 未執(zhí)行的命令,磁盤空間不足
500 格式錯誤巷折,無法識別命令
501 參數(shù)語法錯誤
502 命令執(zhí)行失敗
503 命令順序錯誤
504 命令所接的參數(shù)不正確
530 未登入
532 儲存文件需要賬戶登入
550 未執(zhí)行請求的操作
551 請求的命令終止压鉴,類型未知
552 請求的文件終止,儲存位溢出
553 未執(zhí)行請求的命令锻拘,名稱不正確
二油吭、sftp
sftp有以下優(yōu)點
- 從安全方面看,sftp會更安全一點
- 線上服務器提供在線服務,對用戶需要控制上鞠,只能讓用戶在自己的home目錄下活動
- 用戶只能使用sftp际邻,不能ssh到機器進行操作
配置步驟
- 創(chuàng)建sftp服務用戶組,創(chuàng)建sftp服務根目錄
groupadd sftp
#此目錄及上級目錄的所有者必須為root芯丧,權限不高于755芍阎,此目錄的組最好設定為sftp
mkdir /data/sftp
chown -R root:sftp /data/sftp
chmod -R 0755 /data/sftp
- 修改sshd配置文件
cp /etc/ssh/{sshd_config,_bk} #備份配置文件
vi /etc/ssh/sshd_config
注釋掉/etc/ssh/sshd_config文件中的此行代碼:
Subsystem sftp /usr/libexec/openssh/sftp-server
添加如下代碼:
Port 2222
Subsystem sftp internal-sftp -l INFO -f AUTH
Match Group sftp
ChrootDirectory /data/sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -l INFO -f AUTH
凡是在用戶組sftp里的用戶,都可以使用sftp服務缨恒;使用sftp服務連接上之后谴咸,可訪問目錄為/data/sftp/username
舉個例子:
test是一個sftp組的用戶,它通過sftp連接服務器上之后骗露,只能看到/data/sftp/test目錄下的內(nèi)容
test2也是一個sftp組的用戶岭佳,它通過sftp連接服務器之后,只能看到/data/sftp/test2目錄下的內(nèi)容
- 創(chuàng)建sftp用戶
#創(chuàng)建test sftp家目錄:test目錄的所有者必須是root萧锉,組最好設定為sftp珊随,權限不高于755
mkdir /data/sftp/test
chmod 0755 /data/sftp/test
chown root:sftp /data/sftp/test
useradd -g sftp -s /sbin/nologin test #添加用戶,參數(shù)-s /sbin/nologin禁止用戶通過命令行登錄
- 在test目錄下創(chuàng)建一個可以寫的upload目錄
mkdir /data/sftp/test/upload
chown -R test:sftp /data/sftp/test/upload
注:sftp服務的根目錄的所有者必須是root柿隙,權限不能超過755(上級目錄也必須遵循此規(guī)則)叶洞,sftp的用戶目錄所有者也必須是root,且最高權限不能超過755。
- 啟動sftp
systemctl restart sshd