设为首页 收藏本站
查看: 2633|回复: 0

[经验分享] 配置Vsftpd下的虚拟用户

[复制链接]

尚未签到

发表于 2017-10-30 13:33:37 | 显示全部楼层 |阅读模式
                      
VSFTP介绍
VSFTP(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器,目前已经被许多大型站点所采用,如ftp.redhat.com,ftp.gnome.org等。
在vsftpd服务器中支持3类用户,分别是匿名用户,本地用户,和虚拟账户。用途及区别如下。
1)、匿名用户:名为anonymous 或ftp 的FTP 用户,匿名FTP 用户登录后将FTP 服务器中的/var/ftp 作为FTP 根目录。匿名用户通常用于提供公共文件的下载,如架设公共软件下载的FTP 服务器,所有人都可以使用匿名用户进行软件下载。
2)、本地用户:账号是系统用户账号(/etc/passwd),使用FTP 本地用户账号登录FTP 服务器后,登录目录为本地用户的宿主目录。本地FTP用户账号通常和Web 服务器一起提供虚拟主机服务,作为网页虚拟主机更新网页的途径。
3)、虚拟用户:账号是为了保证FTP 服务器的安全性,由vsftpd 服务器提供的非系统用户账号,相对于FTP的本地用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源。虚拟用户FTP 登录后将把指定的目录作为FTP 根目录。虚拟用户与本地用户具有类似的功能,由于虚拟用户账号具有较高的安全性,可以替代本地用户账号使用。

下面将介绍在测试环境中vsftpd虚拟用户应用的配置过程,下面介绍两种方式。
实现基于DB文件验证的vsftpd虚拟用户  yum install vsftpd
1 创建虚拟用户列表文件,将文本文件转化成特定格式的文本文件,添加虚拟用户口令文件
[iyunv@centos vsftpd]#vim  /etc/vsftpd/ftpvusers.txt
ftp1   #用户名
123456  #密码
ftp2
centos
2 生成虚拟用户口令认证文件
[iyunv@centos vsftpd]# db_load -T -t hash -f ftpvusers.txt vuser.db
1240.jpg

chmod 600 vuser.db  #为了安全,使密码不可见
3 创建操作系统的用户和FTP访问目录
useradd -d  /var/ftpsite -s /sbin/nologin vuser   # 创建ftp访问目录,vuser是系统真是存在用户,以后虚拟用户都映射成vuser,/var/ftpsite自动生成家目录
chmod 555 /var/ftpsite/ # 使vuser用户有读写权限,给目录权限
1240.jpg

setfacl -d /var/ftpsite        #删除权限
4 创建pam配置文件
1240.jpg

systemctl restart vsftpd
4 指定vsftp.conf配置文件
vim /etc/vsftpd/vsftpd.conf
1240.jpg

systemctl restart vsftpd  #重启服务
5 配置各自虚拟用户的配置文件
mdkir /etc/vsftpd/vusers.d/ # 创建配置文件存放的路径
cd /etc/vsftpd/vusers.d/ # 进入此目录创建各用户自已的配置文件
1240.jpg

出现错误:500 OOPS: bad bool value in config file for: anon_upload_enable  Login failed.
421 Service not available, remote server has closed connection
解决方法:ftp1的配置文件末尾出现空格
准备ftp2的目录
mkdir -p /app/ftp2/upload      #创建子文件
chown vuser /app/ftp2/upload  #给用户vuser权限
1240.jpg

6 测试虚拟用户登录FTP
1240.jpg

修改ftp2的权限,使其能够创建文件,进行测试。
1240.jpg

注意:实验前关闭防火墙和selinux。

基于数据库MYSQL验证vsftpd虚拟用户
Centos7和Centos6的不同:
Centos6: epel源里放了pam_mysql模块,可以yum install pam_mysql
Centos7:需要手动编译pam_mysql模块
1 实验准备
两台虚拟机,一台a主机作为ftp服务器;一台b主机作为mysql数据库服务器。
2 安装MySQL
①直接yum安装mysql-server(centos 6)或者 mariadb-server(centos 7)
centos7:systemctl start mariadb.service # 启动服务
systemctl enable mariadb # 设置为开机启动
centos6:service mysqld restart  # 启动服务
chkconfig enable mysqld  # 设置为开机启动
②b主机数据库配置:
1) 创建存储虚拟用户的数据库和连接数据库用户
1240.jpg

注:在这里我用这种方法添加的虚拟用户密码都是经过MySQL加密的,加密后的密码pam-mysql不能识别(MySQL和pam-mysql兼容性有些问题),因此本次实验使用明文保存密码。
select * from users;    #查看用户信息
FLUSH PRIVILEGES;   #刷新数据库
2) 验证b主机数据库配置是否成功
1240.jpg

1240.jpg

3 a主机 ftp服务器配置vsftpd服务
1)安装开发包组和服务包
yum  install mariadb vsftpd mariadb-devel pam-devel openssl-devel mariadb vsftpd  
yum  groupinstall "Development Tools"
注意:yum安装时,出现You could try using --skip-broken to work around the problem.You could try running: rpm -Va --nofiles --nodigest问题。
解决方法:yum remove httpd-tools
yum clean all        -->yum update
2)编译安装pam_mysql(centos7) 或yum install pam_mysql(centos6)
tar xvf pam_mysql-0.7RC1.tar.gz
1240.jpg

make && make install  #编译安装
3)编译MySQL的PAM认证模块
vim /etc/pam.d/vsftp.mysql # 为了方便管理并和以前的pam进行区分,我们创建自己的pam认证配置文件
1240.jpg

注意:参考README文档,选择正确的加密方式crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密auth 表示认证
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
user=vsftpd 为登录mysql的用户
passwd=magedu 登录mysql的的密码
host=mysqlserver mysql服务器的主机名或ip地址
db=vsftpd 指定连接msyql的数据库名称
table=users 指定连接数据库中的表名
usercolumn=name 当做用户名的字段
passwdcolumn=password 当做用户名字段的密码
crypt=2 密码的加密方式为mysql password()函数加密
account 验证账号密码正常使用
required 表示认证要通过
4 建立本地映射用户并设置宿主目录权限
# 建立虚拟用户映射的系统用户及对应的目录
useradd -s /sbin/nologin -d /app/ftpsite  ftvuser  #创建操作系统账号
# 去除ftp根目录的写权限,否者用户登录将受到文件系统权限的限制;
chmod 555 /app/ftpsite/
mkdir /app/ftpsite/upload
setfacl –m u:ftvuser:rwx /app/ftpsite/upload #为了使得用户能上传文件,我们以acl方式对相关目录设置权限,方便单个管理
5 在MySQL中建立用户口令数据库
# 确保/etc/vsftpd.conf中已经启用了以下选项:
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES   # 添加用户映射的选项
guest_enable=YES
guest_username=ftvuser  #将普通用户映射ftvuser
pam_service_name=vsftp.mysql  # 修改下面一项,原系统用户无法登录;而是基于数据验证登录用户
user_config_dir=/etc/vsftpd/vusers_config  # 创建所需要目录,并为虚拟用户提供配置文件
1240.jpg

systemctl start vsftpd  #重启服务
6 在FTP服务器上配置虚拟用户且具有不同的访问权限
# 说明:vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。
配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可
1240.jpg

# 配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如果需要让用户user1具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/user1文件。
vim /etc/vsftpd/vusers_config/user1        # 在里面添加如下选项并设置为YES即可,只读则设为NO
anon_upload_enable=YES    #打开匿名上传文件
anon_mkdir_write_enable=YES  #打开创建目录的权限
anon_other_write_enable=YES  #打开删除和重命名的权限
7 测试:
1240.jpg

vim /etc/vsftpd/vusers_config/user2
anon_upload_enable=YES  #打开匿名上传文件
local_root=/app/ftpsite2/  # 指定user2的目录;user2用户登录上来访问的目录
mkdir /app/ftpsite2/upload  # 方便检验
chown ftpvuser /app/ftpsite2/upload  #可以让子目录有权限,但家目录不能有权限
注意:需确保对应的映射用户对于文件系统有写权限
1240.jpg


测试虚拟用户登录FTP
1.virtual_use_local_privs参数
当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。
当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,
anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。
2.建立各个虚拟用户自身的配置文件
[iyunv@CentOS7 /]#vi /etc/vsftpd/vsftpd.conf
添加:user_config_dir=/etc/vsftpd/vsftpd_user_conf
[iyunv@CentOS7 /]#mkdir /etc/vsftpd/vsftpd_user_conf
编辑user1的配置文件
[iyunv@CentOS7 /]#vi /etc/vsftpd/vsftpd_user_conf/user1
添加:anon_world_readable_only=NO #开放bobyuan的下载权限(只能下载)。注意这个地方千万不能写成YES,否则user1将不能列出文件和目录。
编辑user2的配置文件
[iyunv@CentOS7 /]#vi /etc/vsftpd/vsftpd_user_conf/user2
添加:
write_enable=YES #打开写权限
anon_world_readable_only=NO #打开下载权限
anon_upload_enable=YES #打开上传权限
anon_mkdir_write_enable=YES #打开创建目录的权限
anon_other_write_enable=YES #打开删除和重命名的权限
                  


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-406209-1-1.html 上篇帖子: ftp下实现文件和mysql验证虚拟用户 下篇帖子: vsftp和nfs服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表