1. 程式人生 > >ftp文件共享服務詳解

ftp文件共享服務詳解

地址 關閉 ble conn 允許 window 自身 創建 跨平臺

ftp

文件共享服務,文件的上傳下載 跨平臺,tcp協議 21號(命令端口) 20號(數據端口,主動模式) 默認情況

ftp服務運行被動模式

vsftpd:軟件 非常安全的
rpm -qi vsftpd
vsftpd is a Very Secure FTP daemon. It was written completely from
scratch.


主動模式:
被動模式:
驗證:
默認是在被動模式下,被動模式和主動模式可以切換


主動:
server client

20 21 n m
<-------------

-------------->



---------------------------------------->

<---------------------------------------

被動:
server client
隨機端口 21 n m
3000-3005 <---------------

---------------->

<--------------------------------------------

---------------------------------------------


客戶端工具:
windows:firefox、ie、fileZilla
linux:lftp、ftp、sftp

思路:
1、關閉防火墻和selinux
2、配置yum源
3、軟件三步曲(安裝|確認是否安裝成功|查看軟件列表)
4、了解配置文件
5、通過需求修改配置文件
6、測試驗證

步驟:
1、
2、
3、
rpm -qc vsftpd
/etc/logrotate.d/vsftpd 日誌輪轉
/etc/pam.d/vsftpd 驗證
/etc/vsftpd/ftpusers 用戶訪問控制列表(黑名單)
/etc/vsftpd/user_list 用戶訪問控制列表(可黑可白)
/etc/vsftpd/vsftpd.conf 主配置文件

/var/ftp 匿名用戶的默認目錄

/var/ftp/pub 匿名用戶的擴展目錄

/usr/sbin/vsftpd 二進制命令
/etc/rc.d/init.d/vsftpd 啟動腳本

4、了解配置文件
anon:代表匿名用戶
local:代表本地用戶
# cat /etc/vsftpd/vsftpd.conf |grep -v ^#
anonymous_enable=YES 開啟匿名用戶
local_enable=YES 開啟本地用戶
write_enable=YES 本地用戶可寫
local_umask=022 ——>755 本地用戶的默認權限
dirmessage_enable=YES 開啟訪問消息
xferlog_enable=YES 啟用日誌
connect_from_port_20=YES 默認開啟20號端口(支持主動和被動模式,默認是被動模式)
xferlog_std_format=YES 日誌格式
listen=YES 獨立服務

pam_service_name=vsftpd 認證模塊
userlist_enable=YES 啟用用戶列表
tcp_wrappers=YES 支持tcp_wrappers功能


5、不修改配置文件
測試驗證
client:192.168.5.2
yum -y install lftp ftp
結果:本地用戶可以上傳下載文件;匿名用戶不可以上傳只能下載文件



demo1:允許匿名用戶上傳文件、創建目錄重命名等


1、vim /etc/vsftpd/vsftpd.conf

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
2、重啟服務

註意:
不要把/var/ftp目錄的權限修改為777或者o+w,因為會導致報錯。
通常的做法是在/var/ftp目錄裏創建一個子目錄,修改子目錄的權限為777就可以,匿名用戶上傳的文件保存到子目錄裏就可以。

2、匿名用戶下載其他匿名用戶所上傳的文件
vim /etc/vsftpd/vsftpd.conf

anon_umask=022

重啟服務

demo2:開啟本地用戶的消息功能


useradd user01
echo “welcome to uplook” >/home/user01/.message

banner_file=/etc/vsftpd/banner
vim /etc/vsftpd/banner
@@@@@@@@@@@@
@ @
@ ^ ^ @
@ _ @

demo3:將所有本地用戶禁錮在自己的家裏面



chroot_local_user=YES 所有用戶都禁錮

需求1:只允許user01用戶來回切換,其他用戶禁錮
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
echo user01>/etc/vsftpd/chroot_list
需求2:只禁錮user02用戶,其他人都可以切換
#chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

demo4:

ftp服務自身的用戶訪問控制
ftpusers 黑名單
user_list 可黑可白

echo user01 >ftpusers
# ftp 192.168.5.1
Connected to 192.168.5.1 (192.168.5.1).
[email protected]@@@@@@@@@@@
[email protected] @
[email protected] ^ ^ @
[email protected] _ @
220
Name (192.168.5.1:root): user01
331 Please specify the password.
Password:
530 Login incorrect. userlist_deny=NO,echo user01>> user_list
Login failed.
ftp>

# ftp 192.168.5.1
Connected to 192.168.5.1 (192.168.5.1).
220 (vsFTPd 2.2.2)
Name (192.168.5.1:root): user01
530 Permission denied. userlist_deny=YES(default) echo user01>>ftpusers
Login failed.

如果ftpusers和user_list文件沖突,拒絕優先。

demo5:更改匿名用戶和本地用戶的ftp家目錄
默認:anon的家 /var/ftp
local的家 /home/$username

mkdir /ftp/data -p
mkdir /local/data -p

vim vsftpd.conf

anon_root=/ftp/data
local_root=/local/data

其他訪問控制:

max_clients:允許多少個鏈接(最大連接數)默認2000
max_per_ip:每個IP地址的最大連接數 默認沒有限制

local_max_rate:限制本地用戶下載速率,默認沒有限制

tcp_wrappers:訪問控制的一個工具,類似防火墻,但是其功能沒有防火墻強大;配置簡單。
/etc/hosts.deny
/etc/hosts.allow

./configure --help --enable-libwrap
rpm

# ldd /usr/sbin/vsftpd |grep libwrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f13adcf9000)

# ldd /usr/sbin/sshd|grep libwrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f9a0f28e000)

訪問控制機制:先去匹配/etc/hosts.allow,再去匹配/etc/hosts.deny;如果兩個文件都沒有,全部都允許;如果兩個文件都存在hosts.allow優先

需求:
vim /etc/hosts.deny
vsftpd,sshd:all 禁止所有人
vsftpd:192.168.5.0/255.255.255.0 EXCEPT 192.168.5.254
vsftpd:all EXCEPT .uplookg.com
vsftpd:192.168.5.1

註意:子網掩碼不支持/24/8/16這種寫法


練習一:
搭建一個ftp服務器,要求如下:
1、匿名用戶可以上傳下載文件,同時也可以下載其他人所上傳的文件,並且所有匿名用戶上傳的文件的屬主都是root,放在/ftp/data目錄裏。
mkdir /ftp/data -p
vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022
chown_uploads=YES
chown_username=root
anon_root=/ftp

重啟服務:

chmod o+w /ftp/data

2、創建一個本地用戶zhangsan(自己名字),可以訪問ftp服務但是不能登錄操作系統,並且只能在自己的家裏活動。
useradd zhangsan -s /sbin/nologin
chroot_local_user=YES 禁錮所有本地用戶

3、zhangsan用戶可以上傳下載文件,並且所上傳的文件都放在/local/data下
mkdir /local/data -p
vim vsftpd.conf
...
local_root=/local/data
4、在你的本地主機/tmp/zhangsan(自己名字)目錄下創建5個文件,通過客戶端工具以匿名用戶身份將整個以你名字命名的目錄上傳到服務器192.168.5.1上。
mkdir /tmp/zhangsan
touch /tmp/zhangsan/file{1..5}

lftp 192.168.5.1:/> mirror -R /tmp/zhangsan/ data/ 上傳本地目錄到遠端

5、使用客戶端工具(除了瀏覽器)用本地用戶redhat(密碼123)下載192.168.5.1上的“2016-04-18”目錄到你的本地/tmp/zhangsan(自己名字)裏
lftp [email protected]:~> mirror /ftp/2016-04-18/ /tmp/zhangsan/ 下載遠端到本地
6、不允許192.168.5.2訪問你的ftp服務器,但是只允許192.168.5.1訪問
vim /etc/hosts.deny
vsftpd:192.168.5.2

vim /etc/hosts.allow
vsftpd:all EXCEPT 192.168.5.2 不生效,和hosts.deny一起使用

7、把被動連接的端口範圍控制在2000~2050之間
pasv_enable=YES 可以不寫,默認就是被動模式
pasv_max_port=2050
pasv_min_port=2000

練習二:
將vsftpd服務托管給xinetd服務管理
# service xinetd status
xinetd (pid 18628) is running...
創建子配置文件在/etc/xientd.d/vsftpd
# cat vsftpd
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
# allows crc checksumming etc.
service ftp
{
disable = no
flags = IPv4
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_failure += USERID
}

vim /etc/vsftpd/vsftpd.conf
...
linsen=NO

重啟服務xined:
service xinetd restart

# netstat -tlnp|grep 21
tcp 0 0 :::21 :::* LISTEN 18628/xinetd

測試驗證



ftp文件共享服務詳解