FTP介绍
FTP会话时包含了两个通道,一个叫控制通道,端口号21;一个叫数据通道,端口号20。
控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的。
数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。
简单地说,支持ftp协议的服务器就是ftp服务器,ftp协议的连接方式有两种,一种是命令连接,一种是数据连接,而ftp的数据连接方式也有两种,一种是主动模式,一种是被动模式。(FTP协议中,控制连接均有客户端发起,而数据连接有两种工作方式)
ps:主动模式要求客户端和服务器端同时打开并且监听一个端口以建立连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。
1.主动模式的工作原理(PORT模式)
1.客户端对服务器发起请求,连接的是服务器的21号端口,客户端的端口号N是大于1024的随机端口
2.服务器的21号端口给予客户端响应数据流
3.服务器打开20号端口去连接客户端的N+1的端口
4.客户端给予响应,数据开始传输
2.被动模式的工作原理(PASV模式)
1.客户端对服务器发起的请求连接是服务器的21号端口,客户端的端口号N是大于1024的随机端口
2.服务器的21号端口给予客户端响应
3.服务器打开一个大于1024的随机端口,客户端使用N+1端口号去连接服务器打开的端口
4.服务器给予响应,于是数据开始传输
需要注意的是:客户端如何连接服务器端的这个随机端口的呢?在命令连接阶段,服务器会传输172.16.1.1.113.26的字符串过去,前四个标识的是服务器的IP地址,而随机端口是通过后面两个字符计算得出的,计算法则为第一个乘以256加上第二个数,即客户端连接服务器端的这个随机端口号是113*256+26
vsftp提供3种远程的登录方式:
(1)匿名登录方式
就是不需要用户名,密码。就能登录到服务器电脑里面
(2)本地用户方式
需要帐户名和密码才能登录。而且,这个帐户名和密码,都是在你linux系统里面,已经有的用户。
(3)虚拟用户方式
同样需要用户名和密码才能登录。但是和上面的区别就是,这个用户名和密码,在你linux系统中是没有的(没有该用户帐号)
上述原文:https://blog.csdn.net/tshangshi/article/details/49617593
建立虚拟用户
在建立vsftpd用户时,我们一般是在linux下建立用户useradd的方式来访问ftp,但有时我们只想提供ftp服务,而避免用户用ftp的帐号去登录linux,采用一般的方式只能是限制该用户的访问权限,但还是避免不了用户登录进linux系统,所以比较好的方法是用vsftpd的虚拟用户。
很多情况下,我们希望限制ftp用户只能在其主目录下(root dir)下活动,不允许他们跳出主目录之外浏览服务器上的其他目录,这时候我就需要使用到chroot_local_user,chroot_list_enable,chroot_list_file这三个选项了。以下是对三个配置项的解释:
chroot_local_user #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
chroot_list_enable #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
chroot_list_file=/etc/vsftpd/chroot_list #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!
对于chroot_local_user与chroot_list_enable的组合效果,可以参考下表:
chroot_local_user=YES chroot_local_user=NO
chroot_list_enable=YES 1.所有用户都被限制在其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制 1.所有用户都不被限制其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,受到限制
chroot_list_enable=NO 1.所有用户都被限制在其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户 1.所有用户都不被限制其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户
让我们举个例子:
假设有ftp1, ftp2两个ftp用户, 计划让ftp1用户锁定在主目录下,不允许切换到其他目录, 但是允许ftp2用户自由切换目录,则可以分如下两种方式实现:
方式一:
令:
chroot_local_user=YES
chroot_list_enable=YES
/etc/vsftpd/chroot_list名单列表为:
ftp2
解释:chroot_local_user=YES将所有用户限定在主目录内,chroot_list_enable=YES表示要启用chroot_list_file, 因为chroot_local_user=YES,即全体用户都被“限定在主目录内”,所以总是作为“例外列表”的chroot_list_file这时列出的是那些“不会被限制在主目录下”的用户。
方式二:
令:
chroot_local_user=NO
chroot_list_enable=YES
/etc/vsftpd/chroot_list名单列表为:
ftp1
解释:chroot_local_user=NO则所有用户不被限定在主目录内,chroot_list_enable=YES表示要启用chroot_list_file, 因为chroot_local_user=NO,即全体用户都“不被限定在主目录内”,所以总是作为“例外列表”的chroot_list_file这时列出的是那些“会被限制在主目录下”的用户。
其他情况:
对于chroot_local_user和chroot_list_enable的组合还有这样两种情况:
chroot_local_user=YES
chroot_list_enable=NO
和
chroot_local_user=NO
chroot_list_enable=NO
当chroot_list_enable=NO时,就不再启用chroot_list_file,此时就是单纯的把全部用户限定或不限定在主目录下了!
上述原文出处: http://blog.csdn.net/bluishglc/article/details/42398811
现在开始安装
查看是否安装了vsftp rpm -qa |grep vsftp 卸载vsftp rpm -e vsftp 1.安装vsftp yum install -y vsftp
配置虚拟用户
2.建立虚拟用户口令库文件
进入/etc/vsftpd 建立虚拟用户列表文件vusers.list (创建用户user,创建多个用户接着往下排)
cd /etc/vsftpd
mkdir vusers
touch vusers.list
vim /vusers/vusers.list
3.生成vsftpd的认证文件
对这个用户vusrs.list生成认证文件
db_load -T -t hash -f vusers.list /etc/vsftpd/vusers/vsftpd_login.db
对这个文件授权
chmod 600 vsftpd_login.db
4.建立虚拟用户所需的PAM配置文件
先备份 cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
接着修改此文件 vim /etc/pam.d/vsftpd (加入下面内容,其他全部注释。)
auth required pam_userdb.so db=/etc/vsftpd/vusers/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vusers/vsftpd_login
5.建立虚拟用户要访问的目录并设置权限
新建宿主用户vuser(这里就是添加一个用户,用户名自己随意取,这个用户作为ftp登录的虚拟用户的宿主用户)
useradd vuser -d /ftp -s /bin/false (#用户目录为/ftp, 用户登录终端设为/bin/false(即使之不能登录系统) )
chmod 777 ftp
6.创建一个日志文件记录ftp日志
touch /var/log/ftp.log
7.修改/etc/vsftpd/vsftpd.conf文件
修改以下几项:没有打开的配置项 把前面#去掉
anonymous_enable=NO #禁用匿名用户登录
xferlog_file=/var/log/vsftpd.log (对应第六条的日志文件)
xferlog_std_format=YES #日志格式
listen=YES #设置vsftpd服务器是否以standalone模式运行。以standalone模式运行是一种较好的方式。有很多与服务器运行相关的配置命令,需要在此模式下才有效。注释listen默认值是yes
#listen_ipv6=YES
末尾添加以下配置项
guest_enable=YES
guest_username=vuser 此处对应第五条建立的vuser用户
user_config_dir=/etc/vsftpd/vusers #利用用户配置文件,可以实现对不同用户进行访问速度的控制,在各用户配置文件中定义local_max_rate=XX,即可
virtual_use_local_privs=YES #当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。
allow_writeable_chroot=YES #新版析vsfptd加入了安全需求,切根不允许写,要加这个选项。才可
pasv_enable=no #关闭被动模式,不启用随机端口,如果不关闭,会启用随机端口,因阿里拦截,就会有一个超时等待,这就是慢的原因
8.对不同虚拟用户设置不同权限
现在就用到了上条所述的 user_config_dir 这个属性了。在此目录下来创建不同的虚拟用户文件,来区分虚拟用户及其权限,例如第2条中的 user用户
cd /etc/vsftpd/vusers/
vim user 添加如下配置
local_root=/ftp (第5条创建的ftp根目录)
write_enable=YES
virtual_use_local_privs=YES
#当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。
9.限定用户只能在ftp主目录,不能切换到上级目录