ftp虚拟用户

ftp本来的只有匿名用户和普通用户,但是他们的权限都一样,不能做分开的权限控制,比如用户1 可以上传用户2 可以下载等等的。

1、所有的用户访问的位置是 /CCC/XXXXX
2、使用者划分权限等级
有的用户可以上传、下载、删除、重命名、创建目录等
有的用户只可以下载
3、如果有需要,可以随时修改用户的访问位置
4、考虑公司的带宽压力,限速最大是100k/s
5、为了避免用户使用下载工具,约束一个IP最多只能建立3个
6、最大并发数限制为100个用户同时在线
7、尽可能保证数据完整性

匿名用户
系统普通用户
权限是一样的

用户的访问路径:
匿名用户 /var/ftp
普通用户 家目录

这时就要用到虚拟用户:

虚拟用户不存在于系统中但是可以用于ftp的访问,他保存在数据库中。

可以用2个数据库来实现:
【1】Berkeley DB
【2】MySQL

衍生:虚拟用户的生成方式
先有个1普通用户普通用户
通过这个普通用户衍生所有的虚拟用户,虚拟用户的权限默认与普通用户是一致的
针对每个虚拟用户构建权限配置文件

【1】Berkeley DB方式做ftp的虚拟用户。

先安装epel源,然后安装vsftp和berkeleydb数据库。

[root@vsftp ~]# yum install vsftpd libdb4 libdb4-utils -y

1、普通用户,用于衍生。

[root@vsftp ~]# useradd -s /sbin/nologin ghostuser

2、修改配置文件。

[root@vsftp ~]# vim /etc/vsftpd/vsftpd.conf

#pam_service_name=vsftpd					//这个是原来的pam验证配置文件,也就是用普通用户和匿名用户的那个。把它注释掉

pam_service_name=vsftpd.gu					//制定新的pam验证配置文件
anonymous_enable=NO							//不允许匿名用户登录
user_config_dir=/etc/vsftpd/ghostuser_dir	//指定虚拟用户的权限控制目录
guest_enable=YES							//允许虚拟用户
guest_username=ghostuser					//衍生虚拟用户的普通用户名
max_clients=100								//最大客户端数量
max_per_ip=3								//每个IP最多连接数
anon_max_rate=100000						//最大的带宽,单位是比特,byte/s

安装完vsftpd后会生成一个pam验证文件:

[root@vsftp ~]# vim /etc/pam.d/vsftpd 
这个东西:

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required pam_shells.so
auth       include  password-auth
account    include  password-auth
session    required     pam_loginuid.so
session    include  password-auth
这里写了一些访问ftp时要的东西。比如匿名用户等等,但是有虚拟用户了,这个就不用了,配置文件中注释掉的就是这个。

3、准备虚拟用户的列表:

[root@vsftp ~]# cd/etc/vsftpd
[root@vsftp vsftpd]# vim guser.txt
u1
123456
u2
123456
用户名 密码。

把这个转变成数据文件格式:

[root@vsftp vsftpd]# db_load -T -t hash -f guser.txt guser.db

管控虚拟用户的权限:
上边配置文件中的虚拟用户权限管控目录:

[root@vsftp vsftpd]# mkdir /etc/vsftpd/ghostuser_dir

[root@vsftp ghostuser_dir]# vim u1 		//这个要和虚拟用户的名字相同
local_root=/home/ghostuser			//访问目录
allow_writeable_chroot=YES			//允许在根目录下执行写操作
anon_world_readable_only=NO			//允许下载浏览
write_enable=YES					//写开关
anon_upload_enable=YES				//允许上传
anon_other_write_enable=YES			//允许删除
anon_mkdir_write_enable=YES			//允许创建目录

[root@vsftp ghostuser_dir]# cp u1 u2
//直接拷贝出一个权限文件

4、编写pam验证文件:

[root@vsftp ghostuser_dir]# cd /etc/pam.d/
[root@vsftp pam.d]# vim vsftpd.gu

auth    required    /usr/lib64/security/pam_userdb.so   db=/etc/vsftpd/guser
account required    /usr/lib64/security/pam_userdb.so   db=/etc/vsftpd/guser

5、启动服务测试:

[root@vsftp pam.d]# systemctl restart vsftpd
[root@vsftp pam.d]# systemctl enable vsftpd

另一台机器,访问测试:

[root@localhost pam.d]# ftp 172.16.12.97
Connected to 172.16.12.97 (172.16.12.97).
220 (vsFTPd 3.0.2)
Name (172.16.12.97:root): u1      <------虚拟用户的名字
331 Please specify the password.
Password:		<-------虚拟用户的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

//创建目录
ftp> mkdir u1_dir
257 "/u1_dir" created
ftp> ls
227 Entering Passive Mode (172,16,12,97,106,108).
150 Here comes the directory listing.
drwx------    2 1000     1000            6 Dec 17 17:56 u1_dir
226 Directory send OK.

//上传文件
ftp> lcd /etc
ftp> put passwd
798 bytes sent in 9.1e-05 secs (8769.23 Kbytes/sec)
ftp> ls
-rw-------    1 1000     1000          798 Dec 17 17:59 passwd
drwx------    2 1000     1000            6 Dec 17 17:56 u1_dir


//改名,下载
ftp> rename passwd
(to-name) fi
350 Ready for RNTO.
250 Rename successful.
ftp> get fi
local: f1 remote: fi

[root@localhost ~]# ls
anaconda-ks.cfg  fi 


//删除文件
ftp> ls
-rw-------    1 1000     1000          798 Dec 17 17:59 fi
drwx------    2 1000     1000           20 Dec 17 18:01 u1_dir
ftp> delete fi
ftp> ls
drwx------    2 1000     1000           20 Dec 17 18:01 u1_dir


//删除目录
ftp> mkdir uu1_dir
ftp> ls
drwx------    2 1000     1000           20 Dec 17 18:01 u1_dir
drwx------    2 1000     1000            6 Dec 17 18:05 uu1_dir
ftp> rmdir uu1_dir
ftp> ls
drwx------    2 1000     1000           20 Dec 17 18:01 u1_dir
增加用户:

1、直接在哪个文件后边加上

[root@vsftp vsftpd]# vim guser.txt 
u1
123456
u2
123456
u3
1234567
u4
1234567     

2、然后重新生成db文件并准备权限文件

[root@vsftp vsftpd]# db_load -T -t hash -f guser.txt guser.db

[root@vsftp ghostuser_dir]# cp u1 u3
[root@vsftp ghostuser_dir]# cp u1 u4

3、重启服务:

[root@vsftp ghostuser_dir]# systemctl restart vsftpd

登录测试:

[root@localhost ~]# ftp 172.16.12.97
Name (172.16.12.97:root): u3   <------虚拟用户名
331 Please specify the password.
Password:    <------密码
230 Login successful.     //登录上来了。
ftp> ls
drwx------    2 1000     1000           20 Dec 17 18:01 u1_dir

并且之前的用户也能用。

【2】MySQL方式做ftp的虚拟用户。

安装mysql 和vsftpd

[root@vsftpd_mysql ~]# yum install mariadb mariadb-server mariadb-devel vsftpd -y

同上:
1、创建普通用户:

[root@vsftpd_mysql ~]# useradd -s /sbin/nologin viruser

2、修改配置文件

[root@vsftpd_mysql ~]# vim /etc/vsftpd/vsftpd.conf 

#pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

pam_service_name=vsftpd.vu
anonymous_enable=NO
user_config_dir=/etc/vsftpd/viruser_dir
guest_enable=YES
guest_username=viruser
max_clients=100
max_per_ip=3
anon_max_rate=100000

同上,就是改了下用户和目录的名字

3、准备虚拟用户列表

[root@vsftpd_mysql vsftpd]# systemctl restart mariadb 
[root@vsftpd_mysql vsftpd]# systemctl enable mariadb
[root@vsftpd_mysql vsftpd]# mysql
MariaDB [(none)]> create database vsftpd;
MariaDB [(none)]> grant all on vsftpd.* to ftpuser@'localhost' identified by '000000';
MariaDB [(none)]> flush privileges;

MariaDB [(none)]> use vsftpd
MariaDB [vsftpd]> create table userlist(name varchar(20) , passwd varchar(20));

MariaDB [vsftpd]> insert into userlist values("tom" ,"000000");
MariaDB [vsftpd]> insert into userlist values("cat" ,"000000");
MariaDB [vsftpd]> select * from userlist;
+------+--------+
| name | passwd |
+------+--------+
| tom  | 000000 |
| cat  | 000000 |
+------+--------+

准备权限控制目录

[root@vsftpd_mysql vsftpd]# mkdir viruser_dir

[root@vsftpd_mysql viruser_dir]# vim tom
local_root=/home/viruser
allow_writeable_chroot=YES
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES

[root@vsftpd_mysql viruser_dir]# cp tom cat

4、安装pam_mysql

vsftpd连接MySQL的工具。
安装编译器等等:

[root@vsftpd_mysql ~]# yum install -y gcc gcc-c++ pam-devel
[root@vsftpd_mysql ~]# wget http://www.huzs.net/soft/vsftpd/pam_mysql-0.7RC1.tar.gz

[root@vsftpd_mysql ~]# tar xf pam_mysql-0.7RC1.tar.gz 
[root@vsftpd_mysql ~]# cd pam_mysql-0.7RC1/

[root@vsftpd_mysql pam_mysql-0.7RC1]# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security/

[root@vsftpd_mysql pam_mysql-0.7RC1]# make 
[root@vsftpd_mysql pam_mysql-0.7RC1]# make install

[root@vsftpd_mysql pam_mysql-0.7RC1]# ls /usr/lib64/security/pam_mysql.so 
要有这个文件。

5、编辑pam配置文件

[root@vsftpd_mysql pam.d]# vim vsftpd.vu
auth    required    /usr/lib64/security/pam_mysql.so    user=ftpuser passwd=000000 host=localhost db=vsftpd table=userlist usercolumn=name passwdcolumn=passwd crypt=0
account required    /usr/lib64/security/pam_mysql.so    user=ftpuser passwd=000000 host=localhost db=vsftpd table=userlist usercolumn=name passwdcolumn=passwd crypt=0

6、重启服务

[root@vsftpd_mysql ~]# systemctl restart vsftpd
[root@vsftpd_mysql ~]# systemctl enable vsftpd

7、访问测试:

[root@localhost ~]# ftp 172.16.12.98
Connected to 172.16.12.98 (172.16.12.98).
220 (vsFTPd 3.0.2)
Name (172.16.12.98:root): tom
331 Please specify the password.
Password:
230 Login successful.

//其实看到230就是登陆成功了。

添加用户:

mysql这个添加用户就简单得多了,数据库添加一条,然后添加一下权限文件。就能用了。

MariaDB [vsftpd]> insert into userlist values("dog","000000");

MariaDB [vsftpd]> select * from userlist;
+------+--------+
| name | passwd |
+------+--------+
| tom  | 000000 |
| cat  | 000000 |
| dog  | 000000 |
+------+--------+
3 rows in set (0.00 sec)
[root@vsftpd_mysql viruser_dir]# cp tom dog 

然后直接测试:

[root@localhost ~]# ftp 172.16.12.98
Connected to 172.16.12.98 (172.16.12.98).
220 (vsFTPd 3.0.2)
Name (172.16.12.98:root): dog
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值