網絡文件共享服務-vsftp
阿新 • • 發佈:2018-10-23
network dir 結構 url 名稱解析 啟動服務 pasv 是不是 解析 文件傳輸協議FTP
1、File Transfer Protocol 早期的三個應用級協議之一 2、基於C/S結構 3、雙通道協議: 數據和命令連接 數據連接則是從命令決定傳輸數據開始到數據傳輸結束,這個連接則關閉了 客戶端發起請求服務端響應、雙方正式建立連接。而結束,這是命令連接的正常工作邏輯 數據連接是臨時根據命令需求建立的、根本目的是為了客戶端上傳數據給服務端 數據連接誰給打開 數據連接如果是為服務器端主動去連接客戶端的稱為主動模式 由客戶端發請求、服務端響應、稱為被動模式 FTP多數都是工作在被動模式下,由客戶端發請求來連接服務器 4、數據傳輸格式: 二進制(默認)和文本 5、兩種模式:服務器角度 主動(PORT style):服務器主動連接 命令(控制):客戶端:隨機port --- 服務器:tcp21 數據:客戶端:隨機port ---服務器:tcp20 被動(PASV style):客戶端主動連接 命令(控制):客戶端:隨機port --- 服務器:tcp21 數據:客戶端:隨機port --- 服務器:隨機port 6、服務器被動模式數據端口示例: 227 Entering Passive Mode (172,16,0,1,224,59) 服務器數據端口為:224*256+59
FTP軟件介紹:
FTP服務器: Wu-ftpd,Proftpd,Pureftpd,ServU,IIS vsftpd:Very Secure FTP Daemon,CentOS默認FTP服務器 高速,穩定,下載速度是WU-FTP的兩倍 ftp.redhat.com數據:單機最多可支持15000個並發 客戶端軟件: ftp,lftp,lftpget,wget,curl ftp -A ftpserver port -A主動模式 –p 被動模式 lftp –u username ftpserver lftp username@ftpserver lftpget ftp://ftpserver/pub/file gftp:GUI centos5 最新版2.0.19 (11/30/2008) filezilla,CuteFtp,FlashFXP,LeapFtp IE ftp://username:password@ftpserver
FTP服務
狀態碼: 1XX: 信息 125:數據連接打開 2XX: 成功類狀態 200:命令OK 230:登錄成功 3XX: 補充類 331:用戶名OK 4XX: 客戶端錯誤 425:不能打開數據連接 5XX: 服務器錯誤 530:不能登錄 用戶認證: 匿名用戶:ftp,anonymous,對應Linux用戶ftp 系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow 虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件 nsswitch:network service switch名稱解析框架 pam:pluggable authentication module 用戶認證 /lib64/security /etc/pam.d/ /etc/pam.conf
vsftpd服務
1、由vsftpd包提供
2、不再由xinetd管理
3、用戶認證配置文件:
/etc/pam.d/vsftpd
4、服務腳本:
/usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd
5、配置文件:
/etc/vsftpd/vsftpd.conf
man 5 vsftpd.conf
格式:option=value
註意:= 前後不要有空格
6、匿名用戶(映射為系統用戶ftp )共享文件位置:
/var/ftp
7、系統用戶共享文件位置:
用戶家目錄
8、虛擬用戶共享文件位置:
為其映射的系統用戶的家目錄
9、命令端口
listen_port=21
10、主動模式端口
connect_from_port_20=YES 主動模式端口為20
ftp_data_port=20 (默認) 指定主動模式的端口
11、被動模式端口範圍
linux 客戶端默認使用被動模式
windows 客戶端默認使用主動模式
pasv_min_port=6000 0為隨機分配
pasv_max_port=6010
12、使用當地時間
use_localtime=YES 使用當地時間(默認為NO,使用GMT)
13、匿名用戶
anonymous_enable=YES 支持匿名用戶
no_anon_password=YES(默認NO) 匿名用戶略過口令檢查
anon_world_readable_only (默認YES) 只能下載全部讀的文件
anon_upload_enable=YES 匿名上傳,註意:文件系統權限
anon_mkdir_write_enable=YES 匿名建目錄
anon_umask=0333 指定匿名上傳文件的umask,默認077
anon_other_write_enable=YES 可刪除和修改上傳的文件
chown_uploads=YES(默認NO) 指定上傳文件的默認的所有者和權限
chown_username=wang
chown_upload_mode=0644
14、Linux系統用戶
local_enable=YES 是否允許linux用戶登錄
write_enable=YES 允許linux用戶上傳文件
local_umask=022 指定系統用戶上傳文件的默認權限
guest_enable=YES 所有系統用戶都映射成guest用戶
guest_username=ftp 配合上面選項才生效,指定guest用戶
local_root=/ftproot guest用戶登錄所在目錄
15、禁錮所有系統用戶在家目錄中
chroot_local_user=YES(默認NO,不禁錮)禁錮系統用戶
16、禁錮或不禁錮特定的系統用戶在家目錄中,與上面設置功能相反
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
當chroot_local_user=YES時,則chroot_list中用戶不禁錮
當chroot_local_user=NO時,則chroot_list中用戶禁錮
17、wu-ftp日誌:
默認啟用
xferlog_enable=YES (默認)啟用記錄上傳下載日誌
xferlog_std_format=YES (默認) 使用wu-ftp日誌格式
xferlog_file=/var/log/xferlog (默認)可自動生成
vsftpd日誌:
默認不啟用
dual_log_enable=YES 使用vsftpd日誌格式,默認不啟用
vsftpd_log_file=/var/log/vsftpd.log(默認)可自動生成
18、登錄提示信息
ftpd_banner="welcome to mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt 優先上面項生效
目錄訪問提示信息
dirmessage_enable=YES (默認)
message_file=.message(默認)
信息存放在指定目錄下.message
19、使用pam(Pluggable Authentication Modules)完成用戶認證
pam_service_name=vsftpd
pam配置文件:/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers 默認文件中用戶拒絕登錄
正常情況下,任何一個文件通過網絡服務訪問時,他應該受控於兩個維度
1、受控於軟件本身定義的訪問控制規則
2、受控於文件系統
vsftpd匿名用戶配置示例
簡單示例:只要安裝好之後啟動服務就可以正常使用ftp
1、安裝vsftpd軟件
[root@node6 ~]#yum -y install vsftpd
2、啟動vsftpd服務
[root@node6 ~]#systemctl start vsftpd
3、通過客戶端來訪問做個簡單測試
[root@node7 ~]#lftp 192.168.137.56
lftp 192.168.137.56:~> ls
drwxr-xr-x 2 0 0 6 Aug 03 2017 pub
lftp 192.168.137.56:/> cd pub
lftp 192.168.137.56:/pub> ls
lftp 192.168.137.56:/pub> ls
-rw-r--r-- 1 0 0 23 Oct 22 12:26 issue
lftp 192.168.137.56:/pub> lcd /tmp
lcd ok, local cwd=/tmp
lftp 192.168.137.56:/pub> mget issue
23 bytes transferred
lftp 192.168.137.56:/pub> bye
[root@node7 ~]#ls /tmp/
issue
4、把服務端共享的文件權限改成600
[root@node6 /var/ftp/pub]#chmod 600 issue
[root@node6 /var/ftp/pub]#ll
total 4
-rw------- 1 root root 23 Oct 22 20:26 issue
5、再次通過客戶端連接然後下載此文件
[root@node7 ~]#lftp 192.168.137.56
lftp 192.168.137.56:/> cd pub/
lftp 192.168.137.56:/pub> ls
-rw------- 1 0 0 23 Oct 22 12:26 issue
lftp 192.168.137.56:/pub> mget issue
mget: Access failed: 550 Failed to open file. (issue)
lftp 192.168.137.56:/pub>
配置匿名用戶上傳、下載、等功能:
修改配置文件,打開允許匿名用戶上傳功能
[root@node6 /etc/vsftpd]#vim vsftpd.conf
#anon_upload_enable=YES
anon_upload_enable=YES
通過客戶端驗證
[root@node7 ~]#lftp 192.168.137.56
lftp 192.168.137.56:~> lcd /etc/
lcd ok, local cwd=/etc
lftp 192.168.137.56:~> put fstab
put: Access failed: 553 Could not create file. (fstab)
lftp 192.168.137.56:/>
正常情況下,ftp的用戶anonymous被映射為ftp用戶,而默認共享的pub目錄屬主屬組默認為root,而ftp用戶被映射為其它用戶是沒有寫權限,所以導致無法上傳,建議不要修改pub的權限,最好新建一個目錄用來上傳
解決方法:在pub同級目錄下新建一個目錄專門用來上傳,修改目錄的所屬組和屬主權限為ftp
[root@node6 /var/ftp]#mkdir upload
[root@node6 /var/ftp]#ls
pub upload
[root@node6 /var/ftp]#ll
total 0
drwxr-xr-x 2 root root 19 Oct 22 20:26 pub
drwxr-xr-x 2 root root 6 Oct 22 20:52 upload
[root@node6 /var/ftp]#chown -R ftp.ftp upload/
[root@node6 /var/ftp]#ll -ld upload/
drwxr-xr-x 2 ftp ftp 6 Oct 22 20:52 upload/
再次驗證客戶端
[root@node7 ~]#lftp 192.168.137.56/upload
cd ok, cwd=/upload
lftp 192.168.137.56:/upload> lcd /etc
lcd ok, local cwd=/etc
lftp 192.168.137.56:/upload> put fstab
595 bytes transferred
lftp 192.168.137.56:/upload>
切換到服務器上查看文件
[root@node6 /var/ftp]#cd upload/
[root@node6 /var/ftp]#ls -l upload/
total 4
-rw------- 1 ftp ftp 595 Oct 22 20:55 fstab
把上傳的文件屬主改成別的用戶、並修改文件權限:
編輯配置文件
[root@node6 /etc/vsftpd]#vim vsftpd.conf
#chown_uploads=YES
#chown_username=whoever
改為
chown_uploads=YES
chown_username=cobbler
chown_upload_mode=0644
創建cobbler用戶
[root@node6 /etc/vsftpd]#useradd cobbler
重啟vsftpd服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
通過客戶端驗證此舉設置是否成功
[root@node7 ~]#lftp 192.168.137.56/upload
cd ok, cwd=/upload
lftp 192.168.137.56:/upload> lcd /etc
lcd ok, local cwd=/etc
lftp 192.168.137.56:/upload> put passwd
1199 bytes transferred
lftp 192.168.137.56:/upload> ls
從服務器端查看文件屬性
[root@node6 /var/ftp]#cd upload/
[root@node6 /var/ftp/upload]#ll
total 8
-rw------- 1 ftp ftp 595 Oct 22 20:55 fstab
-rw-r--r-- 1 cobbler ftp 1199 Oct 22 21:04 passwd
在客戶端連接到服務器嘗試能否建立目錄
lftp 192.168.137.56:/upload> mkdir test
mkdir: Access failed: 550 Permission denied. (test)
lftp 192.168.137.56:/upload> rm fstab
rm: Access failed: 550 Permission denied. (fstab)
lftp 192.168.137.56:/upload> rm passwd
rm: Access failed: 550 Permission denied. (passwd)
lftp 192.168.137.56:/upload>
需要允許匿名用戶創建刪除文件或者目錄需要在服務器的配置文件裏面開啟如下兩項
[root@node6 /etc/vsftpd]#vim vsftpd.conf
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
修改完之後重啟服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
在客戶端上驗證
[root@node7 ~]#lftp 192.168.137.56/upload
cd ok, cwd=/upload
lftp 192.168.137.56:/upload> mkdir test
mkdir ok, ‘test‘ created
lftp 192.168.137.56:/upload> ls
-rw------- 1 14 50 595 Oct 22 12:55 fstab
-rw-r--r-- 1 1000 50 1199 Oct 22 13:04 passwd
drwx------ 2 14 50 6 Oct 22 13:10 test
lftp 192.168.137.56:/upload> rm fstab
rm ok, ‘fstab‘ removed
lftp 192.168.137.56:/upload> rm passwd
rm ok, ‘passwd‘ removed
lftp 192.168.137.56:/upload> rmdir test
rmdir ok, ‘test‘ removed
lftp 192.168.137.56:/upload> ls
lftp 192.168.137.56:/upload>
vsftpd匿名用戶配置示例
創建一個系統用戶,並修改密碼
[root@node6 /etc/vsftpd]#useradd ilinux
[root@node6 /etc/vsftpd]#echo 123456|passwd --stdin ilinux
Changing password for user ilinux.
passwd: all authentication tokens updated successfully.
客戶端登錄剛剛在服務器端創建的系統用戶,登錄上來之後顯示的是系統用戶的名稱,而匿名用戶沒有
[root@node7 ~]#lftp -u ilinux 192.168.137.56
Password:
lftp [email protected]:~> ls
lftp [email protected]:~> lcd /etc/
lcd ok, local cwd=/etc
lftp [email protected]:~> put issue
23 bytes transferred
lftp [email protected]:~> ls
-rw-r--r-- 1 1001 1001 23 Oct 22 13:19 issue
lftp [email protected]:~>
在服務器端ilinux的家目錄裏面查看從客戶端上傳上來的文件
每個用戶登錄ftp之後訪問的都是用戶的家目錄
為什麽匿名用戶訪問的是/var/ftp目錄,匿名用戶訪問的也是家目錄,是ftp的家目錄
[root@node6 /var/ftp/upload]#grep "^ftp" /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@node6 /var/ftp/upload]#ls /home/ilinux/
issue
系統用戶和匿名用戶受控方式是不一樣的,就算禁止匿名用戶上傳下載,系統用戶不受影響、正常能上傳和下載
把系統用戶映射為來賓帳號guest
先創建來賓用戶和來賓的目錄,然後需要把創建的目錄去掉寫權限要不然通過客戶端驗證會報錯誤提示
[root@node6 /var/ftp/upload]#useradd -d /data/ftproot vsguest
[root@node6 /var/ftp/upload]#chmod -w /data/ftproot/
[root@node6 /var/ftp/upload]#ls -ld /data/ftproot/
dr-x------ 2 vsguest vsguest 62 Oct 22 21:56 /data/ftproot/
[root@node6 /var/ftp/upload]#chmod +rx !$
chmod +rx /data/ftproot/
[root@node6 /var/ftp/upload]#ls -ld /data/ftproot/
dr-xr-xr-x 2 vsguest vsguest 62 Oct 22 21:56 /data/ftproot/
[root@node6 /var/ftp/upload]#
編輯配置文件增加兩項選項
[root@node6 /etc/vsftpd]#vim vsftpd.conf
#guest user
guest_enable=YES
guest_username=vsguest
重啟服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
復制測試文件到來賓目錄下,能區分開來是在此目錄下
[root@node6 /etc/vsftpd]#cp /etc/vsftpd/vsftpd.conf /data/ftproot/
在客戶端上測試:這裏上面說過要把來賓的目錄寫權限去掉要不然會提示500的錯誤提示
[root@node7 ~]#lftp -u ilinux 192.168.137.56
Password:
lftp [email protected]:~> pwd
ftp://[email protected]
lftp [email protected]:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
lftp [email protected]:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
lftp [email protected]:~> ls
lftp [email protected]:/> ls
-rw------- 1 0 0 5129 Oct 22 14:00 vsftpd.conf
lftp [email protected]:/>
在服務器上把剛才映射為來賓帳號的那兩項註釋掉然後再通過客戶端測試看是不是回到了它自己的家目錄裏面
[root@node6 /etc/vsftpd]#vim vsftpd.conf
#guest_enable=YES
#guest_username=vsguest
重啟服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
然後在home下的ilinux目錄下查看裏面的文件,再通過客戶端查看裏面的是否和這裏的看到的是一樣的文件
[root@node6 /var/ftp/upload]#ls /home/ilinux/
issue
測試客戶端上:
[root@node7 ~]#lftp -u ilinux 192.168.137.56
Password:
lftp [email protected]:~> ls
-rw-r--r-- 1 1001 1001 23 Oct 22 13:19 issue
lftp [email protected]:~>
lftp [email protected]:~> cd /etc/
一旦允許系統用戶登錄以後有個悲劇性的問題,它可以隨意遊蕩在整個系統之上,不光是自己的家目錄,如果服務器上有敏感信息,這樣一來用戶登錄上去之後直接可以下載造成信息泄露,建議最好用戶登錄上來之後只能呆在自己的家目錄裏面,別的目錄不讓它隨意切換
禁錮系統用戶在家目錄中示例:
要禁錮哪個用戶確保這個用戶的家目錄沒有寫權限,要不然會報錯,不讓使用
不過禁錮用戶不常用
修改配置文件裏面的參數
[root@node6 /etc/vsftpd]#vim vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
新建一個用戶
[root@node6 /etc/vsftpd]#useradd ik8s
[root@node6 /etc/vsftpd]#echo 123456|passwd --stdin ik8s
Changing password for user ik8s.
passwd: all authentication tokens updated successfully.
把用戶家目錄的寫權限去掉
[root@node6 /etc/vsftpd]#chmod -w /home/ik8s/
創建要禁錮的用戶列表
[root@node6 /etc/vsftpd]#vim /etc/vsftpd/chroot_list
ik8s
重啟服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
客戶端測試:
[root@node7 ~]#lftp -u ilinux,123456 192.168.137.56
lftp [email protected]:~> cd /etc/
lftp [email protected]:/etc> exit
[root@node7 ~]#lftp -u ik8s,123456 192.168.137.56
lftp [email protected]:~> cd /etc
cd: Access failed: 550 Failed to change directory. (/etc)
lftp [email protected]:/> ls
lftp [email protected]:/>
網絡文件共享服務-vsftp