近两天文章
Linux shell脚本自动化 源码编译安装nginx ,并调优 nginx配置,nginx日志切割脚本
Linux shell脚本一键编译安装 PHP-8.3.3 ,以及安装php扩展redis、imagick、zip等
问题描述
经常遇到安装 vsftp,或给新人开 ftp权限的需求,这里记录下
vsftpd安装配置 脚本
脚本在 rocky linux 9.3运行一点问题没有,如果在 centos6,centos7运行,请将yum -y install libdb-utils替换成yum -y install db4-utils
#!/bin/bash # 安装 vsftpd 和 libdb-utils set -x GFIPREFIX=/usr/local/data GFIUSER=www yum -y install vsftpd yum -y install libdb-utils # 创建 vsftpd 运行目录 [ ! -d /var/run/www ] && mkdir /var/run/www # 切换到 vsftpd 配置目录 cd /etc/vsftpd # 创建用户认证数据库 cat > loguser.txt <<EOF zhangsan 123456 EOF db_load -T -t hash -f /etc/vsftpd/loguser.txt /etc/vsftpd/loguser.db # 配置 PAM 认证 [ -f /etc/pam.d/vsftpd ] && mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.`date +%F` cat > /etc/pam.d/vsftpd <<EOF auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/loguser account required /lib64/security/pam_userdb.so db=/etc/vsftpd/loguser EOF # 备份 vsftpd 配置文件 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.`date +%F` # 配置 vsftpd cat >> /etc/vsftpd/vsftpd.conf <<EOF allow_writeable_chroot=YES pam_service_name=vsftpd userlist_enable=YES #tcp_wrappers=YES hide_file=.* reverse_lookup_enable=NO chroot_local_user=YES secure_chroot_dir=/var/run/www guest_enable=YES guest_username=www user_config_dir=/etc/vsftpd/users_config use_localtime=YES pasv_enable=YES pasv_promiscuous=YES port_promiscuous=YES pasv_min_port=4530 pasv_max_port=4550 EOF # 关闭匿名访问和启用日志记录 sed -i 's/anonymous_enable=YES/anonymous_enable=NO/g' /etc/vsftpd/vsftpd.conf sed -i 's/^#xferlog_enable=YES/^xferlog_enable=YES/g' /etc/vsftpd/vsftpd.conf sed -i 's/xferlog_file=\/var\/log\/xferlog/xferlog_file=\/var\/log\/www/g' /etc/vsftpd/vsftpd.conf #关闭 selinux ##临时关闭 setenforce 0 ##永久关闭 sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config ##关闭firewalld systemctl status firewalld # 创建用户配置目录 mkdir /etc/vsftpd/users_config cd /etc/vsftpd/users_config # 创建用户配置文件并指定用户访问路径 touch zhangsan cat > zhangsan <<EOF write_enable=YES anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES local_root=$GFIPREFIX/www EOF # 重启 vsftpd 服务 systemctl restart vsftpd
备注:
pasv_min_port 和 pasv_max_port 分别指定了被动模式数据传输的端口范围的最小端口和最大端口。在配置 FTP 服务器时,你可以根据需要设置这两个参数,以确保服务器能够提供足够的端口数量供被动模式数据传输使用,并且避免与其他服务冲突。在被动模式下,客户端与服务器之间的数据传输不是直接的,而是通过服务器上的一个端口来传输数据。而这个端口是在一定的范围内动态选择的。
# ftp安装脚本使用
sh ftp-install.sh
开放 21 端口
开放 FTP 服务器的 21 端口和被动模式数据传输的端口范围4530和 4550
# 使用 iptables 命令 iptables -I INPUT -p tcp --dport 21 -j ACCEPT # 或者使用 firewalld 命令 firewall-cmd --zone=public --add-port=21/tcp --permanent # 重启防火墙服务 systemctl restart iptables # 或者 systemctl restart firewalld
如果是云平台,在安全组中放行21,4530,4550端口即可,不用在服务器上执行上述 4条命令
vsftpd新增用户
编辑 loguser.txt文件,在后面追加新增帐号和密码
在这里,想让新用户 lisi 拥有和 zhangsan 相同的访问目录。可以通过复制 zhangsan 用户的配置文件来实现:
cp /etc/vsftpd/users_config/zhangsan /etc/vsftpd/users_config/lisi
另外,也可以直接修改 lisi 用户的配置文件,将 local_root 路径设置为你想要的目录。但是请注意,这个目录的属主属组应该与配置文件中指定的 guest_username 用户一致。
write_enable=YES anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES local_root=/usr/local/data/www #指定了 FTP 服务器的根目录,即用户登录后默认所在的目录
完成以上操作后,需要将明文账号密码加载到 /etc/vsftpd/loguser.db 文件中:
db_load -T -t hash -f /etc/vsftpd/loguser.txt /etc/vsftpd/loguser.db
最后,重新启动 vsftpd 服务:
systemctl restart vsftpd
常见问题
1、500 OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in
解决办法
配置文件vsftpd.conf中注释 tcp_wrappers=YES,重启服务即可
2、 ftp 550 Create directory operation failed 和 ftp 553 Could not create file.
解决办法,关闭 selinux即可解决
#临时关闭 setenforce 0 #永久关闭 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config