-- 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
//将auth及account的所有配置行行均注释掉,添加如下内容:
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_user=YES
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=YES,chroot_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)异常处理.
<关于vsftpd的530 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_dir是pam 认证的权限配置文件目录,每个文件名对应一个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解决办法]
一般思路:服务器防火墙端口是否设置及reload,FTP目录权限,客户网关限制了外网,云安全策略端口,需要在路由器做端口映射允许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 -bind:mount –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