欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux Centos 通过虚拟用户访问FTP的配置

程序员文章站 2022-05-23 11:43:36
Linux Centos 通过虚拟用户访问FTP的配置 实验需求: 让下面4个虚拟用户使用系统用户ftpvu的权限来连接到Linux FTP服务器,并确保都锁定在 自己的虚拟用户目录,不能切换到其他目录。 ftp1-3的带宽速率限制在500KB,davidge用户不限制带宽。 系统环境: [root ......

linux centos 通过虚拟用户访问ftp的配置

实验需求:

让下面4个虚拟用户使用系统用户ftpvu的权限来连接到linux ftp服务器,并确保都锁定在

自己的虚拟用户目录,不能切换到其他目录。 ftp1-3的带宽速率限制在500kb,davidge用户不限制带宽。

 Linux Centos 通过虚拟用户访问FTP的配置

 

系统环境:

[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

 Linux Centos 通过虚拟用户访问FTP的配置

查询是否正确安装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

 Linux Centos 通过虚拟用户访问FTP的配置

 

[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

 

 Linux Centos 通过虚拟用户访问FTP的配置

 

生成虚拟用户认证的db文件

 

db_load -t -t hash -f /etc/vsftpd/virtusers  /etc/vsftpd/virtusers.db

 Linux Centos 通过虚拟用户访问FTP的配置

 

如果新增用户后需要重新执行上面的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查询配置文件信息:

 Linux Centos 通过虚拟用户访问FTP的配置

 

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

 

登陆测试和日志:

 

 Linux Centos 通过虚拟用户访问FTP的配置

 

 Linux Centos 通过虚拟用户访问FTP的配置

Linux Centos 通过虚拟用户访问FTP的配置

 

使用 davidge 用户传输的时候不限制速度:

 

 Linux Centos 通过虚拟用户访问FTP的配置

Linux Centos 通过虚拟用户访问FTP的配置

 

只能在自己的虚拟用户目录下操作,不可以切换到其他目录,否则提示550切换目录失败

 Linux Centos 通过虚拟用户访问FTP的配置

 

添加新用户的方法:

 

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

 

 上面几条命令的截图:

Linux Centos 通过虚拟用户访问FTP的配置

 

验证登陆和速率:

 Linux Centos 通过虚拟用户访问FTP的配置

 

错误提示信息和解决办法:

 

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