Linux详细搭建 vsftpd 服务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux详细搭建 vsftpd 服务相关的知识,希望对你有一定的参考价值。
1.FTP服务简介
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文件传输协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。
在FTP的使用当中,用户经常遇到两个概念下载(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件,由于FTP的文件传输是明文方式,具有一定危险性,所以就诞生了一种更加安全的传输方式vsftp,下面主要介绍vsftp的特性及相关配置。
2.VSFTP是一个比FTP更安全的软件具有以下特点:
(1)vsftp一般以普通用户运行,降低了进程的权限,提高了安全性
(2)任何需要执行较高权限的指令都需要上层程序的许可
(3)ftp的命令都被整合到了vsftp中,不需要系统额外提供命令
(4)用于chroot功能,可以改变用户的根目录,限制用户只能在自己的家目录
(5)vsftpd 是一个基于GPL发布的FTP服务器软件。其中的vs是“ Very Secure”的缩写,由此名称缩写可以看出,本服务器的初衷就是服务的安全性。
(6)vsftpd是RedHat Linux默认使用的ftp服务端软件。
(7)vsftpd不再依赖于xinetd服务
(8)vsftpd可同时允许匿名( anonymous )与本地用户(local)访问,还可以支持虚拟用户。
3.vsftpd连接类型
命令连接:TCP 21,用于发送FTP命令信息
数据连接:TCP 20,用于上传、下载数据
4.vsftpd工作模式
主动模式:(服务端通过20号端口主动向客户端进行连接,来进行数据传输)
1.命令连接:客户端(1025) -----> 服务端 (21)
客户端以一个随机端口(大于1023)来连接服务端的21号端口
2.数据连接:服务器端(20/tcp)-----> 客户端 (1025+1)
服务端以自己的20号端口去连接客户端创建命令连接时使用的随机端口+1的端口号
被动模式:(服务端启动随机端口,等待客户端进行连接,来进行数据传输)
1.命令连接:客户端(1110)----> 服务端(21)
客户端以一个随机端口来连成服务端的21号端口
2.数据连接:客户端(1110+1) ----> 服务端(随机端口)
5.vsftpd配置
/etc/pam.d/vsftpd //vsftpd用户认证配置文件
/etc/vsftpd/ //配置文件目录
/etc/vsftpd/vsftpd.conf //主配置文件
vsftpd常见的配置参数:
参数 | 作用 |
---|---|
anonymous_enable=YES | 启用匿名用户登入 |
anon_upload_enable=YES | 允许匿名用户上传 |
anon_mkdir_write_enable=YES | 允许匿名用户创建目录,但是不能删除 |
anon_other_write_enable=Y ES | 允许匿名用户创建和删除目录 |
local_enable=YES | 启用本地用户登入 |
write_enable=YES | 允许本地用户有写权限 |
local_umask=022 | 通过ftp上传文件的默认遮罩码 |
chroot_local_user=YES | 禁锢所有的ftp本地用户于其家目录中 |
chroot_list_enable=YES | 开启禁锢文件列表 需要与chroot_list_file参数一起使用 |
chroot_list_file=/etc/vsftpd/ chroot_list | 指定禁锢列表文件路径 在此文件里面的用户将禁锢在其家目录中 |
allow_writeable_chroot=YE S | 允许被禁锢的用户家目录有写权限 |
xferlog_enable=YES | 是否启用传输日志,记录ftp传输过程 |
xferlog_std_format=YES | 传输日志是否使用标准格式 |
xferlog_file=/var/log/xferlog | 指定传输日志存储的位置 |
chown_uploads=YES | 是否启用改变上传文件属主的功能 |
chown_username=whoever | 指定要将上传的文件的属主改为那个用户 此用户必须在系统中存在 |
pam_service_name=vsftpd | 指定vsftpd使用/etc/pam.d下的哪个pam配置文件进行用户认证 |
userlist_enable=YES | 是否启用控制用户登录的列表文件;默认为/etc/vsftpd/user_list文件 |
userlist_deny=YES | 是否拒绝userlist指定的列表文件中存在的用户登录ftp |
max_clients=# | 最大并发连接数 |
max_per_ip=# | 每个IP可同时发起的并发请求数 |
anon_max_rate | 匿名用户的最大传输率,单位是“字节/秒” |
local_max_rate | 本地用户的最大传输率,单位是“字节/秒” |
dirmessage_enable=YES | 启用某目录下的.message描述信息 假设有一个目录为/upload,在其下创建一个文件名为.message, 在文件内写入一些描述信息,则当用户切换至/upload目录下时会自动显示.message文件中的内容 |
message_file | 设置访问一个目录时获得的目录信息文件的文加名,默认是.message |
idle_session_timeout=600 | 设置默认的断开不活跃session时间 |
data_connection_timeout=1 20 | 设置数据传输超时时间 |
ftpd_banner="Welcome to c henlf FTP service." | 定制欢迎信息,登录ftp时会自动显示 |
6.用户认证
ftp的用户主要有三种:
虚拟用户:仅用于访问某特定服务中的资源
系统用户:可以登入系统的真实用户
匿名用户
7.vsftpd虚拟用户配置步骤如下(演示)
关闭防火墙
//安装依赖的程序
[[email protected] ~]# cd /etc/yum.repos.d/
[[email protected] ~]# yum install -y wget
[[email protected] yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
[[email protected] ~]# yum clean all
[[email protected] ~]# yum -y install epel-release
[[email protected] ~]# yum install -y vsftpd db4*
//创建文本格式的用户名,密码列表
[[email protected] ~]# cat >> /etc/vsftpd/vu.list << EOF
lan
123
zhi
123
EOF
//将刚创建的文本格式的用户名和密码文件使用db4工具转换成数据库文件
[[email protected] ~]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
//给虚拟用户的文件权限为600,以免数据外泄
[[email protected] ~]# chmod 600 /etc/vsftpd/vu.*
[[email protected] ~]# ll /etc/vsftpd/vu.*
-rw-------. 1 root root 12288 Aug 2 15:53 /etc/vsftpd/vu.db
-rw-------. 1 root root 18 Aug 2 15:50 /etc/vsftpd/vu.list
//给虚拟用户的映射账号,映射账号的名称为vftp
[[email protected] ~]# useradd -d /var/ftproot -s /sbin/nologin vftp
[[email protected] ~]# chmod 755 /var/ftproot/
[[email protected] ~]# ll -d /var/ftproot/
drwxr-xr-x. 2 vftp vftp 62 Aug 2 15:56 /var/ftproot/
//为虚拟用户建立PAM认证
[[email protected] ~]# mv /etc/pam.d/vsftpd{,.bak}
[[email protected] ~]# vim /etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu
//修改vsftpd配置文件,添加虚拟用户支持。为不同虚拟用户建立独立的配置文件
[[email protected] ~]# cp /etc/vsftpd/vsftpd.conf .
[[email protected] ~]# cat >> /etc/vsftpd/vsftpd.conf << EOF
guest_enable=YES
guest_username=vftp
user_config_dir=/etc/vsftpd/vusers_dir
allow_writeable_chroot=YES
EOF
//有了上述配置后,可以在/etc/vsftpd/vusers_dir目录中为每个虚拟用户分别建立配置文件了
[[email protected] ~]# mkdir /etc/vsftpd/vusers_dir
[[email protected] ~]# ll /etc/vsftpd/
total 36
-rw-------. 1 root root 125 Mar 23 2017 ftpusers
-rw-------. 1 root root 361 Mar 23 2017 user_list
-rw-------. 1 root root 5106 Aug 2 16:01 vsftpd.conf
-rwxr--r--. 1 root root 338 Mar 23 2017 vsftpd_conf_migrate.sh -rw-------. 1 root root 12288 Aug 2 15:53 vu.db
-rw-------. 1 root root 18 Aug 2 15:50 vu.list
drwxr-xr-x. 2 root root 6 Aug 2 16:03 vusers_dir
//设置lan用户可以上传文件,创建目录,删除操作
[[email protected] ~]# cat >> /etc/vsftpd/vusers_dir/lan << EOF
>anon_umask=022
>anon_upload_enable=YES
>anon_mkdir_write_enable=YES
>anon_other_write_enable=YES
>EOF
//设置zhi用户只要默认的下载权限,只需创建一个名为zhi的空文件即可
[[email protected] ~]# touch /etc/vsftpd/vusers_dir/zhi
//启动vftpd服务
[[email protected] ~]# systemctl start vsftpd
8.通过脚本来实现虚拟用户配置以及实现文件共享功能
[[email protected] ~]#vim ftp.sh
#!/bin/bash
#关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
sed -ri ‘s#^(SELINUX=).*#1disabled#g‘ /etc/selinux/config
setenforce 0
#安装依赖的程序
cd /etc/yum.repos.d/
mv * /tmp/
curl -o 163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
sed -i ‘s/$releasever/7/g‘ /etc/yum.repos.d/163.repo
sed -i ‘s/enabled=0/enabled=1/g‘ /etc/yum.repos.d/163.repo
yum clean all && yum install -y epel-release && yum install -y vsftpd db4* &>/dev/null
#添加两个用户lan、zhi 密码分别为123、123
cat > /etc/vsftpd/vu.list << EOF
lan
123
zhi
123
EOF
#使用db4工具转换成数据库文件
db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
#给虚拟用户设置文件权限为600
chmod 600 /etc/vsftpd/vu.*
#给虚拟用户映射账号 创建ftp根目录 映射账号的名称为 vftp
id vftp &>/dev/null
if [ $? -ne 0 ];then
useradd -d /var/fenxiang -s /sbin/nologin vftp
else
userdel -r vftp
useradd -d /var/fenxiang -s /sbin/nologin vftp
fi
chmod 755 /var/fenxiang/
#为虚拟用户建立PAM认证
mv /etc/pam.d/vsftpd{,.bak}
cat > /etc/pam.d/vsftpd << EOF
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu
EOF
#修改Vsftpd主配置文件
cp /etc/vsftpd/vsftpd.conf /root/
cat >> /etc/vsftpd/vsftpd.conf << EOF
guest_enable=YES
guest_username=vftp
user_config_dir=/etc/vsftpd/yonghu
allow_writeable_chroot=YES
EOF
#配置虚拟用户lan的权限 上传 下载 删除
if [ ! -d /etc/vsftpd/yonghu ];then
mkdir /etc/vsftpd/yonghu
fi
cat > /etc/vsftpd/yonghu/lan << EOF
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF
touch /etc/vsftpd/yonghu/zhi
systemctl restart vsftpd
以上是关于Linux详细搭建 vsftpd 服务的主要内容,如果未能解决你的问题,请参考以下文章
Linux系统下vsftpd虚拟ftp用户账号存放在mysql数据库的FTP搭建