阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux FTP虚拟用户实现之vsftpd

527次阅读
没有评论

共计 10241 个字符,预计需要花费 26 分钟才能阅读完成。

vsftpd 可以支持虚拟用户,这样这些用户跟系统用户不搭嘎,只能访问 FTP 服务提供的资源,系统势必就要安全的多了。我们实现 FTP 匿名用户可以有两种方式,可以把虚拟用户列表保存到本地一个数据文件中,也可以把数据保存至数据库文件中。下面分别介绍两种实现方式:

本地数据文件方式:

环境及需求:CentOS5.8

软件包:vsftpd, db4-utils(要用到其提供的 db_load 工具把文本格式的用户列表转换成二进制的数据格式供 vsftpd 使用)

1、安装所需软件包

yum –y install vsftpd db4-utils

2、创建用户口令文件

[root@ha1 vsftpd]# cd /etc/vsftpd/
[root@ha1 vsftpd]# vim vuser

tom /* 奇数行为用户名
tompwd /* 偶数行为上面用户的密码
jerry
jerrypwd

3、生成用户口令文件,并记得更改文件权限只有 root 有读写权限

[root@ha1 vsftpd]# db_load -T -t hash -f vuser vuser.db
[root@ha1 vsftpd]# ls
chroot_list ssl vsftpd.conf vuser
ftpusers user_list vsftpd_conf_migrate.sh vuser.db

[root@ha1 vsftpd]# chmod 700 vuser vuser.db
[root@ha1 vsftpd]# ll vuser vuser.db
-rwx—— 1 root root 26 Oct 29 13:40 vuser
-rwx—— 1 root root 12288 Oct 29 13:42 vuser.db

4、为其提供 PAM 的配置文件

[root@ha1 vsftpd]# cd /etc/pam.d/
[root@ha1 pam.d]# vim vsftpd.vuser

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser 注意这里 db 文件名后面的.db 不用带上,这个相当于后缀吧,.db 前面的才是文件名
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser

5、创建虚拟用户映射的系统用户,指定其家目录,不需要登陆权限及密码

[root@ha1 pam.d]# useradd -d /var/ftp/vuser -s /sbin/nologin vftpuser
[root@ha1 pam.d]# ll -d /var/ftp/vuser/
drwx—— 3 vftpuser vftpuser 4096 Oct 29 13:55 /var/ftp/vuser/

6、编辑 vsftpd 配置文件使其支持虚拟用户

[root@ha1 pam.d]# vim /etc/vsftpd/vsftpd.conf #添加以下几行

guest_enable=YES /* 启用虚拟用户
guest_username=vftpuser /* 指定 FTP 虚拟用户映射到的系统用户
pam_service_name=vsftpd.vuser /* 定义 PAM 认证文件

保存退出,重启 vsftpd 服务

service vsftpd restart

7、用虚拟账号登陆验证,可以看到可以成功使用 tom 账号登陆 ftp 并且上传文件,文件位于 vftpuser 家目录 /var/ftp/vuser 下

[root@ha1 pam.d]# !ftpftp 192.168.188.128 Connected to 192.168.188.128.220 (vsFTPd 2.0.5) 530 Please login with USER and PASS.530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (192.168.188.128:root): tom 331 Please specify the password. Password:230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257/ ftp> lcd /etc/Local directory now /etc ftp> put issue local: issue remote: issue 227 Entering Passive Mode (192,168,188,128,231,93) 150 Ok to send data.226 File receive OK.47 bytes sent in 0.0045 seconds (10 Kbytes/s) ftp> bye 221 Goodbye. [root@ha1 pam.d]# ls /var/ftp/vuser/issue

更多详情见请继续阅读下一页的精彩内容 http://www.linuxidc.com/Linux/2013-11/92210p2.htm 

推荐阅读:

玩转 vsftpd 服务器的四大高级配置:http://www.linuxidc.com/Linux/2013-09/90565.htm

vsFTPd 配置教程:http://www.linuxidc.com/Linux/2013-09/90562.htm

Ubuntu 实用简单的 FTP 架设 http://www.linuxidc.com/Linux/2012-02/55346.htm

Ubuntu 上架设 FTP 服务器和 Apache 服务器 http://www.linuxidc.com/Linux/2011-04/35295.htm

Ubuntu 13.04 安装 LAMP\vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

RHEL6 平台下 SeLinux 和 vsftpd 的匿名上传的简单案例 http://www.linuxidc.com/Linux/2013-04/82300.htm

Linux 系统 vsftpd 源码安装 http://www.linuxidc.com/Linux/2013-03/81475.htm

vsftpd 的安全配置案例分析 http://www.linuxidc.com/Linux/2012-12/76501.htm

通过 MySQL 数据库服务器提供口令数据

1、安装 mysql

yum –y install mysql-server mysql-devel

2、编译安装 pam-mysql 

下载地址:http://nchc.dl.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz

下载完解压,编译安装,configure 只要指定一下—with-mysql 即可,

[root@ha1~]# tar xf pam_mysql-0.7RC1.tar.gz [root@ha1~]# cd pam_mysql-0.7RC1[root@ha1 pam_mysql0.7RC1]# lsacinclude.m4 config.status installsh mkinstalldirs pkg.m4 aclocal.m4 config.sub libtool NEWS README ChangeLog configure ltmain.sh pam_mysql.c stamph config.guess configure.in Makefile pam_mysql.la stamph.in config.h COPYING Makefile.am pam_mysql.lo config.h.in CREDITS Makefile.in pam_mysql.spec config.log INSTALL missing pam_mysql.spec.in [root@ha1 pam_mysql0.7RC1]# ./configure –with-mysql=/usr

 

[root@ha1 pam_mysql-0.7RC1]# make && make install

3、创建用户口令数据库

创建一个用户文件 vim /etc/vsftpd/vuser (字段之间用 Tab 键隔开,由于我的表有个 id 字段,所以第一个字段直接加个 Tab)

tom tom

jerry jerry

mysql>CREATEDATABASE vsftpd; //创建数据库 Query OK, 1 row affected (0.03 sec) mysql>USE vsftpd; //切到数据库 vsftpd Database changed mysql>CREATETABLE vuser //创建用户表 -> (id SMALLINTNOTNULL AUTO_INCREMENT PRIMARYKEY, -> name CHAR(20) BINARYNOTNULL, -> password CHAR(48) BINARYNOTNULL); Query OK, 0 rows affected (0.10 sec) mysql>DESC vuser; //查看表结构 +——–+————-+——+—–+———+—————-+| Field | Type |Null|Key|Default| Extra |+——–+————-+——+—–+———+—————-+| id |smallint(6) | NO | PRI |NULL| auto_increment || name |char(20) | NO ||NULL||| password |char(48) | NO ||NULL||+——–+————-+——+—–+———+—————-+3 rows inset (0.04 sec) mysql>LOAD DATA LOCAL INFILE “/etc/vsftpd/vuser” INTOTABLE vuser; //可以直接从文本文件中批量导入用户 Query OK, 4 rows affected, 12 warnings (0.04 sec) Records: 4 Deleted: 0 Skipped: 0 Warnings: 8 mysql>INSERTINTO vuser (name,password) VALUES (bob,password(bob)),(tina,tina); //当然也可以直接批量插入用户数据,这里我一个使用了 mysql 的 password 函数,一个没有使用,因为 pam_mysql 和 mysql 使用的 password 函数可能不一样,会导致无法认证,下面会分别测试一下 Query OK, 2 rows affected (0.03 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql>GRANTSELECTON vsftpd.*TO vftpuser@localhost IDENTIFIED BYvftpuser; Query OK, 0 rows affected (0.10 sec) mysql>GRANTSELECTON vsftpd.*TO vftpuser@127.0.0.1 IDENTIFIED BYvftpuser; //这两行给予 vftpuser 用户 vsftpd 数据库所有表查询权限 Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; //刷新权限信息使权限生效 Query OK, 0 rows affected (0.04 sec)  

我们用 vftpuser 登陆 mysql 验证一下是否具有查询权限

[root@ha1 ~]# mysql u vftpuser p Enter password: Welcome to the MySQL monitor. Commands endwith ; or \g. Your MySQL connection id is7 Server version: 5.0.95 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type help;or\hfor help. Type \cto clear the current input statement. mysql> SHOW DATABASES; +——————+|Database|+——————+| information_schema || test || vsftpd |+——————+3 rows inset (0.00 sec) mysql>USE vsftpd; Reading table information for completion oftableandcolumn names You can turn off this feature to get a quicker startup withA Database changed mysql> SHOW TABLES; +—————-+| Tables_in_vsftpd |+—————-+| vuser |+—————-+1 row inset (0.00 sec) mysql>SELECT*FROM vuser; +–+——-+——————+| id | name | password |+–+——-+——————+|1| tom | tom ||2| jerry | jerry ||3| tina | tina ||4| bob | 7d67547927a4589e |+–+——-+——————+4 rows inset (0.00 sec)

 

4、为 mysql 创建一个 pam 配置文件

[root@ha1 pam.d]# cd /etc/pam.d

[root@ha1 pam.d]# vim vsftpd.mysql

auth required /usr/lib/security/pam_mysql.so user=vftpuser passwd=vftpuser host=localhost db=vsftpd table=vuser usercolumn=name passwordcolumn=password crypt=0

account required /usr/lib/security/pam_mysql.so user=vftpuser passwd=vftpuser host=localhost db=vsftpd table=vuser usercolumn=name passwordcolumn=password ctypt=0 

5、创建虚拟用户映射的系统用户,指定其家目录,不需要登陆权限及密码

[root@ha1 pam.d]# useradd -d /var/ftp/vuser -s /sbin/nologin vftpuser
[root@ha1 pam.d]# ll -d /var/ftp/vuser/
drwx—— 3 vftpuser vftpuser 4096 Oct 29 13:55 /var/ftp/vuser/

6、修改 vsftpd 配置文件,支持通过 mysql 认证

[root@ha1 pam.d]# vim /etc/vsftpd/vsftpd.conf

guest_enable=YES
guest_username=vftpuser
pam_service_name=vsftpd.mysql

anon_world_readable_only=NO

用 windows 客户端登陆验证,需要注意的是虚拟用户默认使用的是匿名用户的权限,配置文件要加上一句 anon_world_readable_only=NO, 不然的话 ls 命令结果列不出来。

Linux FTP 虚拟用户实现之 vsftpd

vsftpd 可以支持虚拟用户,这样这些用户跟系统用户不搭嘎,只能访问 FTP 服务提供的资源,系统势必就要安全的多了。我们实现 FTP 匿名用户可以有两种方式,可以把虚拟用户列表保存到本地一个数据文件中,也可以把数据保存至数据库文件中。下面分别介绍两种实现方式:

本地数据文件方式:

环境及需求:CentOS5.8

软件包:vsftpd, db4-utils(要用到其提供的 db_load 工具把文本格式的用户列表转换成二进制的数据格式供 vsftpd 使用)

1、安装所需软件包

yum –y install vsftpd db4-utils

2、创建用户口令文件

[root@ha1 vsftpd]# cd /etc/vsftpd/
[root@ha1 vsftpd]# vim vuser

tom /* 奇数行为用户名
tompwd /* 偶数行为上面用户的密码
jerry
jerrypwd

3、生成用户口令文件,并记得更改文件权限只有 root 有读写权限

[root@ha1 vsftpd]# db_load -T -t hash -f vuser vuser.db
[root@ha1 vsftpd]# ls
chroot_list ssl vsftpd.conf vuser
ftpusers user_list vsftpd_conf_migrate.sh vuser.db

[root@ha1 vsftpd]# chmod 700 vuser vuser.db
[root@ha1 vsftpd]# ll vuser vuser.db
-rwx—— 1 root root 26 Oct 29 13:40 vuser
-rwx—— 1 root root 12288 Oct 29 13:42 vuser.db

4、为其提供 PAM 的配置文件

[root@ha1 vsftpd]# cd /etc/pam.d/
[root@ha1 pam.d]# vim vsftpd.vuser

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser 注意这里 db 文件名后面的.db 不用带上,这个相当于后缀吧,.db 前面的才是文件名
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser

5、创建虚拟用户映射的系统用户,指定其家目录,不需要登陆权限及密码

[root@ha1 pam.d]# useradd -d /var/ftp/vuser -s /sbin/nologin vftpuser
[root@ha1 pam.d]# ll -d /var/ftp/vuser/
drwx—— 3 vftpuser vftpuser 4096 Oct 29 13:55 /var/ftp/vuser/

6、编辑 vsftpd 配置文件使其支持虚拟用户

[root@ha1 pam.d]# vim /etc/vsftpd/vsftpd.conf #添加以下几行

guest_enable=YES /* 启用虚拟用户
guest_username=vftpuser /* 指定 FTP 虚拟用户映射到的系统用户
pam_service_name=vsftpd.vuser /* 定义 PAM 认证文件

保存退出,重启 vsftpd 服务

service vsftpd restart

7、用虚拟账号登陆验证,可以看到可以成功使用 tom 账号登陆 ftp 并且上传文件,文件位于 vftpuser 家目录 /var/ftp/vuser 下

[root@ha1 pam.d]# !ftpftp 192.168.188.128 Connected to 192.168.188.128.220 (vsFTPd 2.0.5) 530 Please login with USER and PASS.530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (192.168.188.128:root): tom 331 Please specify the password. Password:230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257/ ftp> lcd /etc/Local directory now /etc ftp> put issue local: issue remote: issue 227 Entering Passive Mode (192,168,188,128,231,93) 150 Ok to send data.226 File receive OK.47 bytes sent in 0.0045 seconds (10 Kbytes/s) ftp> bye 221 Goodbye. [root@ha1 pam.d]# ls /var/ftp/vuser/issue

更多详情见请继续阅读下一页的精彩内容 http://www.linuxidc.com/Linux/2013-11/92210p2.htm 

推荐阅读:

玩转 vsftpd 服务器的四大高级配置:http://www.linuxidc.com/Linux/2013-09/90565.htm

vsFTPd 配置教程:http://www.linuxidc.com/Linux/2013-09/90562.htm

Ubuntu 实用简单的 FTP 架设 http://www.linuxidc.com/Linux/2012-02/55346.htm

Ubuntu 上架设 FTP 服务器和 Apache 服务器 http://www.linuxidc.com/Linux/2011-04/35295.htm

Ubuntu 13.04 安装 LAMP\vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

RHEL6 平台下 SeLinux 和 vsftpd 的匿名上传的简单案例 http://www.linuxidc.com/Linux/2013-04/82300.htm

Linux 系统 vsftpd 源码安装 http://www.linuxidc.com/Linux/2013-03/81475.htm

vsftpd 的安全配置案例分析 http://www.linuxidc.com/Linux/2012-12/76501.htm

虚拟用户高级设置

虚拟用户默认使用的匿名用户的权限,当然 vsftpd 还支持继承系统用户的权限:

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 时,虚拟用户只能下载、删除和重命名文件,无其他权限。

此外,如果有需要,我们还可以为我们的虚拟用户分别定义权限:

此时只要在 vsftpd.conf 加上一行

user_config_dir=/etc/vsftpd/vsftpd.conf

然后创建 vsftpd.conf 目录,在些目录下分别创建与虚拟用户同名的文件,里面写上相应的权限设置就可以啦,更多的功能小伙伴根据需要自由发挥啦。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计10241字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7962942
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...