基于centos7部署FTP服务及通过PAM认证实现虚拟用户登录

一、概述

1、概述

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。
一般在各种Linux的发行版中,默认带有的ftp软件是vsftp。
vsftpd(very secure FTP daemon)是 UNIX 操作系统中的一个开源的、免费的 FTP 服务软件。它具有以下特点:
1)安全性高,轻小易用
2)支持系统用户、匿名用户和虚拟用户的权限验证和相关操作,但无论哪种用户,最终都会映射为一个对应的 系统用户
3)用户认证是基于 PAM 实现的

2、vsftpd配置

ftp的配置文件主要有三个,位于/etc/vsftpd目录下,分别是:

  • ftpusers 该文件用来指定那些用户不能访问ftp服务器。ftpusers不受任何配制项的影响,它总是有效,它是一个黑名单!该文件存放的是一个禁止访问FTP的用户列表
  • user_list取决于userlist_enable和userlist_deny两项配置。
  • vsftpd.conf vsftpd的主配置文件
    在这里插入图片描述
    chroot_local_user 和 chroot_local_user 组合功能如下:在这里插入图片描述

3、为每个系统用户配置各自的 ftp 根目录

在 /etc/vsftpd/vsftpd.conf 文件末尾添加如下指令:

# 系统用户登录后的根目录
local_root=/var/test/
# 匿名用户登录后的根目录
anon_root=/var/test/
# 设置用户独立配置文件保存目录
user_config_dir=/etc/vsftpd/userconfig/

此外,还要将 chroot_local_user 设置为 YES,使 FTP 用户登录后直接被锁定在自己的根目录上。
通过以上设定,系统用户和匿名用户都会将 /var/test/ 当做根目录,并且登录后直接被锁定在该目录。
但是以上的设置是针对所有系统用户和匿名用户的,如果想要给每个 FTP 用户指定根目录,我们可以给每个用户创建一个对应的配置文件。具体操作如下:
根据 user_config_dir 的设置,我们先在 /etc/vsftpd/ 目录下创建一个名为 userconfig 的目录
假设想要给用户 aaa 单独指定一个 FTP 根目录 /var/test/1,我们需要进入 userconfig 目录,在该目录下创建一个名为 aaa 的配置文件,编辑文件 aaa,配置内容如下:

local_root=/var/test1/

二、部署ftp服务

1、部署ftp

-- 检查安装vsftpd软件
rpm -qa |grep vsftpd
--检测是否安装了vsftpd软件,如果没有安装,使用YUM命令进行安装
yum install vsftpd -y

2、创建ftp用户及目录

groupadd ftp
useradd -g ftp ftp
useradd -g ftp yunwei
#passwd yunwei   (xxx)  #注意ftp登陆的密码不是认这个
mkdir -p /data/dfwlg-ftp/yunwei
touch /var/log/xferlog
chmod -R 777 /var/log/xferlog
chmod -R 777 /data/dfwlg-ftp/yunwei

3、修改vsftp配置文件(/etc/vsftpd/vsftpd.conf)

#设定Vsftpd的登陆标语
ftpd_banner=Welcome to FTP service! 
#当进入某个目录时,发送信息提示给远程用户
dirmessage_enable=YES
#禁止匿名用户登录 FTP
anonymous_enable=NO
#匿名用户上传
anon_upload_enable=YES
#匿名用户建立目录
anon_mkdir_write_enable=YES
#系统用户登录后的根目录
#local_root=/data/dfwlg-ftp
#允许本地系统用户登录
local_enable=YES
#开启任何形式的 FTP 写入命令,上传文件
write_enable=YES
#本地用户的 umask 设置
local_umask=022
#开启上传/下载 的日志记录
xferlog_enable=YES
#设定Vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来,并且由于这里更改了Vsftpd的服务宿主用户为手动建立的Vsftpd。必须注意给与该用户对日志的写入权限,否则服务将启动失败。
xferlog_file=/var/log/xferlog
#使用标准的 ftpd xferlog日志格式。
xferlog_std_format=YES
#开启主动模式,使用 20 端口来连接 FTP
pasv_enable=NO
connect_from_port_20=YES
listen_port=21
ftp_data_port=20
#所有用户都被限制在其主目录下
chroot_local_user=YES
#/etc/vsftpd/chroot_list的用户列表作为“例外”,不受限制在其主目录下
chroot_list_enable=YES
#设置空闲连接的超时时间,单位:秒
idle_session_timeout=300
allow_writeable_chroot=YES
#如果为 YES,vsftpd 将以独立模式运行并监听 IPv4 的套接字,处理相关连接请求
listen=NO
listen_ipv6=YES
#同一时间允许的最大连接数
max_clients=10
#设定PAM服务下dfwlg_ftp的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的dfwlg_ftp文件配置
pam_service_name=dfwlg_ftp
#虚拟用户配置文件的目录
user_config_dir=/etc/vsftpd/ftpuser
virtual_use_local_privs=YES
#启用 user_list 文件来控制用户登录
userlist_enable=YES
#userlist_deny=NO 默认为YES,改为NO会有bug,文件夹无法访问ftp
#使用 tcp_wrappers 作为主机访问控制方式
tcp_wrappers=YES
#设定支持异步传输功能
async_abor_enable=YES
ascii_upload_enable=YES
#设定支持ASCII模式的上传和下载功能。
ascii_download_enable=YES
#ftp用户默认的根目录是/home/ftp,如果要切换登陆目录,需要给予权限
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

4、在/etc/vsftpd/下创建虚拟用户

-- 允许切换目录的用户,在这里面的才能切换根目录
cat >/etc/vsftpd/chroot_list <<EOF
hwb
EOF

-- userlist_enable=YES,userlist_deny=YES
-- 不允许ftp登陆的用户
cat >/etc/vsftpd/user_list <<EOF
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
EOF

--虚拟用户访问权限及根目录配置
mkdir -p /etc/vsftpd/ftpuser
cat > /etc/vsftpd/ftpuser/yunwei <<EOF
local_root=/data/dfwlg-ftp/yunwei/
anon_world_readable_only=no
write_enable=yes
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF

cat > /etc/vsftpd/ftpuser/hwb <<EOF
local_root=/data/dfwlg-ftp/
anon_world_readable_only=no
write_enable=yes
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF


--生成虚拟用户的账号密码db数据库文件(增加用户是重复这部操作)
-- 奇数行 用户名,双数行 密码
cat > /etc/vsftpd/login.txt <<EOF
yunwei
xxx123
hwb
xxx1234
EOF
db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

5、更改pam认证模块(vsftpd.conf:pam_service_name–》/etc/pam.d/dfwlg_ftp:db–》/etc/vsftpd/login.db )

这个文件名要与主配置文件中的pam_service_name指定的一致,最后面的login就是login.db,但是这里的后缀是不需要写的

cat >/etc/pam.d/dfwlg_ftp <<EOF
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
EOF

6、启动服务

使用vsftpd软件,主要包括如下几个命令:

-- 启动ftp命令
systemctl start vsftpd

-- 停止ftp命令 
systemctl stop vsftpd

-- 重启ftp命令
systemctl restart vsftpd

三、登录方式(非vsftp机器)

1、Linux远程登陆

命令:ftp -A 服务器IP
在这里插入图片描述

2、文件夹输入地址:ftp://服务器IP/ ,右键可以选择登录

由于是主动模式,注意先去掉被动模式
在这里插入图片描述
然后直接访问即可。

3、 xftp登录

3.1、去掉被动模式

在这里插入图片描述

3.2、登陆成功后

在这里插入图片描述

好吧,到这里就结束了…大家有兴趣可以测试一下。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淡定波007

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

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

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

打赏作者

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

抵扣说明:

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

余额充值