Linux Centos 通过虚拟用户访问FTP的配置
linux centos 通过虚拟用户访问ftp的配置
实验需求:
让下面4个虚拟用户使用系统用户ftpvu的权限来连接到linux ftp服务器,并确保都锁定在
自己的虚拟用户目录,不能切换到其他目录。 ftp1-3的带宽速率限制在500kb,davidge用户不限制带宽。
系统环境:
[root@cent7-184 ~]# uname -r
3.10.0-229.el7.x86_64
[root@cent7-184 ~]# cat /etc/redhat-release
centos linux release 7.5.1804 (core)
还需要先关闭防火墙和selinux。
先yum安装vsftpd:
yum -y install vsftpd
查询是否正确安装vsftpd:
[root@cent7-184 ~]# rpm -qa vsftpd
vsftpd-3.0.2-25.el7.x86_64
之后安装pam(用于用户认证)和db4(用于生成虚拟用户的用户名密码的db文件)
yum -y install pam pam-devel db4 db-devel db4-utils db4-tcl
[root@cent7-184 ~]# rpm -qa pam pam-devel db4 db-devel db4-utils db4-tcl
pam-devel-1.1.8-22.el7.x86_64
pam-1.1.8-22.el7.i686
pam-1.1.8-22.el7.x86_64
创建用于虚拟用户的系统用户ftpvu,并禁止通过shell登陆,不创建家目录。
[root@cent7-184 ~]# useradd ftpvu -m -s /sbin/nologin
[root@cent7-184 ~]# id ftpvu
uid=8890(ftpvu) gid=8890(ftpvu) groups=8890(ftpvu)
创建虚拟用户信息的文件:
直接在命令行执行即可(奇数行是用户名,偶数行是密码)
也可以自己通过vi, vim来复制下面的用户信息来手动创建。
cat >>/etc/vsftpd/virtusers <<eof
ftp1
123456
ftp2
123456
ftp3
123456
davidge
123456
eof
生成虚拟用户认证的db文件
db_load -t -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
如果新增用户后需要重新执行上面的db_load命令来重新生成加密用户信息。
配置pam验证的配置文件:
cat >/etc/pam.d/vsftpd <<eof
#%pam-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
eof
[root@cent7-184 vsftpd]# cat /etc/pam.d/vsftpd
#%pam-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so
创建虚拟用户的存储路径并修改目录权限为755,owner为: ftpvu
[root@cent7-184 ~]# mkdir -p /data/ftp/{ftp1,ftp2,ftp3}
[root@cent7-184 ~]# mkdir -p /data/ftp/davidge
[root@cent7-184 ~]# chmod -r 755 /data/ftp/
[root@cent7-184 ~]# chown -r ftpvu. /data/ftp/
[root@cent7-184 ~]# ls -l /data/ftp/
total 0
drwxr-xr-x 2 ftpvu ftpvu 6 mar 2 10:53 davidge
drwxr-xr-x 2 ftpvu ftpvu 6 mar 2 10:53 ftp1
drwxr-xr-x 2 ftpvu ftpvu 6 mar 2 10:53 ftp2
drwxr-xr-x 2 ftpvu ftpvu 6 mar 2 10:53 ftp3
给ftp的用户指定家目录:
[root@cent7-184 ftp1]# usermod -d /data/ftp/ ftpvu
[root@cent7-184 ftp1]# grep ftp /etc/passwd
ftp:x:14:50:ftp user:/var/ftp:/sbin/nologin
ftpvu:x:8890:8890::/data/ftp/:/sbin/nologin
给每个用户创建虚拟用户个人配置文件:
先创建配置文件的根目录:
mkdir /etc/vsftpd/vconf
shell命令行直接创建ftp1用户的配置文件:
cat >>/etc/vsftpd/vconf/ftp1<<eof
local_root=/data/ftp/ftp1
anonymous_enable=no
anon_upload_enable=no
anon_mkdir_write_enable=no
write_enable=yes
local_umask=022
idle_session_timeout=600
data_connection_timeout=120
local_max_rate=512000
eof
创建ftp2用户的配置文件
cat >>/etc/vsftpd/vconf/ftp2<<eof
local_root=/data/ftp/ftp2
anonymous_enable=no
anon_upload_enable=no
anon_mkdir_write_enable=no
write_enable=yes
local_umask=022
idle_session_timeout=600
data_connection_timeout=120
local_max_rate=512000
eof
创建ftp3用户的配置文件
cat >>/etc/vsftpd/vconf/ftp3<<eof
local_root=/data/ftp/ftp3
anonymous_enable=no
anon_upload_enable=no
anon_mkdir_write_enable=no
write_enable=yes
local_umask=022
idle_session_timeout=600
data_connection_timeout=120
local_max_rate=512000
eof
创建davidge用户的配置文件
cat >>/etc/vsftpd/vconf/davidge<<eof
local_root=/data/ftp/davidge
anonymous_enable=no
anon_upload_enable=no
anon_mkdir_write_enable=no
write_enable=yes
local_umask=022
idle_session_timeout=600
data_connection_timeout=120
eof
完成后通过cat查询配置文件信息:
ftp配置文件重要参数说明:
anonymous_enable=no #禁用匿名用户
dual_log_enable=yes # 配置双重日志。
xferlog_file=/var/log/xferlog #访问日志的文件路径
guest_enable=yes #启用虚拟用户
guest_username=ftpvu #指定虚拟用户的系统用户名
virtual_use_local_privs=yes #虚拟用户使用本地用户的权限
user_config_dir=/etc/vsftpd/vconf #虚拟用户配置文件目录
allow_writeable_chroot=yes ##可写(可上传)
chroot_local_user=yes #本地用户禁锢在宿主目录中
把下面的配置文件追加到vsftpd.conf里面,并禁用匿名用户,同时开启ftp的日志:
通过sed禁用匿名用户
sed -i 's@anonymous_enable=yes@anonymous_enable=no@g' /etc/vsftpd/vsftpd.conf
追加配置文件新到vsftpd.conf
cat >>/etc/vsftpd/vsftpd.conf <<eof
dual_log_enable=yes
xferlog_file=/var/log/xferlog
guest_enable=yes
guest_username=ftpvu
virtual_use_local_privs=yes
user_config_dir=/etc/vsftpd/vconf
allow_writeable_chroot=yes
anon_other_write_enable=yes
chroot_local_user=yes
eof
最后生效的配置文件内容:
[root@cent7-184 vsftpd]# grep '^[a-z]' /etc/vsftpd/vsftpd.conf
anonymous_enable=no
local_enable=yes
write_enable=yes
local_umask=022
dirmessage_enable=yes
xferlog_enable=yes
connect_from_port_20=yes
xferlog_std_format=yes
listen=no
listen_ipv6=yes
pam_service_name=vsftpd
userlist_enable=yes
tcp_wrappers=yes
dual_log_enable=yes
xferlog_enable=yes
xferlog_file=/var/log/xferlog
guest_enable=yes
guest_username=ftpvu
virtual_use_local_privs=yes
user_config_dir=/etc/vsftpd/vconf
allow_writeable_chroot=yes
anon_other_write_enable=yes
[root@cent7-184 ftp1]# systemctl restart vsftpd.service
[root@cent7-184 ftp1]# lsof -i :21
command pid user fd type device size/off node name
vsftpd 20846 root 4u ipv6 33721328 0t0 tcp *:ftp (listen)
[root@cent7-184 ftp1]# netstat -lntup|grep ftp
tcp6 0 0 :::21 :::* listen 20846/vsftpd
登陆测试和日志:
使用 davidge 用户传输的时候不限制速度:
只能在自己的虚拟用户目录下操作,不可以切换到其他目录,否则提示550切换目录失败
添加新用户的方法:
cat >>/etc/vsftpd/virtusers <<eof
ftp10
123456
eof
db_load -t -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
mkdir -p /data/ftp/ftp10
chown -r ftpvu. /data/ftp/
cat >>/etc/vsftpd/vconf/ftp10<<eof
local_root=/data/ftp/ftp10
anonymous_enable=no
anon_upload_enable=no
anon_mkdir_write_enable=no
write_enable=yes
local_umask=022
idle_session_timeout=600
data_connection_timeout=120
local_max_rate=512000
eof
systemctl restart vsftpd.service
lsof -i :21
上面几条命令的截图:
验证登陆和速率:
错误提示信息和解决办法:
1. 500 oops:
由于建立的本地用户没有指定家目录,需要通过usermod来指定定义的家目录。
500 oops: cannot change directory:/home/ftpvu
login failed.
[root@cent7-184 ftp1]# usermod -d /data/ftp/ ftpvu
[root@cent7-184 ftp1]# grep ftp /etc/passwd
ftp:x:14:50:ftp user:/var/ftp:/sbin/nologin
ftpvu:x:8890:8890::/data/ftp/:/sbin/nologin
2. 550 failed:
ftp> cd /var
550 failed to change directory.
550 failed- 客户端没有切换目录的权限,由于限制了目录只能访问自己的目录。
chroot_local_user=yes
如果想让授权的用访问其他目录可以配置下面的2行:
chroot_list_enable=yes
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
并把需要切换目录的用户放入list文件: /etc/vsftpd/vsftpd.chroot_list
推荐阅读
-
VMware Workstation虚拟机中的Linux通过NAT模式共享上网配置教程
-
Linux-ftp虚拟用户配置
-
Linux系统学习 十九、VSFTP服务—虚拟用户访问—为每个虚拟用户建立自己的配置文件,单独定义权限
-
Linux系统学习 十八、VSFTP服务—虚拟用户访问—配置虚拟用户访问
-
Linux Centos 通过虚拟用户访问FTP的配置
-
httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例
-
Linux上设置用户通过SFTP访问目录的权限的方法
-
详解CentOS7 FTP服务搭建(虚拟用户访问FTP服务)
-
VMware克隆虚拟机(CentOS)以及克隆后有关的网络配置+静态ip+修改主机名+添加ip映射+sudo用户
-
CentOs7主机无法访问虚拟机linux的apache