FTP

FTP
(File Transfer Protocol) 文件傳輸協議,在互聯網上進行文件傳輸的協議,用於在Internet上控制文件的雙向傳輸,FTP服務端通常部署在企業內網,具有容易搭建,方便管理,安全穩定的特性。

TCP20端口 FTP數據連接 用於數據傳輸:上傳、下載數據
TCP21端口 FTP控制連接 用於接受客戶端發出的相關FTP命令與參數
'網絡文件共享服務主流:ftp、nfs、samba'

FTP登錄用戶

匿名用戶--->系統用戶
系統用戶--->一般關閉
虛擬用戶--->系統用戶

FTP傳輸模式

'主動模式:服務端通過20端口主動向客戶端連接,傳輸數據。主動模式防火牆需要打開21和20端口
被動模式:服務端啓動隨機端口,等待客戶端發起連接,進行數據傳輸 防火牆只打開21和20端口,被動模式FTP不能下載數據'

總結:
   FTP服務端啓用防火牆,開啓21/20端口,這時FTP只能工作在主動模式
     FTP客戶端開啓防火牆,這時FTP只能選擇工作在被動模式
     FTP客戶端和FTP服務端都有防火牆,那麼將無法使用FTP主動和被動模式

FTP服務安裝配置

'基礎環境準備'
[root@yaoxiaorong ~]# uname -r
3.10.0-693.el7.x86_64
[root@yaoxiaorong ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core) 
'關閉防火牆以及selinux'
[root@yaoxiaorong ~]# systemctl stop firewalld
[root@yaoxiaorong ~]# systemctl disable firewalld
[root@yaoxiaorong ~]# setenforce 0
'安裝vsftpd服務並啓動服務'
[root@yaoxiaorong ~]# yum install vsftpd db4-utils -y
[root@yaoxiaorong ~]# systemctl start vsftpd

[root@yaoxiaorong ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

'注意:默認使用匿名用戶訪問共享目錄站點爲/var/ftp僅擁有下載權限'

/etc/vsftpd/vsftpd.conf配置文件註釋

[root@yaoxiaorong ~]# cat /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES      '是否啓用匿名用戶'
local_enable=YES                  '是否啓動本地用戶'
write_enable=YES                  '開啓全局上傳文件'
local_umask=022                    '控制本地用戶上傳文件默認權限,通過ftp上傳文件的默認遮罩碼'
anon_umask=022    '控制匿名用戶上傳文件的默認權限'
anon_upload_enable=YES      '允許匿名用戶上傳'
anon_mkdir_write_enable=YES  '允許創建目錄'
dirmessage_enable=YES            '配置用戶目錄顯示信息'
xferlog_enable=YES                    '啓動日誌'
xferlog_file=/var/log/vsftpd.log     '指定日誌位置,配置xferlog_enable使用'
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES          '是否作爲一個獨立守護進程運行'
chroot_local_user=YES     '禁錮所有用戶在用戶目錄下'
chroot_lost_enable=YES   '配合chroot_list_file使用'
chroot_list_file=/etc/vsftpd/chroot_list   '禁錮用戶列表'
pam_service_name=vsftpd   'PAM認證文件'
userlist_enable=YES     'ftpusers文件下的用戶都被拒絕登陸訪問'
tcp_wrappers=YES       
guest_enable=YES      '開啓虛擬用戶'
guest_username=www      'FTP虛擬用戶對應的系統用戶'
user_config_dir=/etc/vsftpd/ftplogin   '授權FTP虛擬用戶所在目錄'

權限控制

local_root=/data/ftp   指定本地用戶訪問目錄站點
anon_root=/data/ftp   指定匿名用戶訪問目錄站點

資源控制

anon_max_rate=500000   匿名用戶限速
local_max_rate=800000   本地用戶限速
max_clients=100              同時能接收多少請求
max_per_ip=2                  一個IP同時能有多少連接

vsftpd虛擬用戶配置
準備環境,關閉防火牆和selinux

[root@yaoxiaorong ~]# setenforce 0
[root@yaoxiaorong ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@yaoxiaorong ~]# cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 
[root@yaoxiaorong ~]# systemctl stop firewalld
[root@yaoxiaorong ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

vsftpd虛擬用戶的配置步驟如下:

'安裝依賴的程序'
[root@yaoxiaorong ~]# cd /etc/yum.repos.d/
[root@yaoxiaorong ~]# yum -y install wget
[root@yaoxiaorong ~]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
[root@yaoxiaorong yum.repos.d]# sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo
[root@yaoxiaorong yum.repos.d]# sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/CentOS7-Base-163.repo
[root@yaoxiaorong ~]# yum -y install epel-release
[root@yaoxiaorong ~]# yum -y install vsftpd
[root@yaoxiaorong ~]# yum -y install db4*  '安裝db4工具'
創建文本格式的用戶名、密碼列表,例如添加兩個用戶tom,yao,密碼分別爲123、456

[root@yaoxiaorong ~]# echo "tom" >> /etc/vsftpd/vu.list
[root@yaoxiaorong ~]# echo "123" >> /etc/vsftpd/vu.list
[root@yaoxiaorong ~]# echo "yao" >> /etc/vsftpd/vu.list
[root@yaoxiaorong ~]# echo "456" >> /etc/vsftpd/vu.list
[root@yaoxiaorong ~]# cat /etc/vsftpd/vu.list 
456
tom
123
yao
456      '用戶名和密碼都是對應的,前面輸入的是賬戶,後面是密碼'
'將剛創建的文本格式用戶名、密碼文件使用db4工具轉換成數據庫文件'
-T表示轉換,-t表示加密方式使用hash算法加密
[root@yaoxiaorong ~]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
'將文件權限設置爲600,提高虛擬用戶賬戶文件的安全性,避免數據外泄'
[root@yaoxiaorong ~]# chmod 600 /etc/vsftpd/vu.*
[root@yaoxiaorong ~]# ll /etc/vsftpd/vu.*
-rw-------. 1 root root 12288 Aug  8 17:26 /etc/vsftpd/vu.db
-rw-------. 1 root root    20 Aug  8 17:18 /etc/vsftpd/vu.list

添加虛擬用戶的映射賬戶、創建ftp根目錄。例如將使用的ftp根目錄設置爲/var/ftproot 映射賬號的名稱爲vftp

[root@yaoxiaorong ~]# useradd -d /var/ftproot -s /sbin/nologin vftp
[root@yaoxiaorong ~]# chmod 755 /var/ftproot
[root@yaoxiaorong ~]# ll -d /var/ftproot
drwxr-xr-x. 3 vftp vftp 78 Aug  8 17:50 /var/ftproot
'爲虛擬用戶建立PAM認證'
[root@yaoxiaorong ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
[root@yaoxiaorong ~]# vim /etc/pam.d/vsftpd
#%PAM-1.0
auth  required  pam_userdb.so db=/etc/vsftpd/vu
account  required pam_userdb.so db=/etc/vsftpd/vu

添加虛擬用戶支持,修改配置文件

 [root@yaoxiaorong ~]# echo 'guest_enable=YES' >> /etc/vsftpd/vsftpd.conf    '允許其他人可以登陸'
[root@yaoxiaorong ~]# echo 'guest_username=vftp' >> /etc/vsftpd/vsftpd.conf     '添加其他用戶名字爲vftp'
[root@yaoxiaorong ~]# echo 'user_config_dir=/etc/vsftpd/vusers_dir' >> /etc/vsftpd/vsftpd.conf
[root@yaoxiaorong ~]# echo 'allow_writeable_chroot=YES' >>/etc/vsftpd/vsftpd.conf 
'創建/etc/vsftpd/vusers_dir目錄,使tom可以上傳文件和創建目錄,而yao只能默認的下載權限'
[root@yaoxiaorong ~]# mkdir /etc/vsftpd/vusers_dir
[root@yaoxiaorong ~]# ll /etc/vsftpd
total 36
-rw-------. 1 root root   125 Aug  3  2017 ftpusers
-rw-------. 1 root root   361 Aug  3  2017 user_list
-rw-------. 1 root root  5116 Aug  8 18:08 vsftpd.conf
-rwxr--r--. 1 root root   338 Aug  3  2017 vsftpd_conf_migrate.sh
-rw-------. 1 root root 12288 Aug  8 17:26 vu.db
-rw-------. 1 root root    20 Aug  8 17:18 vu.list
drwxr-xr-x. 2 root root     6 Aug  8 18:21 vusers_dir
'使tom用戶可以上傳文件,創建目錄'
[root@yaoxiaorong ~]# echo 'anon_upload_enable=YES' >> /etc/vsftpd/vusers_dir/tom     允許匿名用戶上傳
[root@yaoxiaorong ~]# echo 'anon_mkdir_write_enable=YES' >>/etc/vsftpd/vusers_dir/tom   允許匿名用戶創建目錄,但是不能刪除
[root@yaoxiaorong ~]# echo 'anon_umask=022' >> /etc/vsftpd/vusers_dir/tom   控制匿名用戶上傳文件文件的默認權限
[root@yaoxiaorong ~]# echo 'anon_other_write_enable=YES' >> /etc/vsftpd/vusers_dir/tom      允許匿名用戶創建和刪除目錄
'使yao用戶有默認的下載權限,創建一個名叫yao的空文件'
[root@yaoxiaorong ~]# touch /etc/vsftpd/vusers_dir/yao
'啓動服務'
[root@yaoxiaorong ~]# systemctl start vsftpd
[root@yaoxiaorong ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
root@yaoxiaorong ~]# ss -antl
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128     *:22                  *:*                  
LISTEN     0      100    127.0.0.1:25                  *:*                  
LISTEN     0      32     :::21                 :::*                  
LISTEN     0      128    :::22                 :::*                  
LISTEN     0      100       ::1:25                 :::*    

使用腳本創建vsftpd虛擬用戶配置

[root@yaoxiaorong ~]# vim ftp.sh
#!/bin/bash
yonghu=tom
yonghu2=jerry
STOREAGE=/etc/vsftpd/vusers_dir

setenforce 0
sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld

cd /etc/yum.repos.d/
mv * /tmp/
curl -o 163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
sed -i 's/\$releasever/7/g' /etc/yum.repos.d/163.repo
sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/163.repo

yum -y install epel-release &>/dev/null
yum -y install vsftpd  &>/dev/null
yum -y install db4* &>/dev/null

echo "$yonghu" > /etc/vsftpd/vu.list
echo '123' >> /etc/vsftpd/vu.list
echo "$yonghu2" >> /etc/vsftpd/vu.list
echo '456' >> /etc/vsftpd/vu.list

db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
chmod 600 /etc/vsftpd/vu.*
useradd -d /var/ftproot -s /sbin/nologin vftp
chmod 755 /var/ftproot/

mv /etc/pam.d/vsftpd{,.bak}
cat > /etc/pam.d/vsftpd <<EOF
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu
EOF

echo 'guest_enable=YES' >> /etc/vsftpd/vsftpd.conf
echo 'guest_username=vftp' >> /etc/vsftpd/vsftpd.conf
echo 'user_config_dir=/etc/vsftpd/vusers_dir' >> /etc/vsftpd/vsftpd.conf
echo 'allow_writeable_chroot=YES' >>/etc/vsftpd/vsftpd.conf
if [ ! -d $STOREAGE ];then
        mkdir -p $STOREAGE
fi
echo 'anon_upload_enable=YES' >> /etc/vsftpd/vusers_dir/$yonghu
echo 'anon_mkdir_write_enable=YES' >> /etc/vsftpd/vusers_dir/$yonghu
echo 'anon_umask=022' >> /etc/vsftpd/vusers_dir/$yonghu
echo 'anon_other_write_enable=YES' >> /etc/vsftpd/vusers_dir/$yonghu
touch /etc/vsftpd/vusers_dir/$yonghu1

systemctl start vsftpd
systemctl enable vsftpd
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章