近两天文章
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 # set -x GFIPREFIX=/usr/local/data GFIUSER=www yum -y install vsftpd yum -y install libdb-utils [ ! -d /var/run/www ] && mkdir /var/run/www cd /etc/vsftpd cat > loguser.txt <<EOF zhangsan 123456 lisi 654321 EOF db_load -T -t hash -f /etc/vsftpd/loguser.txt /etc/vsftpd/loguser.db [ -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 #useradd -d $GFIPREFIX/www -s /sbin/nologiin $GFIUSER cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.`date +%F` 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_max_port=4550 pasv_min_port=4530 EOF sed -i 's/anonymous_enable=YES/anonymous_enable=NO/g' /etc/vsftpd/vsftpd.conf sed -i 's/listen=NO/listen=YES/g' /etc/vsftpd/vsftpd.conf sed -i 's/listen_ipv6=YES/listen_ipv6=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/ooopic@xferlog_file=/var/log/ooopic@g' /etc/vsftpd/vsftpd.conf sed -i 's/xferlog_file=\/var\/log\/xferlog/xferlog_file=\/var\/log\/ooopic/g' /etc/vsftpd/vsftpd.conf 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 service vsftpd restart
备注:
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