一、概述
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、登陆成功后
好吧,到这里就结束了…大家有兴趣可以测试一下。