Linux(centos-7) 环境下Vsftpd的配置与维护

-- Linux(centos-7) 环境下Vsftpd的配置与维护
【官网】:https://www.centos.org

应用场景

一般linux服务器的运维,都或多或少涉及ftp服务,linux中就是vsftpd服务。

基础资源

vsftpd服务

使用须知

开启配置vsftpd服务时需要注意各种权限的设置,比如查看上级目录,读写权限等等。

配置步骤

>基础.


用户类型

简介

需求场景

维护

匿名用户

<定义>无需账号密码

用户>只能下载.

用户>只能上传,下载,新建文件夹,但无法删除文件及目录,也无法重命名原有文件及目录.

用户>上传,下载,删除,更新主目录下的所有文件及目录.

本地用户

<定义>服务端除root之外的普通用户.

虚拟用户

<定义>非系统存在的,比本地账户安全.

[权限说明]

-rwxrwxrwx //-开头表示文件

drwxrwxrwx //d开头表示目录. 除了-,d之外还有其它的类似管道等等.

第一位是 - 代表是文件,第一位是d代表是目录,除去第一位后的9个字符中

前三位代表所有者(owner)的权限,rwx代表读写权限和执行权限

中间三位代表所属组(group)的权限,r-x代表有读和执行权限,没有写权限

最后三位代表其他者(others)的权限,同样是读和执行权限,没有写权限

更改权限用chmod命令,格式是chmod 用户名 文件或目录.

计算方式:读、写、运行三项权限可以用数字表示,就是r=4,w=2,x=1。所以,上面的例子中的rw-r--r--用数字表示成644.

[参考]https://blog.csdn.net/Fly_as_tadpole/article/details/81257463

>过程参考.

步骤1)安装vsftpd.

yum -y install vsftpd

[]查看安装情况:

rpm -qc vsftpd

rpm -aq vsftpd

步骤2)启动ftp服务.

systemctl start vsftpd.service

步骤3.1)查看ftp服务.

systemctl status vsftpd.service

步骤3.2)允许21端口可通过防火墙.

firewall-cmd --zone=public --add-port=21/tcp --permanent //如果是阿里云则需后台设置.

firewall-cmd --reload

步骤3.3)关闭匿名用户.

cd  /etc/vsftpd

anonymous_enable=NO

anon_upload_enable=NO

anon_mkdir_write_enable=NO


[root@localhost vsftpd]

# cd /etc/vsftpd/

# systemctl restart  vsftpd.service


步骤3.4)创建存储目录.

cd /home

mk ftpuser2

//赋予相关的权限.

$ sudo chmod -R 777 /home/ftpuser2

3.5)创建用户.

<创建密码密文>

vim /etc/vsftpd/pass.txt

John

passwxx

Jack

Passwyy

<根据密码明文创建密码库>

根据明文创建密码DB文件,userlist.db就是用户密码的数据库

db_load -T -t hash -f /etc/vsftpd/pass.txt \

> /etc/vsftpd/userlist.db

<创建vftpd 系统账户 ftpuser2>

#cd /home/

#useradd -d  ftpuser2  -s /sbin/nologin ftpuser2



3.6)查看ftp的状态.

[root@localhost /]# getsebool -a|grep ftp

打开两个开关:

[root@localhost vsftpd]# setsebool -P allow_ftpd_full_access on

[root@localhost vsftpd]# setsebool -P tftp_home_dir on

3.7)配置用户数据.

# vi/etc/pam.d/vsftpd

//authaccount的所有配置行行均注释掉,添加如下内容:

authrequiredpam_userdb.so db=/etc/vsftpd/userlist

accountrequiredpam_userdb.so db=/etc/vsftpd/userlist

[]userlist就是/etc/vsftpd/userlist.db的数据库,不过不用加.db后缀,系统自动添加.

步骤4)配置vsftpd.conf.

步骤4.1)将用户锁定在主目录,不允许用户查看主目录以上的目录.

chroot_local_userYES

chroot_list_enable=YES(这行可以没有, 也可以有)

[]命令如下:

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf


[]/etc/vsftpd/vsftpd.conf 添加一下内容.

guest_enable=YES

guest_username=ftpuser2

chroot_local_user=YES

allow_writeable_chroot=YES

同时将chroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_list注释去掉并将chroot_list_file=/etc/vsftpd/chroot_list
改为chroot_list_file=/home/ftpuser2

local_root=/home/ftpuser2

anon_other_write_enable=YES(未验证)


步骤4.3)开启pasv模式.

/etc/vsftpd/vsftpd.conf 的最下面加入

pasv_enable=YES

pasv_min_port=30000

pasv_max_port=30999

并且在userlist_enable=YES文件后面添加

userlist_deny=NO

userlist_file=/etc/vsftpd/user_list   //userlist_deny=NO时,user_list文件中需要有ftpuser,ftpuser2


步骤5)开启防火墙.

[root@localhost taotao]# firewall-cmd --zone=public --add-port=30000-30999/tcp --permanent

[root@localhost taotao]# firewall-cmd --reload

步骤6)异常处理.

<关于vsftpd530 Login incorrect错误>

只需要把/etc/pam.d/vsftpd文件中的

auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

[参考]https://blog.csdn.net/ct1027038527/article/details/80433700

步骤7)设置vsftp的开机启动.

systemctl enable vsftpd

步骤8)验证效果.

[1]如果想直接在linux服务器上安装ftp 客户端.

yum -y install ftp //安装ftp

ftp localhost //是测试localhost上的ftp连接.

常见问题

  • ftp用户名 密码输入正确 登陆报530 Login incorrect.331 Please specify the password
    【解决方案】https://blog.csdn.net/ct1027038527/article/details/80433700

快速入门

>虚拟用户-分权限管理.

>>创建用户.

vim /etc/vsftpd/pass.txt

ftp_download

111111

ftp_upload

111111

ftp_admin

111111

 [注]修改密码时也可以用这个过程.

>>查看ftp的状态.

   <如果启用selinux>

   [root@localhost /]# getsebool -a|grep ftp

 

   打开两个开关:

   [root@localhost vsftpd]# setsebool -P allow_ftpd_full_access on

[root@localhost vsftpd]# setsebool -P ftp_home_dir on

   <如果关闭selinux>

vim /etc/selinux/config

SELINUX=disabled

   <如果启用selinux,但取消selinux对ftp的限制>

  setsebool -P ftpd_connect_all_unreserved 1

 

  

>>以虚拟用户身份添加一个目录.

 useradd -d /home/ftpspace -s  /sbin/nologin  virtual

 //删除则是 userdel virtual

示例:

1

2

3

4

5

6

7

useradd -g www -d /home/www/zhangge.net -s /sbin/nologin username

# -g 表示所属用户组,请根据实际选择

# -d 表示登录后的工作目录,请指定所要指向的网站根目录即可。

# -s /sbin/nologin 表示设定此账号仅用于ftp,不允许登录到系统。

#username 新增的用户名,请自定义。

passwd username

#如上使用passwd 设定ftp用户的密码。

 

 

cd /home/

mkdir  ftpspace   //实现不同虚拟用户对同一目录有不同权限.

>>创建用户数据库.

cd /etc/vsftpd/

db_load -T -t hash -f  pass.txt /etc/vsftpd_login.db 

chmod 600 /etc/vsftpd_login.db //内容敏感,所以给小点的权限.

rm pass.txt

 

chmod 777 /home/ftpspace   //rwx中的x权限是下载(ftp_download)必须的.

如果是777则肯定可以下载,上传,更新,删除..705则是可以下载

>>设置pam认证.

/etc/vsftpd/vsftpd.conf 的最下面加入

 

[] user_config_dirpam 认证的权限配置文件目录,每个文件名对应一个ftp虚拟用户名.

 []也有下面这种设置方式:

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

 

>>配置主目录,不能切换到上级目录(否则将可以切换到linux根目录).

Vim /etc/vsftpd/vsftpd.conf

chroot_local_user=YES

chroot_list_enable=NO

allow_writeable_chroot=YES

 

[参数详解]

https://zhang.ge/3987.html

 

>>配置ftp各用户权限.

注:in linux system,Perm(user)<=Perm(D Or F);//dir reqire enable,but user setting diffrents(pcw)

    

<ftp_down>

anon_world_readable_only=NO

write_enable=NO

anon_upload_enable=NO

anon_mkdir_write_enable=NO

anon_other_write_enable=NO

<ftp_upload>

anon_world_readable_only=NO

write_enable=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

local_root=/home/ftpspace

anon_umask=022

anon_other_write_enable=YES

<ftp_admin>

anon_world_readable_only=NO

write_enable=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

local_root=/home/ftpspace

 

[]目录权限示例.

  

 

   进入duoduole

[错误1:连接ftp服务器失败,提示"AUTH TLS"解决方法]

FileZilla的站点管理器中,选择加密方式是:只使用普通FTP(不安全)方式,再重新连接。

[错误2:425 failed to establish connection解决办法]

  

   一般思路:服务器防火墙端口是否设置及reloadFTP目录权限,客户网关限制了外网,云安全策略端口,需要在路由器做端口映射允许21端口,已启用ipv6., 是否重启vsftpd服务,各环节ip白名单等等相关.


 

[参考]

https://blog.csdn.net/sqzhao/article/details/71307563 //最详细

http://ask.zol.com.cn/x/4893187.html  //按权限类型建立用户

https://www.cnblogs.com/revo/p/7444897.html //按用户类型区分处理.

https://www.jb51.net/article/110284.htm //centos7安装ftp过程(很重要).

https://www.linuxidc.com/Linux/2017-08/146085.htm

      //centos7 安装 vsftpd服务.

https://www.cnblogs.com/jefflee168/p/6575014.html

//centos7与FTP

http://blog.51cto.com/cuimk/1306637//安全选项说明

>linux vsftp 虚拟用户访问多个目录.

  添加绑定:mount -bindmount –bind命令是将前一个目录挂载到后一个目录上,所有对后一个目录的访问其实都是对前一个目录的访问.//rw是读写模式,ro是只读模式

   取消绑定:mount –move olddir newdir

             unmount olddir

 

  查看绑定:  mount

  <实际操作>

mount --bind -o   rw  /home/ftpspace2  /home/ftpspace/ftpspace2

chmod  777 /home/ftpspace2

chmod 777 /home/ftpspace/ftpspace2

[1]上述操作完了之后,ftp访问ftpspace后,看到ftpspace2的子目录,对他内部的文件操作,都会同步映射到/home/ftpspace2.

[2]去掉挂载:mount --move /home/ftpspace2   /home/ftpspace/ftpspace2

[3]上述设置的mount操作只在服务器未重启时生效,如果需要永久存储则需要放在一个文件中.

永久性的让挂在生效.

   vim /etc/rc.local

   #可读写挂载

mount --bind /home/test1/ /data/www/virtual/test1/#只读挂载

mount --bind /home/test2/ /data/www/virtual/test2/

mount -o remount,ro /data/www/virtual/test2/

   []source /etc/rc.local  使之立刻生效.  //实际测试发现,重启后还是需要执行 source /etc/rc.local才能生效.

 

 [参考]

1.)单用户访问多目录:

https://www.cnblogs.com/ilanni/p/4779416.html

2.)mount 命令.

https://www.cnblogs.com/xd502djj/p/3809375.html

参考资料