Linux Centos 通过虚拟用户访问FTP的配置
Linux Centos 通过虚拟用户访问FTP的配置 实验需求: 让下面4个虚拟用户使用系统用户ftpvu的权限来连接到Linux FTP服务器,并确保都锁定在 自己的虚拟用户目录,不能切换到其他目录。 ftp1-3的带宽速率限制在500KB,davidge用户不限制带宽。 ? ? 系统环境: [[email?protected] ~]# uname -r 3.10.0-229.el7.x86_64 [[email?protected] ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) ? 还需要先关闭防火墙和selinux。 ? 先yum安装vsftpd: yum -y install vsftpd ? 查询是否正确安装vsftpd: [[email?protected] ~]# 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 ? ? [[email?protected] ~]# 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登陆,不创建家目录。 [[email?protected] ~]# useradd ftpvu -M -s /sbin/nologin [[email?protected] ~]# id ftpvu uid=8890(ftpvu) gid=8890(ftpvu) groups=8890(ftpvu) ? 创建虚拟用户信息的文件: 直接在命令行执行即可(奇数行是用户名,偶数行是密码) 也可以自己通过vi,vim来复制下面的用户信息来手动创建。 cat >>/etc/vsftpd/virtusers <<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 ? [[email?protected] 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 ? [[email?protected] ~]# mkdir -p /data/ftp/{ftp1,ftp2,ftp3} [[email?protected] ~]# mkdir -p /data/ftp/davidge [[email?protected] ~]# chmod -R 755 /data/ftp/ [[email?protected] ~]# chown -R ftpvu.? /data/ftp/ ? [[email?protected] ~]# 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的用户指定家目录: [[email?protected] ftp1]# usermod -d /data/ftp/ ftpvu [[email?protected] 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 ? ? 创建ftp2用户的配置文件 cat >>/etc/vsftpd/vconf/ftp2<<EOF ? 创建ftp3用户的配置文件 cat >>/etc/vsftpd/vconf/ftp3<<EOF ? 创建davidge用户的配置文件 cat >>/etc/vsftpd/vconf/davidge<<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 ‘[email?protected][email?protected][email?protected]‘ /etc/vsftpd/vsftpd.conf? 追加配置文件新到vsftpd.conf cat >>/etc/vsftpd/vsftpd.conf <<EOF ? 最后生效的配置文件内容: [[email?protected] 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 ? [[email?protected] ftp1]# systemctl restart? vsftpd.service?? [[email?protected] ftp1]# lsof -i :21 COMMAND?? PID USER?? FD?? TYPE?? DEVICE SIZE/OFF NODE NAME vsftpd? 20846 root??? 4u? IPv6 33721328????? 0t0? TCP *:ftp (LISTEN) [[email?protected] ftp1]# netstat -lntup|grep ftp tcp6?????? 0????? 0 :::21?????????????????? :::*??????????????????? LISTEN????? 20846/vsftpd ? 登陆测试和日志: ? ? ? ? ? 使用 davidge 用户传输的时候不限制速度: ? ? ? 只能在自己的虚拟用户目录下操作,不可以切换到其他目录,否则提示550切换目录失败 ? ? 添加新用户的方法: ? cat >>/etc/vsftpd/virtusers <<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 ? systemctl restart? vsftpd.service?? lsof -i :21 ? ?上面几条命令的截图: ? 验证登陆和速率: ? ? 错误提示信息和解决办法: ? 1. 500 OOPS: ? 由于建立的本地用户没有指定家目录,需要通过usermod来指定定义的家目录。 500 OOPS: cannot change directory:/home/ftpvu Login failed. ? [[email?protected] ftp1]# usermod -d /data/ftp/ ftpvu [[email?protected] 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |