侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

网络文件共享(3)之vsftpd基于pam+mysql完成虚拟用户认证

zze
zze
2020-01-27 / 0 评论 / 0 点赞 / 335 阅读 / 3603 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

安装所需要的程序

1、安装 mysql 和 pam_mysql:

$ yum -y install vsftpd mysql-server mysql-devel pam_mysql

注意:pam_mysql 由 epel 源提供。

创建虚拟用户账号

1、首先请确保 mysql 服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为 vsftpd 数据库。

mysql> create database vsftpd;

mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'zze.xyz';
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'zze.xyz';
mysql> flush privileges;

mysql> use vsftpd;
mysql> create table users (
    -> id int AUTO_INCREMENT NOT NULL,
    -> name char(20) binary NOT NULL,
    -> password char(48) binary NOT NULL,
    -> primary key(id)
    -> );

2、添加测试的虚拟用户,需要说明的是,这里为了安全起见将密码使用 PASSWORD 函数加密后存储。

mysql> insert into users(name,password) values('tom',password('tom'));
mysql> insert into users(name,password) values('jerry',password('jerry'));

配置 vsftpd

1、建立 pam 认证所需文件 /etc/pam.d/vsftpd.mysql,内容如下:

auth required /lib64/security/pam_mysql.so user=vsftpd passwd=zze.xyz host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=zze.xyz host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

其中 crypt 参数的值需要视虚拟用户密码在 mysql 中存储的方式而定,如果存储的是明文,则其值设为 0,如果是使用 PASSWORD 函数加密存储,则其值需要设为 2,具体可查看 pam_mysql 的 README 文档,文档位置可通过 rpm -ql pam_mysql 查看。

2、建立虚拟用户映射的系统用户及对应的目录:

$ useradd -s /sbin/nologin -d /var/ftproot vuser
$ chmod go+rx /var/ftproot

3、请确保 /etc/vsftpd.conf 中启用参数如下:

anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES

# 额外添加下面参数
guest_enable=YES
guest_username=vuser

# 修改此参数
pam_service_name=vsftpd.mysql

启动 vsftpd 服务

1、直接执行下面命令启动 vsftpd 服务:

$ service vsftpd start
$ #chkconfig vsftpd on

2、检查 21 端口是否处于监听状态:

$ ss -tnlp | grep :21                                                                                                                                                      
LISTEN     0      32                        *:21                       *:*      users:(("vsftpd",8983,3))

3、使用 ftp 客户端连接 vsftpd 服务,测试虚拟用户登录:

$ ftp 10.0.1.201
Connected to 10.0.1.201.
220 (vsFTPd 2.2.2)
Name (10.0.1.201:zhangzhongen): tom
331 Please specify the password.
Password: 
230 Login successful.
ftp> 

配置虚拟用户具有不同的访问权限

vsftpd 可以在配置文件目录中为每个用户提供单独的配置文件以定义其 ftp 服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在 vsftpd.conf 指定其路径及名称即可。

1、配置 vsftpd 为虚拟用户使用配置文件目录:

$ vim /etc/vsftpd/vsftpd.conf
...
# 添加如下选项
user_config_dir=/etc/vsftpd/vusers_config 

2、创建所需要目录,并为虚拟用户提供配置文件:

$ mkdir /etc/vsftpd/vusers_config/
$ cd /etc/vsftpd/vusers_config/
$ touch tom jerry

3、配置虚拟用户的访问权限,虚拟用户对 vsftpd 服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要设定 tom 用户上传文件、创建目录、删除文件的权限,可以修改 /etc/vsftpd/vusers_config/tom 文件,在里面添加如下选项即可。

anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
0

评论区