Linux Vsftpd


原文链接: Linux Vsftpd

CentOS 7中默认使用Firewalld做防火墙,所以修改iptables后,在重启系统后,根本不管用。

Firewalld中添加端口方法如下:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

firewall-cmd --add-service=ftp
firewall-cmd --add-service=ftp --permanent

  1. 启用root账号登录

    sed -i '/^root/{s/^/#/g}' /etc/vsftpd/ftpusers
    sed -i '/^root/{s/^/#/g}' /etc/vsftpd/user_list
    
    1. 取消匿名登陆
      anonymous_enable=YES ,改为 anonymous_enable=NO
      sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf

    2. 锁定登录用户默认限制在Home目录
      vi /etc/vsftpd/vsftpd.conf
      将底下三行 改为:
      ```sh
      chroot_local_user=YES

      但是chroot_list内的用户不受限制

      chroot_list_enable=YES
      chroot_list_file=/etc/vsftpd/chroot_list

    echo administrator >> /etc/vsftpd/chroot_list
    ```

重启
service vsftpd restart

## 1.使用yum在线安装
yum install vsftpd -y


## 2.允许用户登陆
使user_list​为NO,只允许列表内用户访问
sed -i 's/userlist_enable=YES/userlist_deny=NO/g' /etc/vsftpd/vsftpd.conf

echo user1  >> /etc/vsftpd/user_list
echo user2  >> /etc/vsftpd/user_list
echo user3  >> /etc/vsftpd/user_list
#添加允许的登录ftp的系统账号
 
## 3.安全设置
黑名单 (user_list优先匹配,ftpusers 后匹配)
cat /etc/vsftpd/ftpusers 
root
bin
daemon
adm
......
限制匿名账号
sed -i  s/anonymous_enable=YES/anonymous_enable=NO/ /etc/vsftpd/vsftpd.conf
echo ftp >>  /etc/vsftpd/ftpusers
 #禁用匿名用户登录,不再跳出pub目录


### 方法1.将登录后的用户限制在自己的家目录
vi /etc/vsftpd/vsftpd.conf 
 chroot_local_user=YES

### 方法2.登录用户默认限制在家目录,但是chroot_list内的用户不受限制
vi /etc/vsftpd/vsftpd.conf 
chroot_local_user=YES

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

echo administrator  >> /etc/vsftpd.chroot_list



## 4.ftp主目录取消写入权限
chmod -w /ftp站点目录
5.启动服务 如centos7
systemctl restart vsftpd
systemctl enable vsftpd  #加入开机启动

 
我用www用户作为web服务的运行身份 ,ftp站点也是www家目录。
useradd  -u 500  -M -s /sbin/nologin -g www  -d /var/www   www
passwd www
#设置www用户登录密码


groupadd pubftp
useradd    -M -s /sbin/nologin -g pubftp -d /home/ftpsite/public pubftp
chown pubftp:pubftp /home/ftpsite/public
passftp
chmod a-w 
echo pubftp >> /etc/vsftpd.chroot_list
userlist_deny=NO


连接报错:
vsftpd: refusing to run with writable root inside chroot() 错误的解决办法
避免一个安全漏洞,从 vsftpd 2.3.5 开始,chroot 目录必须不可写
chmod a-w /var/www 

FTP传输模式

文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件、上传文件、下载文件。
FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式。主被动模式均是以 FTP服务器端 为参照。

FTP主动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器,FTP服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。
这里写图片描述

FTP被动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,客户端提交 PASV命令,服务器会开启一个任意的端口(P >1024),并发送PORT P命令给客户端。客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
这里写图片描述

在企业实际环境中,如果FTP客户端与FTP服务端均开放防火墙,FTP需以主动模式工作,这样只需要在FTP服务器端防火墙规则中,开放20、21端口即可。

userlist_enable和userlist _deny选项不同时

注意:/etc/vsftpd/ftpuser不受任何配制项的影响,它总是有效,它总是一个黑名单。

userlist_enable=YES && userlist_deny=YES (default) <==黑名单,禁止 /etc/vsftpd/user_list 中的用户访问
userlist_enable=YES && userlist_deny=NO <==白名单,只允许/etc/vsftpd/user_list 中的用户访问

  1. 当userlist_enable=YES时,userlist_deny选项才会生效。
  2. 当userlist_enable=YES,userlist_deny=YES时,user_list是一个黑名单;
  3. 当userlist_enable=YES,userlist_deny=NO时,user_list是一个白名单。
    需要提醒的是,使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous

传输模式配置

开启被动模式:

connect_from_port_20=NO(默认为YES) #设置是否允许主动模式
pasv_enable=YES(默认为YES) #设置是否允许被动模式
pasv_min_port=30000(default:0(use any port))
pasv_max_port=30009(default:0(use any port))

开启主动模式:

connect_from_port_20=YES
pasv_enable=NO

上边配置只是开启所需模式要求的,其他配置看实际需求!

用户访问模式配置

vsftpd服务访问模式有三种:匿名用户模式,系统用户模式和虚拟用户模式!

匿名用户配置

Vsftpd默认以匿名用户访问,匿名用户默认访问的FTP服务器端路径为:/var/ftp/pub,匿名用户只有查看权限,无法创建、删除、修改。
这种模式下,不需改动配置文件,直接启动服务即可访问!

如果想要允许匿名用户能够上传、下载、删除文件,需修改/etc/vsftpd/vsftpd.conf配置文件中:

anon_upload_enable=YES #允许匿名用户上传文件;
anon_mkdir_write_enable=YES #允许匿名用户创建目录;
anon_other_write_enable=YES #允许匿名用户其他写入权限。

另外默认Vsftpd匿名用户有两个:anonymous、ftp,所以匿名用户如果需要上传文件、删除及修改等权限,需要ftp用户对/var/ftp/pub目录有写入权限,使用如下chown和chmod任意一种即可,设置命令如下:

chown -R ftp pub/

如果要关闭匿名用户登录,只需设置:

anonymous_enable=NO

系统用户配置

匿名模式可以让任何人使用ftp服务,比较公开!多适用于共享文件!如果我们想要特定用户使用,就需要使用系统用户登录访问!这种模式,需要我们新建不同用户,linux创建用户:

useradd 新的用户名
passwd 新的用户名

然后需要修改配置文件:

anonymous_enable=NO   #禁止匿名用户登录
chown_uploads=NO      #设定禁止上传文件更改宿主
nopriv_user=ftptest   #设定支撑Vsftpd服务的宿主用户为新建用户
ascii_upload_enable=YES
ascii_download_enable=YES #设定支持ASCII模式的上传和下载功能。
userlist_enable=YES
userlist_deny=NO

最后打开/etc/vsftpd/user_list文件,将新建的用户添加到最后一行(一个用户一行)

这种模式下,登录访问的目录就是/home/新建用户/

虚拟用户配置

`