VSFTP搭建和运维

应用安装
yum安装vsftp
yum -y install vsftpd

启动服务
systemctl start vsftpd.service

配置文件路径
/etc/vsftpd

虚拟用户配置
虚拟用户必须关闭匿名用户
anonymous_enable=NO

备份配置文件
#cp vsftpd.conf vsftpd.conf.bak
#vim /etc/vsftpd/vsftpd.conf

修改配置文件
变更后的vsftpd.conf内容如下
anonymous_enable=NO #不允许匿名用户登录
write_enable=YES #允许使用任何可以修改文件系统的FTP的指令
chroot_local_user=YES #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
chroot_list_enable=YES #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
use_localtime=YES #使用本地时间而不是GMT
local_enable=YES #vsftpd所在系统的用户可以登录vsftpd
allow_writeable_chroot=YES
xferlog_enable=YES #启用一个日志文件,用于详细记录上传和下载。
xferlog_file=/var/log/xferlog #记录上传下载文件的日志
xferlog_std_format=YES #记录日志使用标准格式
vsftpd_log_file=/var/log/vsftpd.log #vsftpd日志存放位置
local_umask=022 #匿名用户新增文件的umask数值
pam_service_name=vsftpd #验证文件的名字

listen_port=21
chroot_local_user=YES #用于指定用户列表文件中的用户,是否允许切换到上级目录
idle_session_timeout=120 #登陆之后超时时间60秒,登陆之后,一分钟不操作,就会断开连接。

data_connection_timeout=120
guest_enable=YES #启用虚拟用户
guest_username=ftpuser #虚拟用户名

user_config_dir=/etc/vsftpd/vuser_conf #虚拟用户配置文件路径
virtual_use_local_privs=YES #虚拟用户和本地用户有相同的权限,反之匿名权限

#pasv_min_port=10060
#pasv_max_port=10090

accept_timeout=5
connect_timeout=1

创建宿主用户
创建用户 ftpuser 指定 /home/vsftpd 目录
useradd -g root -M -d /home/vsftpd -s /sbin/nologin ftpuser

设置用户ftpuser密码
passwd ftpuser@123$%

把 /home/vsftpd 的所有权给ftpuser.root
mkdir -p /home/vsftpd
chown -R ftpuser.root /home/vsftpd

创建虚拟用户文件
touch /etc/vsftpd/vuser_passwd

编辑虚拟用户名单文件:(

第一行账号,第二行密码,注意:不能使用root做用户名,系统保留)

vi /etc/vsftpd/vuser_passwd

编辑内容,下面是 vuser_passwd 内容

ftp1
12345678
ftp2
12345678

:wq!#保存退出
生成虚拟用户数据库
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
chmod 600 /etc/vsftpd/vuser_passwd.db

用户配置
mkdir /etc/vsftpd/vuser_conf # 建立虚拟用户个人vsftp的配置文件
cd /etc/vsftpd/vuser_conf # 进入目录
touch ftp1 ftp2

编辑用户配置文件
每个文件(ftp1和ftp2写入如下内容,local_root=/home/vsftpd/ftp1#这里写入这个用户的实际存储路劲)
local_root=/home/vsftpd/ftp1
allow_writeable_chroot=YES #上传解决方案,参见下边注释。
write_enable=YES #允许用户上传,外部客户可以根据需求关闭上传权限。
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

注:
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列两项中的一项:
allow_writeable_chroot=YES

创建用户目录
#mkdir -p /home/vsftpd/ftp1
#mkdir -p /home/vsftpd/ftp2

虚拟用户PAM配置

cd /etc/pam.d/

备份vsftpd文件
#cp vsftpd vsftpd.bak

修改vsftpd文件内容
#加入第二和第三行,下面的都全部注释,注意下面是64位操作系统,如果是32位的话lib64需要改成lib
#%PAM-1.0
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth

服务生效
systemctl restart vsftpd.service # 重启服务
systemctl start vsftpd.service # 启动服务
systemctl status vsftpd.service # 服务状态查看

防火墙配置
FTP两种方式的工作原理:
Port模式
FTP 客户端首先动态的选择一个端口(一般是1024以上的)和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

Passive模式
在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。

很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。
iptables解决方案
停止firewall防火墙
systemctl stop firewalld
systemctl disable firewalld

关闭SeLinux
vim /etc/sysconfig/selinux
SELINUX=disabled

安装iptables防火墙
yum install iptables* -y

vi /etc/sysconfig/iptables-config
IPTABLES_MODULES=“ip_conntrack_netbios_ns”
IPTABLES_MODULES=“ip_conntrack_ftp” #必须
IPTABLES_MODULES=“ip_nat_ftp”

只开放21即可,主要利用ip_conntrack_ftp模块打洞。

vim /etc/sysconfig/iptables #编辑配置文件

iptables -P INPUT DROP
iptables -P OUTPUT\FORWARD ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 21,22 -j ACCEPT

其它配置
SSL配置
检查vsftpd是否支持ssl模块
ldd $(which vsftpd) |grep ssl

建立专门给vsftpd使用的凭据数据。CentOS有一个建立凭据的路径/etc/pki/tls/certs/,如果此配置必要则使用公网证书,将服务器证书和私钥合并成一个pem文件即可。
cd /etc/pki/tls/certs/
#生产密钥文件
make vsftpd.pem
#复制证书到vsftpd目录
cp -a vsftpd.pem /etc/vsftpd/
ll /etc/vsftpd/vsftpd.pem

公网证书合并pem文件
一般情况下,从证书颁发机构收到的证书文件里 有三段,第一段是服务器证书,第二段是中间证书,第三段是根证书。
把第一段服务器证书和私钥文件单独复制粘贴到另外一个txt文档里,改成pem文件即可。
#受信任根证书路径
/etc/pki/ca-trust/source/anchors/extca.crt

更新受信任的根证书

update-ca-trust

编辑配置文件并增加如下内容
ssl_enable=YES
allow_anon_ssl=YES #匿名支持ssl
force_anon_data_ssl=YES
force_anon_logins_ssl=YES
force_local_data_ssl=YES #本地用户数据传输加密
force_local_logins_ssl=YES #本地用户登录加密
ssl_tlsv1=YES
#ssl_sslv2=YES
#ssl_sslv3=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem

注:以上方法在PASV模式下不可行,开启端口范围的方式未尝试。最新的filezilla客户端在Port模式下当前是有bug的,需要编译安装的方式才能解决,默认软件包安装的方式尚不可行。
IP登录限制
修改/etc/vsftpd/vsftpd.conf
tcp_wrappers=YES

修改/etc/hosts.deny加入
vsftpd : ALL

修改/etc/hosts.allow加入
vsftpd:.admin99.net
vsftpd:192.168.0.
vsftpd:192.168.0.0/255.255.255.0

SSH登录限制
修改文件:/etc/hosts.deny,加上最后两行,阻止所有进入。
sshd:ALL
vsftpd:ALL

改 /etc/hosts.allow,加上允许访问的IP
#sshd
sshd:192.168.0.125
sshd:192.168.0.126

#vsfptd
vsftpd:192.168.0.125
vsftpd:192.168.0.126

日常运维
添加用户
vi /etc/vsftpd/vuser_passwd

用户一行,密码一行,持续添加即可。
更新用户数据库
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
chmod 600 /etc/vsftpd/vuser_passwd.db

配置用户目录&权限
创建用户配置文件
cd /etc/vsftpd/vuser_conf # 进入目录
touch ftp123

编辑用户ftp123的配置文件
local_root=/home/vsftpd/ftp123
allow_writeable_chroot=YES #上传解决方案,参见下边注释。
write_enable=YES #允许用户上传,外部客户可以根据需求关闭上传权限。
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

创建用户ftp123根目录
mkdir -p /home/vsftpd/ftp123
chown -R ftpuser.root /home/vsftpd/ftp123

使用场景
如果一个内部的员工对应多个外部客户,可以在这个员工的根目录下创建不同的客户目录,对应不同的客户的账户。
匿名场景
#Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES

#Anonymous_root
anon_root=/home/vsftpd/pub

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值