vsftp配置(3)-认证模式

匿名访问模式

vsftpd 服务程序默认开启了匿名开放模式, 我们需要做的就是开放匿名用户的上传、下载文件的权限, 以及让匿名用户创建、删除、更名文件的权限。

# 匿名访问模式主配置文件 /etc/vsftpd/vsftpd.conf

anonymous_enable=YES

anon_umask=022

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

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

#总结

在vsftpd服务程序的匿名开放认证模式下, 其账户统一为anonymous, 密码为空

连接到FTP服务器后, 默认访问的是/var/ftp目录, 我们可以在其中进行创建、删除等操作

创建目录系统显示拒绝, 这是为什么呢?

原因:

1. ls -ld /var/ftp/pub 查看该目录的权限得知, 只有root管理员才有写入权限

2. getsebool -a | grep ftp 查看与FTP相关的SELinux域策略都有哪些 根据经验和策略的名称判断出是ftpd_full_access--> off策略规则导致了操作失败

解决:

1. chown -Rf ftp /var/ftp/pub #开放ftp用户权限(该账户在系统中已经存在)

setsebool -P ftpd_full_access=on

此时, 匿名用户就可以正常使用FTP服务了

本地用户模式

#本地用户模式主配置文件 /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

connect_from_port_20=YES

listen=NO

listen_ipv6=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

xferlog_enable=YES

xferlog_std_format=YES

#总结

现在已经完全可以本地用户的身份登录FTP服务器了, 但是使用root无法登陆 这是因为, 为了系统的安全, 默认禁止root等用户登录FTP服务

因为vsftpd服务程序所在的目录中, 默认存放着两个名为用户名单的文件, ftpusers和user_list 在ftpusers和user_list两个用户文件中将root用户删除就可以登录了

在采用本地用户模式登录FTP服务器后, 默认访问的是该用户的家目录, 因此不存在写入权限不足的情况

如果不关闭SELinux, 则需要再次开启SELinux域中对FTP服务的允许策略 setsebool -P ftpd_full_access=on

即可以使用系统用户进行FTP服务的登录了

虚拟用户模式(文本文件)

认证模式:vsftpd + pam + file

#第一步:创建用于进行 FTP 认证的用户数据库文件

这里使用文本文件 vuser.list 进行用户认证 数据库文件中奇数行为账户名, 偶数行为密码

例如: vuser.list 内容

zhangsan

redhat

lisi

redhat

明文信息既不安全, 也不符合让vsftpd服务程序直接加载的格式 因此需要使用db_load命令用哈希算法将原始的明文信息文件转换成数据库文件 降低数据库文件的权限, 然后再把原始的明文信息文件删除

db_load -T -t hash -f vuser.list vuser.db

chmod 600 vuser.db

rm -f vuser.list

#第二步:创建 vsftpd 服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户

FTP服务用于存储文件的根目录指的是, 当虚拟用户登录后所访问的默认位置

可以把这个系统本地用户的家目录设置为/var目录并设置不允许登录FTP服务器

useradd -d /var/ftproot -s /sbin/nologin virtual

chmod -Rf 755 /var/ftproot/

#第三步:建立支持虚拟用户的 PAM 认证文件

PAM是一种认证机制, 通过一些动态链接库和统一的API把系统提供的服务与认证方式分开

PAM是可插拔认证模块, 使得系统管理员可以根据需求灵活调整服务程序的不同认证方式

新建一个用于虚拟用户认证的PAM文件vsftpd.vu

PAM文件内的db=参数为使用db_load命令生成的账户密码数据库文件的路径, 但不用写数据库文件的后缀

vim /etc/pam.d/vsftpd.vu

auth required pam_userdb.so db=/etc/vsftpd/vuser

account required pam_userdb.so db=/etc/vsftpd/vuser

#第四步:在 vsftpd.conf 文件中添加支持配置

在vsftpd服务程序的主配置文件中默认就带有参数 pam_service_name=vsftpd

表示登录FTP服务器时是根据/etc/pam.d/vsftpd文件进行安全认证的 我们要做的就是把vsftpd主配置文件中原有的 PAM 认证文件 vsftpd 修改为新建的 vsftpd.vu 文件即可

虚拟用户模式(文本文件) 参数文件 /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

pam_service_name=vsftpd.vu

user_config_dir=/etc/vsftpd/vusers_dir

local_enable=YES

guest_enable=YES

guest_username=virtual

allow_writeable_chroot=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

userlist_enable=YES

tcp_wrappers=YES

#第五步:为虚拟用户设置不同的权限

只需新建一个目录, 在里面分别创建两个以zhangsan和lisi命名的文件 在每个文件中, 对用户分别进行配置, 达到管理不用用户权限的效果

mkdir /etc/vsftpd/vusers_dir/

cd /etc/vsftpd/vusers_dir/

touch lisi

cat > zhangsan<<EOF

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

EOF

#第六步:设置 SELinux 域允许策略

setsebool -P ftpd_full_access=on #先按照前面实验中的步骤开启SELinux域的允许策略, 以免再次出现操作失败的情况

getsebool -a | grep ftp

#第七步:使用虚拟 FTP 用户访问测试

虚拟用户模式(MySQL数据库)

#第一步:安装所需要程序

安装 mysql 和 pam_mysql, pam_mysql 由epel源提供

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

#第二步:创建虚拟用户账号

准备数据库及相关表

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

create database vsftpd;

授权vsftpd用户可以通过localhost主机操作select权限vsftpd库的所有表, 密码为123456

grant select on vsftpd.* to vsftpd@localhost identified by '123456';

grant select on vsftpd.* to vsftpd@127.0.0.1 identified by '123456';

flush privileges;

创建相关表

use vsftpd;

create table users (id INT UNSIGNED AUTO_INCREMENT NOT NULL, name VARCHAR(50) BINARY NOT NULL, password char(48) BINARY NOT NULL, PRIMARY KEY(id));

添加测试的虚拟用户

根据需要添加所需要的用户, 需要说明的是, 这里将其密码为了安全起见应该使用 PASSWORD 函数加密后存储

INSERT INTO users(name, password) VALUES('tom', password('123456'));

INSERT INTO users(name, password) VALUES('bob', password('123456'));

SELETC * FROM user;

#第三步:配置 vsftpd

建立pam认证所需文件 /etc/pam.d/vsftpd.mysql 添加如下两行, 主要32位和64位库文件的不同位置, 模块路径可不写表示pam模块路径

指定用户、密码、主机、数据库、表、用户名字段、密码字段、密码的加密方式 密码的加密方式可以通过安装的 pam_mysql 的文档查看, /usr/share/doc/pam_mysql-0.7/README rpm -ql pam_mysql

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

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

注意:由于mysql的安装方式不同, pam_mysql.so基于unix sock连接mysql服务器时可能会出问题, 此时, 建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。

#修改vsftpd的配置文件, 使其适应mysql认证

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

useradd -s /sbin/nologin -d /var/ftproot vuser

chmod go+rx /var/ftproot

请确保/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选项的值如下所示

pam_service_name=vsftpd.mysql

#第四步:启动 vsftpd 服务

#第五步:配置虚拟用户具有不同的访问权限

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

配置 vsftpd.conf 为虚拟用户使用配置文件目录

user_config_dir=/etc/vsftpd/vusers_config

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

mkdir /etc/vsftpd/vusers_config/

cd /etc/vsftpd/vusers_config/

touch tom bob

配置虚拟用户的访问权限

虚拟用户对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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺浦力特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值