详解FTP服务之vsftpd(附三种用户安装脚本)

FTP(File Transfer Protocol,文件传输协议)能够在网络中传输文档、图像、视频以及应用程序等多种类型的文件。在企业中大多数状况下,则是用户使用FTP从服务器上下载文件。
一个完整的FTP文件传输须要创建两种类型的链接,一种为控制文件传输的命令,称为控制链接;另外一种实现真正的文件传输,称为数据链接
控制链接:客户端但愿与FTP服务器创建上传下载的数据传输时,它首先向服务器TCP协议的21端口发起一个创建链接的请求,FTP服务器接受来自客户端的请求,完成链接的创建过程,这样的链接就称为FTP控制链接
数据链接:FTP控制链接创建后,便可开始传输文件,传输文件的链接称为FTP数据链接。FTP数据链接就是FTP传输数据的过程,它有主动传输模式和被动传输模式两种。
FTP数据传输原理
用户在使用FTP传输数据时,整个FTP创建链接的过程通过如下几个步骤
一、FTP服务器会自动对默认端口21进行监听,当某个客户端向这个端口请求创建链接时,便激活了FTP服务器上的控制进程,经过这个控制进程,FTP服务器对链接用户名、密码以及链接权限等进行身份验证
二、当FTP服务器身份验证完成后,FTP服务器和客户端之间还会创建一条用来传输数据的专有链接
三、FTP服务器在传输数据过程当中的控制将一直工做,并不断发出指令控制整个FTP传输数据,数据传输完毕后控制进程给客户端发送结束指令。
FTP传输模式
在创建数据传输的时候有两种传输模式,即主动模式和被动模式
主动模式(PORT模式)
主动模式的数据传输专有链接是在创建控制链接(用户身份验证完成后),首先由FTP服务器使用20端口主动向客户端进行链接,创建专用于传输数据的链接,这种方式在网络管理上比较好控制。FTP服务器上的端口21用于用户验证,端口20用于数据传输,只要将这两个端口开放就可使用FTP功能了,此时客户端只是出于接收状态。
被动模式(PASV模式)
被动模式与主动模式不一样,数据传输专有链接是在创建控制链接(用户身份验证后)由客户端向FTP服务器发起链接的。客户端使用哪一个端口,链接到FTP服务器的哪一个端口都是随机产生的,服务器并不参与数据的主动传输,只是被动接受。
FTP用户
匿名用户:它是指在FTP服务器中没有指定帐户,可是他仍然能够匿名访问某些公开的资源。
本地用户:它是指在FTP服务器上拥有帐户。在这类用户访问FTP服务器的时候,其默认的主目录就是帐户命名的家目录。可是他还能够变动到其余目录中去。
虚拟用户:在FTP服务器中,使用这类用户只能访问其主目录下的文件,而不能访问目录之外的文件,FTP服务器经过这种方式来保障服务器上其余文件的安全性。node

vsftpd简介
vsftpd(very secure FTP daemon,很是安全的FTP守护进程)是一款能够运行在Unix/Linux操做系统上,安全、易用、开放源代码的FTP服务器软件。linux

一、匿名用户登陆
vsftps服务启动后,默认就容许匿名用户(anonymous或ftp)链接到vsftpd服务器。默认匿名用户不能离开vsftpd服务器匿名用户目录/var/ftp,匿名用户只能下载文件,而没有权限上传文件到vsftpd服务器上。
[root@linux-node1 ~]# yum install -y vsftpd
[root@linux-node1 ~]# cat /etc/vsftpd/vsftpd.conf|egrep -v '^#|^$' ##默认配置
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YESvim

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@vsftpd ~]# vim /var/ftp/pub/.message
hello world
详解FTP服务之vsftpd(附三种用户安装脚本)centos

容许匿名用户上传、下载文件和建立目录
[root@linux-node1 ~]# vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@vsftpd ~]# cd /var/ftp/pub/
[root@vsftpd pub]# mkdir test
[root@vsftpd pub]# chmod o+w test/
[root@vsftpd vsftpd]# chmod 777 /var/ftp/pub/
[root@vsftpd vsftpd]# ll /var/ftp/
total 4
-rw-r--r-- 1 root root 0 Nov 19 16:25 123
drwxrwxrwx 3 root root 4096 Nov 19 23:05 pub
[root@vsftpd vsftpd]# /etc/init.d/vsftpd start
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
详解FTP服务之vsftpd(附三种用户安装脚本)
详解FTP服务之vsftpd(附三种用户安装脚本)
二、认证用户配置:
[root@vsftpd ~]# useradd -d /var/ftp ftpuser
[root@vsftpd ~]# echo '123456'|passwd --stdin ftpuser
[root@vsftpd vsftpd]# vim vsftpd.conf
anonymous_enable=NO
local_root=/var/ftp
chroot_local_user=YES
[root@vsftpd ~]# systemctl restart vsftpd
详解FTP服务之vsftpd(附三种用户安装脚本)
详解FTP服务之vsftpd(附三种用户安装脚本)
拒绝指定用户链接vsftpd服务器
一、编辑/etc/vsftpd/ftpusers文件
在默认状况下,这个文件内已经有一些拒绝链接的用户,在该文件的最后添加拒绝的用户就能够了
[root@vsftpd ~]# vim /etc/vsftpd/ftpusers
ftpuser
[root@vsftpd ~]# systemctl restart vsftpd
详解FTP服务之vsftpd(附三种用户安装脚本)
[root@linux-node2 ~]# wget ftp://ftpuser:123@10.0.0.100:21/123
--2018-11-23 20:53:55-- ftp://ftpuser:password@10.0.0.100/123
=> “123.1”
Connecting to 10.0.0.100:21... connected.
Logging in as ftpuser ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD not needed.
==> SIZE 123 ... done.
==> PASV ... done. ==> RETR 123 ... done.
[<=> ] 0 --.-K/s in 0s
2018-11-23 20:53:55 (0.00 B/s) - “123.1” saved [0]
三、虚拟用户设置:
匿名用户能够很好地保证服务器的安全性,可是对匿名用户的权限管理不够灵活。若是想对访问FTP的帐户给予更多的权限,就可使用本地帐户来实现。可是本地帐户默认状况下是能够登陆Linux系统的,这样对Linux系统来讲是一个安全隐患。使用虚拟用户能在灵活地赋予FTP用户权限的前提下,保证服务器乃至系统的安全。
虚拟用户并非一个合法的Linux系统帐户,可是他能够来登陆系统上运行的vsftpd服务器,当用户在链接上vsftpd服务器后,会被要求输入用户名和密码。服务器在拿到这个用户名和密码后,会调用相应的PAM认证模块对,和系统中的FTP认证文件进行比较。若是该用户名和密码与FTP认证文件中的某条记录相符就经过认证,该帐户就被映射成一个Linux下的本地帐户,而后根据该本地帐户对FTP资源进行访问,负责就断开该链接请求。
3.一、创建虚拟用户账号口令库文件
[root@linux-node1 vsftpd]# vim vulist
tom
123
[root@linux-node1 vsftpd]# yum install db4-utils -y
[root@linux-node1 vsftpd]# db_load -T -t hash -f vulist vuser.db (转化为伯克利格式)
[root@linux-node1 vsftpd]# chmod 600 vuser.*
3.二、创建虚拟用户映射的系统用户及根目录
[root@linux-node1 vsftpd]# useradd -d /var/vftp -s /sbin/nologin vuser
[root@linux-node1 vsftpd]# chmod 755 /var/vftp
3.三、创建虚拟用户的PAM认证文件
[root@linux-node1 vsftpd]# vim /etc/pam.d/vupam
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
3.四、修改vsftpd.conf,开启虚拟用户支持
[root@linux-node1 vsftpd]# vim vsftpd.conf
listen=YES
listen_address=10.0.0.103
listen_port=21
connect_from_port_20=YES
#pasv_min_port=2222
#pasv_max_port=2225
write_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
#pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
#max_clients=0
#max_per_ip=0安全

anonymous_enable=NO
anon_umask=022
#anon_root=/var/ftp
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
#anon_max_rate=0bash

local_enable=YES
local_umask=022
#local_root=/var/ftp
#chroot_local_user=YES
#local_max_rate=0服务器

guest_enable=YES
virtual_use_local_privs=YES ##centos7中必定要有
guest_username=vuser
pam_service_name=vupam
3.五、为不一样虚拟用户创建独立的配置文件
listen=YES
listen_address=10.0.0.103
listen_port=21
connect_from_port_20=YES
#pasv_min_port=2222
#pasv_max_port=2225
write_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
#pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
#max_clients=0
#max_per_ip=0网络

anonymous_enable=NO
anon_umask=022
#anon_root=/var/ftp
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
#anon_max_rate=0app

local_enable=YES
local_umask=022
#local_root=/var/ftp
#chroot_local_user=YES
#local_max_rate=0tcp

guest_enable=YES
virtual_use_local_privs=YES ##centos7中必定要有
guest_username=vuser
pam_service_name=vupam
user_config_dir=/etc/vsftpd/vuconf
[root@linux-node1 vsftpd]# mkdir /etc/vsftpd/vuconf
[root@linux-node1 vsftpd]# vim /etc/vsftpd/vuconf/tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
local_root=/var/ftp/pub/tom
[root@linux-node1 vsftpd]# mkdir /var/ftp/pub/tom
[root@linux-node1 vsftpd]# chmod 777 /var/ftp/pub/tom
[root@linux-node1 vsftpd]# vim /var/ftp/pub/tom/23
121234
[root@linux-node1 vsftpd]# /etc/init.d/vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
详解FTP服务之vsftpd(附三种用户安装脚本)
详解FTP服务之vsftpd(附三种用户安装脚本)
详解FTP服务之vsftpd(附三种用户安装脚本)
[root@linux-node2 ~]# wget ftp://tom:123@10.0.0.103:21/23
--2018-11-23 22:42:01-- ftp://tom:password@10.0.0.103/23
=> “23”
Connecting to 10.0.0.103:21... connected.
Logging in as tom ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD not needed.
==> SIZE 23 ... 5
==> PASV ... done. ==> RETR 23 ... done.
Length: 5 (unauthoritative)
100%[===================================>] 5 --.-K/s in 0s
2018-11-23 22:42:01 (662 KB/s) - “23” saved [5]

附一键安装脚本:

#!/bin/bash

time=$(date +%F-%H:%M)
Kernel=$(uname -r|awk -F. '{print $1}')

menu(){
cat <<EOF
1.[anonymous install]

2.[local_user(ftpuser) install]

3.[vuser_user(tom and andy) install]

4.[vuser_user(tom's home) install]

5.[exit]
EOF
echo -e "\033[36m ###################\033[0m"
read -p " please input your number:" a
num=$a
}

install(){
yum install -y vsftpd
}

sever-restart(){
if [ $Kernel -eq 3 ]
then
systemctl restart vsftpd
else
/etc/init.d/vsftpd restart
fi
}

anonymous(){
mkdir /var/ftp/pub/test
chmod o+w /var/ftp/pub/test
cat >>/etc/vsftpd/vsftpd.conf <<EOF

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF

sever-restart
}

local_user(){
useradd -d /var/ftp ftpuser
echo '123456'|passwd --stdin ftpuser

sed -i 's|anon_upload_enable=YES|#anon_upload_enable=YES|g' /etc/vsftpd/vsftpd.conf
sed -i 's|anon_mkdir_write_enable=YES|#anon_mkdir_write_enable=YES|g' /etc/vsftpd/vsftpd.conf
sed -i 's|anon_other_write_enable=YES|#anon_other_write_enable=YES|g' /etc/vsftpd/vsftpd.conf
sed -i 's|anonymous_enable=YES|anonymous_enable=NO|g' /etc/vsftpd/vsftpd.conf
cat >>/etc/vsftpd/vsftpd.conf <<EOF

local_enable=YES
local_umask=022
local_root=/var/ftp
chroot_local_user=YES
EOF

sever-restart
}

vuser(){
cat >/etc/vsftpd/vulist <<EOF
tom
123
andy
321
EOF

/usr/bin/db_load -T -t hash -f /etc/vsftpd/vulist /etc/vsftpd/vuser.db
if [ $? -ne 0 ]
then
/usr/bin/yum install pam pam- db4 db4-
/usr/bin/db_load -T -t hash -f /etc/vsftpd/vulist /etc/vsftpd/vuser.db
fi

chmod 600 /etc/vsftpd/vu*
cat /etc/passwd|grep vuser >>/dev/null 2>&1
if [ $? -ne 0 ]
then
useradd -d /var/vftp -s /sbin/nologin vuser
else
echo 'vuser is exsit,please change user name !'
exit 1
fi
chmod 700 /var/vftp
cat >/var/vftp/test <<EOF
hello world
ftpuser
EOF

cat >/etc/pam.d/vupam <<EOF
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
EOF

mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak_$time
cat >/etc/vsftpd/vsftpd.conf <<EOF
listen=YES
listen_port=21
connect_from_port_20=YES
#pasv_enable=YES
#pasv_min_port=2222
#pasv_max_port=2225
write_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
#pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
#max_clients=0
#max_per_ip=0

anonymous_enable=NO
#anon_umask=022
#anon_root=/var/ftp
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
#anon_max_rate=0

local_enable=YES
local_umask=022
#local_root=/var/ftp
#chroot_local_user=YES
#local_max_rate=0

guest_enable=YES
virtual_use_local_privs=YES
guest_username=vuser
pam_service_name=vupam
EOF

sever-restart
}

vuser-tom(){
cat >>/etc/vsftpd/vsftpd.conf <<EOF
user_config_dir=/etc/vsftpd/vuconf
EOF

mkdir /etc/vsftpd/vuconf
cat >/etc/vsftpd/vuconf/tom <<EOF
anon_upload_enable=YES
anon_mkdir_write_enable=YES
local_root=/var/ftp/pub/tom
EOF

mkdir -p /var/ftp/pub/tom
chmod 777 /var/ftp/pub/tom
cat >/var/ftp/pub/tom/test.txt <<EOF
hello world
tom
EOF

sever-restart
}
main(){
menu
netstat -antup|grep 22 >/dev/null 2>&1
if [ $? != 0 ]
then
install
fi

case "$num" in
1)echo 'Start installing vsftpd of anonymous!'
anonymous
;;
2)echo 'Start installing vsftpd of local_user(ftpuser)!'
local_user
;;
3)echo 'Start installing vsftpd of vuser_user(tom and andy)!'
vuser
;;
4)echo "Start installing vsftpd of vuser_user(tom's home)!"
vuser-tom
;;
5)echo "EXIT...."
exit 1
;;
)
echo "USAGE:please input your number:{1|2|3|4|5}"
exit 2
;;
esac
}
main $

注:无论可否解决你遇到的问题,欢迎相互交流,共同提升, QQ:931389630!

相关文章
相关标签/搜索