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
Linux Centos 通过虚拟用户访问FTP的配置的更多相关文章
- CentOS7 FTP服务搭建(虚拟用户访问FTP服务)
概述 最近在搞Oracle在Linux系统下集群,针对Linux系统,笔人也是一片空白.Liunx外部文件的传输,避免不了使用FTP服务,所以现在就整理下,CentOS7环境下,FTP服务的搭建.FT ...
- Centos下安装FTP并进行虚拟用户访问方式配置
1. 安装认证所需包 [root@localhost]#yum install pam* [root@localhost]#yum install db4* 首先安装PAM(用于用户认证)和DB4(用 ...
- Linux系统学习 十八、VSFTP服务—虚拟用户访问—配置虚拟用户访问
配置虚拟用户访问 首先至少要关闭userlist 改完配置文件是要重启服务来使它生效 其实在刚装好vsftp的时候的配置文件不用修改的情况下配置虚拟用户访问控制是最好的 local_root选项不影响 ...
- Linux CentOS 6.5 下 vsftpd ftp服务器搭建
Linux CentOS 6.5 下 vsftpd ftp服务器搭建 by:授客 QQ:1033553122 操作系统环境:CentOS 6.5-x86_64 下载地址:http://www.ce ...
- 在Linux(CentOS 6.6)服务器上安装并配置基于Apache的SVN服务器
#!/bin/bash # # 在Linux(CentOS 6.6)服务器上安装并配置基于Apache的SVN服务器: # # .安装服务 # .创建svn版本库 # .创建svn用户 # .配置sv ...
- Linux(Centos)配置vsftp使用账号密码(虚拟用户)登录ftp进行文件上传和修改
安装vsftp yum install vsftpd -y 安装完成之后进入vsftp的配置文件夹 cd /etc/vsftpd/ 文件夹内容如下 [root@VM-0-12-centos vsftp ...
- vsftpd搭建ftp服务,并实现虚拟用户访问
安装vsftpd服务: yum install vsftpd -y [root@wadeson ~]# rpm -ql vsftpd /etc/logrotate.d/vsftpd /etc/pam. ...
- 007.FTP虚拟用户访问
一 虚拟用户优点 可对每个用户进行单独设定权限. 每个用户单独配置文件,单独指定主目录,而不能访问系统的其它资源. 注意:虚拟用户目录和本地用户访问目录不冲突. 二 配置虚拟用户步骤 添加虚拟用户口令 ...
- Linux系统学习 十九、VSFTP服务—虚拟用户访问—为每个虚拟用户建立自己的配置文件,单独定义权限
为每个虚拟用户建立自己的配置文件,单独定义权限 可以给每个虚拟用户单独建立目录,并建立自己的配置文件.这样方便单独配置权限,并可以单独指定上传目录 1.修改配置文件 vi /etc/vsftpd/vs ...
随机推荐
- MySQL GROUP_CONCAT长度限制引发的一场灾难
GROUP_CONCAT函数是对查处的分组数据对于分组列相同的数据合并成一列用逗号隔开的函数. 但是该函数的长度有个默认限制,默认是1024个字符,超过就会截断,从而导致用count统计GROUP_C ...
- 为什么要使用markdown?
markdown是什么? markdown是一种标记语言,它不是编程语言 为什么要使用markdown? markdown可以使用任何文本编辑器编写和查看 markdown编写的文件可以转化为html ...
- Flask文件目录----- __init__ 文件
import os from flask import Flask def create_app(test_config=None): # 创建和设置app app = Flask(name, ins ...
- CSS Grid 布局学习笔记
CSS Grid 布局学习笔记 好久没有写博客了, MDN 上关于 Grid 布局的知识比较零散, 正好根据我这几个月的实践对 CSS Grid 布局做一个总结, 以备查阅. 1. 基础用法 Grid ...
- oracle 递归查询(来源于网络)
比如 a b a c a e b b1 b b2 c c1 e e1 e e3 d d1 指定parent=a,选出 a b a c a e b ...
- 第四章 T-SQL编程
1.前言->此T-SQL编程是基于sql server开发环境->关键字:T-SQL编程:游标:视图和索引 2.T-SQL编程基础->标识符:常规标识符必须以汉字.字母.下划线_.@ ...
- JAX-WS @WebParam自定义参数名称无效
在使用myeclipse 自动对service方法类进行创建webservice服务时,默认创建参数命名都是arg0-9 这样就导致生成的xml配置文件命名不规范,需要对参数名称进行修改: myecl ...
- CRUD全栈式编程架构之界面层的设计
Layout的设计 模板模式 mvc的模板特别类似设计模式中模板方法模式,结合Layout中RenderSection和RenderBody方法可以将部分html展现逻辑延迟到具体的视图页面去实现里面 ...
- MMU CPU及思想
要素: 1)CPU访问寻址地址空间: 2)内存不足以容纳所有进程数据: 3)MMU将进程数据分割,保留当前使用数据. http://baike.baidu.com/link?url=KHyp37Ysi ...
- Centos6.4环境下DNS服务器的搭建
DNS服务器搭建很繁琐吗?给你个简单的招吧! 配置域主服务器 阶段: 1.在bind的主配置文件中添加该域 2.在/var/named中创建该域的zone文件 3.编辑zone文件,添加需要的信息 4 ...