Centos7下将FTP用户锁定在指定目录的解决办法

需求描述

  • 用vsftpd搭建一台文件服务器

  • 限制用户user1在/home/user1/screen目录,在其他目录上传输文件均失败

一、ftp基础知识

1.1 主动模式及被动模式

1、ftp采用两个端口控制:

A 20端口用于数据传输.

B 21端口用于控制,或指建立TCP连接.

2、主动方式连接过程:

[注意]:C表示客户端 S表示服务器端

A、 S端要开启20、21端口;

B、 C端一个随机端口连接S端21,这个随机范围1024-65536,同时发送命令port+x,指明数据端口C(X)->S(21);

C、 S端收到命令后,将返回一个ACK,S(21)->C(X);

D、 S端将用自己的20端口与C端的X+1端口相连,S(20)->C(X+1);

E、 C给S返回ACT,C(X+1)->S(20).

3、被动方式连接过程:

 

[注意]:C表示客户端 S表示服务器端

A、 S服务器端要开启21端口和大于1024tcp端口;

B、 C以一个随机端口X与S的21端口相连, 这个随机端口范围为1024~65535, 并发送命令 PASV. C(X) -> S(21)

C、 S收到命令, 返回一个ACK, 并在其中指明一个新的高位端口y. S(21) -> C(x)

D、 C发起 x+1端口到S的y的端口的连接.C(x+1) -> S(y)

E、 S返回一个ACK. S(y) ->C(x+1)

1.2 主被动配置方法

1.2.1 主动模式配置方法

connect_from_port_20=YES
#主动式连接使用的数据通道
​
pasv_enable=NO
#支持数据流的被动式连接模式

1.2.2 被动模式的配置方法

connect_from_port_20=NO
#主动式连接使用的数据通道
​
  
pasv_enable=YES
#支持数据流的被动式连接模式
  pasv_min_port=1024
  pasv_max_port=65536
#pasv模式中服务器传回的ip地址 
pasv_address (Default: (none - the address is taken from the incoming connected  socket) ) 

[注意:]

Vsftp主动模式和被动模式是可以共存的。

主动模式和被动模式的区别在于,主动模式下,ftp采用的是20端口传送数据,而被动模式下,ftp采用的是大于1024的随机端口。

二、部署过程

1、安装vsftpd

yum install vsftpd -y

文件目录如下:

[root@ldap-server screen]# rpm -ql vsftpd-3.0.2-25.el7.x86_64
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/lib/systemd/system-generators/vsftpd-generator
/usr/lib/systemd/system/vsftpd.service
/usr/lib/systemd/system/vsftpd.target
/usr/lib/systemd/system/vsftpd@.service
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-3.0.2
/usr/share/doc/vsftpd-3.0.2/AUDIT
/usr/share/doc/vsftpd-3.0.2/BENCHMARKS
/usr/share/doc/vsftpd-3.0.2/BUGS
/usr/share/doc/vsftpd-3.0.2/COPYING
/usr/share/doc/vsftpd-3.0.2/Changelog
/usr/share/doc/vsftpd-3.0.2/EXAMPLE
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.xinetd
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/hosts.allow
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/logins.txt
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2/README
/usr/share/doc/vsftpd-3.0.2/FAQ
/usr/share/doc/vsftpd-3.0.2/INSTALL
/usr/share/doc/vsftpd-3.0.2/LICENSE
/usr/share/doc/vsftpd-3.0.2/README
/usr/share/doc/vsftpd-3.0.2/README.security
/usr/share/doc/vsftpd-3.0.2/REWARD
/usr/share/doc/vsftpd-3.0.2/SECURITY
/usr/share/doc/vsftpd-3.0.2/SECURITY/DESIGN
/usr/share/doc/vsftpd-3.0.2/SECURITY/IMPLEMENTATION
/usr/share/doc/vsftpd-3.0.2/SECURITY/OVERVIEW
/usr/share/doc/vsftpd-3.0.2/SECURITY/TRUST
/usr/share/doc/vsftpd-3.0.2/SIZE
/usr/share/doc/vsftpd-3.0.2/SPEED
/usr/share/doc/vsftpd-3.0.2/TODO
/usr/share/doc/vsftpd-3.0.2/TUNING
/usr/share/doc/vsftpd-3.0.2/vsftpd.xinetd
/usr/share/man/man5/vsftpd.conf.5.gz
/usr/share/man/man8/vsftpd.8.gz
/var/ftp
/var/ftp/pub

 

2、修改配置文件

vim /etc/vsftpd/vsftpd.conf
....
1、修改的参数如下:
anonymous_enable=NO  //禁用匿名登陆
2、锁定用户目录:
chroot_local_user=YES 
3、启动被动模式
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=60000
 

3、设置锁定目录操作

  • 设置user1用户根目录不可写操作

    chmod a-w /home/user1
  • 创建文件目录screen并赋权

    mkdir /home/user1/file
    chown user1 /home/user1/file

4、启动服务

service vsftpd start
chkconfig vsftpd on

三、测试

 

 

 

Centos7下将FTP用户锁定在指定目录的解决办法