CentOS7 安装vsftp

CentOS7 安装vsftp配置虚拟用户

使用 MySQL 认证ftp用户   https://www.cnblogs.com/outsrkem/p/12654694.html

yum -y install vsftpd

创建虚拟用户:
1.在/etc/vsftpd/创建 ftp 软件的认证配置文件(虚拟用户的认证文件)
vi /etc/vsftpd/vsftpd.user

奇数行:用户名
偶数行:密码

2.将产生的认证文件转化为数据库文件 ,(后缀一定要是*.db)
cd /etc/vsftpd/
db_load -T -t hash -f vsftpd.user vsftpd.db
# 将产生的*.db 文件修改权限,保证安全
chmod 600 vsftpd.db

3.为虚拟用户创建映射用户并修改家目录权限为 704
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod 704 /var/ftproot/

4.修改 ftp 的认证机制为虚拟用户认证(各个软件服务的认证机制配置文件 /etc/pam.d/)
cd /etc/pam.d/
cp -a vsftpd vsftpd.pam
# 用默认使用的认证配置文件生成新的认证配置文件,修改 vsftpd.pam 文件,删除所有,添加自定义的两行
cat << EOF > vsftpd.pam
# 指定自定义生成的数据库文件
auth    required pam_userdb.so db=/etc/vsftpd/vsftpd
# 借助 pam_userdb.so 函数文件帮助 vsftpd 软件解读认证虚拟用户的登录
account required pam_userdb.so db=/etc/vsftpd/vsftpd
EOF

5.修改配置文件
vi /etc/vsftpd/vsftpd.conf

修改:
anonymous_enable=NO          # 关闭匿名用户登录
pam_service_name=vsftpd.pam  # 将认证配置文件指向自己创建的
添加:
guest_enable=YES             # 开启虚拟用户
guest_username=virtual       # 指定虚拟用户的映射用户为 virtual
user_config_dir=/etc/vsftpd/dir # 每一个虚拟用户的配置文件保存路径
anon_umask=022               # 添加 umask 值
allow_writeable_chroot=YES   # 新版必须添加否则取消目录w权限,从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报错。
pasv_enable=YES    (默认没有,如果不写默认是被动模式状态)
pasv_min_port=4000 (默认没有,限定端口范围便于配置防火墙)
pasv_max_port=4020 (默认没有,限定端口范围便于配置防火墙)

注:要保证虚拟用户上传的文件能下载,必须在配置文件中添加 umask 值,让上传的文件其他人位置有 r 权限,其虚拟用户的访问时靠匿名用户权限生效。配置文件不要有其他字符。

6.为虚拟用户创建配置文件

mkdir /etc/vsftpd/dir/ && cd /etc/vsftpd/dir/
虚拟用户的配置文件文件名和用户名同名即可(如 a1用户的配置文件名为a1)
a、a1 用户的配置文件
anon_upload_enable=YES         # 开启上传

b、a2 用户的配置文件
anon_mkdir_write_enable=YES    # 允许创建目录

c、a3 用户的配置文件
anon_upload_enable=YES         # 开启上传
anon_other_write_enable=YES    # 开放其他人写入权限,操作其他文件

d、a4 用户的配置文件
local_root=/var/ftproot/a4     # 配置a4用户的根目录
anon_upload_enable=YES         # 开启上传
anon_mkdir_write_enable=YES    # 允许创建目录
anon_other_write_enable=YES    # 开放其他人写入权限,操作其他文件

7.启动vsftpd并配置防火墙

systemctl start vsftpd
systemctl enable vsftpd && systemctl is-enabled vsftpd
systemctl status vsftpd
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 4000:4020 -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    # 主动模式使用
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT     # 主动模式使用

 

全局配置项字段详解

listen=NO                   # 是否以独立运行的方式监听服务
listen_address=IP           # 设置监听f t p服务的ip地址,默认监听所有IP地址
listen_port=21              # 设置监听ftp服务的端口号
write_enable=YES            # 开启写入权限
download_enable=YES         # 允许下载权限
dirmessage_enable=YES       # 用户切换进入目录时显示 “.message”文件(如果已存在)的内容
xferlog_enable=YES          # 启用xferlog日志,默认记录到 /var/log/xferlog
xferlog_std_format=YES      # ftp日志格式
connect_from_port_20=YES    # 数据连接端口号默认20
pasv_enable=NO              # 禁止被动模式连接;默认允许被动模式连接
pasv_max_port=21600         # 起始端口号
pasv_min_port=21700         # 结束端口号
pam_service_name=vsftpd     # 开启PAM验证
userlist_enable=YES         # 允许user_list列表用户登录ftp
userlist_deny=YES           # 不允许user_list列表用户登录ftp
max_clients=0               # 限制多个客户端同时连接(0为无限制)
max_per_ip=0                # 允许相同IP地址访问ftp连接次数(0为无限制)
tcp_wrappers=YES            # ftp的访问控制列表提升安全性使用

匿名配置项字段详解
anonymous_enable=YES          # 是否允许匿名访问;
anon_umask=022                # 设置匿名用户所上传文件的默认权限掩码值(反掩码);
anon_root=/var/ftp            # 设置匿名用户的FTP根目录;
anon_upload_enable=YES        # 是否允许匿名用户上传文件;
anon_mkdir_write_enable=YES   # 是否允许匿名用户由创建目录的写入权限;
anon_other_write_enable=YES   # 是否允许匿名用户有其他写入权限,如对文件改名、覆盖及删除文件等

本地用户配置项
local_enable=YES               # 是否允许本地用户访问;
local_umask=022                # 设置本地用户所上传文件的默认权限掩码值(反掩码);
local_root=/var/ftp            # 设置本地用户的FTP根目录(默认为用户的宿主目录);
chroot_local_user=YES          # 是否将FTP本地用户禁锢在宿主目录中;
allow_writeable_chroot=YES     # 允许被限制用户的主目录具有写权限;
local_max_rate=0               # 限制本地用户的最大传输速率(0为无限制),单位为字节/秒(B/s)

虚拟用户配置项
guest_username=virtual            # 指定映射的系统用户名称;
guest_enable=YES                  # 是否启用虚拟用户;
allow_writeable_chroot=YES        # 允许被限制用户的主目录具有写权限(此项必须写入,否则可能会报错)
anon_world_readable_only=NO       # 允许用户下载目录内容
anon_other_write_enable=YES       # 允许匿名用户有其他写入权限,如重命名、覆盖及删除文件等;
user_config_dir=/etc/vsftpd/dir   # 指定虚拟用户独立的配置文件目录;

VSFTP 的加密传输
使用 openssl+vsftpd 实现加密传输,FTP 默认明文传输
由专门的证书机构颁发证书文件和秘钥文件,将证书文件公布到网站上,客户端在和有证书的网站连接时,会先获取证书,通过证书将需要传输的数据进行加密,将加密内容发送到服务器端,服务器端使用秘钥文件进行解密,获取明文数据。
1.查看 openssl 是否安装,并且查看 vsftpd 是否支持 ssl
rpm -q openssl
ldd /usr/sbin/vsftpd | grep libssl

2.生成证书根,据提示要依次填写:国家、省份、城市、组织、部门、个人或主机名、邮箱

openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem
-subj /C=CN/ST=BJ/L=BJ/O=DEVOPS/CN=dev.vsftpd.com -days 3650

3.将证书保存到以下位置并修改权限

cp vsftpd.pem /etc/ssl/certs/vsftpd.pem
chmod 0500 /etc/ssl/certs/vsftpd.pem

4.修改 vsftpd 的主配置文件/etc/vsftpd/vsftpd.conf
ssl_enable=YES   # 启用 ssl 认证
ssl_tlsv1=YES    # 开启 tlsv1支持
ssl_sslv2=YES    # 开启sslv2支持
ssl_sslv3=YES    # 开启sslv3 支持
allow_anon_ssl=YES         # 允许匿名用户
force_anon_logins_ssl=YES
force_anon_data_ssl=YES    # 匿名登录和传输时强制使用 ssl
force_local_logins_ssl=YES
force_local_data_ssl=YES   # 本地登录和传输时强制使用 ssl
rsa_cert_file=/etc/ssl/certs/vsftpd.pem     # 证书文件所在目录

5.重启服务并使用 windows 第三方软件(FileZilla-FTP)作为客户端,选择显示 TLS/SSL 作为连接模连接即可。

其他说明:

主动模式(Port)
FTP 客户端首先和服务器的 TCP 21 端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送 PORT命令。
PORT 命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的 TCP 20 端口连接至客户端的指定端口发送数据。
FTP server 必须和客户端建立一个新的连接用来传送数据。,在linux上,如果不配置pasv_enable=NO,默认是被动模式。

pasv_enable=NO      # passive模式关闭(默认没有)
pasv_min_port=4000    (默认没有)
pasv_max_port=4020    (默认没有)
port_enable=YES     # active模式开启(默认没有)
connect_from_port_20=YES (即默认情况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。)(默认没有)

被动模式(Passive)
FTP 客户端首先和服务器的 TCP 21 端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送 PORT命令。
PORT 命令包含了客户端用什么端口接收数据,在传送数据的时候,打开一个临时的非特权端口(端口号大于 1023 小于 65535)并且通知客户端在这个端口上传送数据的请求,客户端连接 FTP 服务器此端口,然后 FTP 服务器将通过这个端口
传送数据。

pasv_enable=YES     (默认没有)
pasv_min_port=4000  (默认没有)
pasv_max_port=4020  (默认没有)
设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意(1024 – 65535端口)。默认值为0。把端口范围设在比较高的一段范围内,比如4000-4020。

 


作者:Outsrkem
出处:https://www.cnblogs.com/outsrkem/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/outsrkem/p/12643946.html