CentOS 5.11 vsftpd 部署脚本

# 安装服务
yum install vsftpd

#  查看自启动状态
chkconfig --list | grep vsftpd

# 加入自启动
chkconfig vsftpd on

# 启动服务
/etc/init.d/vsftpd start

# 备份默认的配置文件
cp /etc/vsftpd/vsftpd.conf  /etc/vsftpd/vsftpd.conf.bak

# 创建 ftp 用户
useradd -d /var/www/example.com -s /sbin/nologin webadmin
useradd -d /var/www/example.com -s /sbin/nologin ftpadmin

# 修改用户密码
passwd webadmin
#~~~~~~~~

passwd ftpadmin
#~~~~~~~~

然后修改配置文件内容,反注释掉如下配置行:

local_enble=yes (本地帐户能够登陆)
write_enable=no (本地帐户登陆后无权删除和修改文件)
chroot_local_user=yes (本地所有帐户都只能在自家目录)
# 设置指定用户执行chroot chroot_list_enable=yes (文件中的名单可以调用)
chroot_list_file=/etc/vsftpd/chroot_list

然后在 /etc/vsftpd/chroot_list (新建)下面写入:

webadmin
ftpadmin

重新启动一下服务

service vsftpd restart

这样来让我们新的账号生效。 到这个时候,防火墙还没开放 21 端口,如果我们关掉防火墙,应该就可以访问到了

service iptables stop

试过 ok 的话把防火墙开回来。

先对防火墙开通两个模块,在 /etc/sysconfig/iptables-config 下面添加两句:

IPTABLES_MODULES="ip_nat_ftp"
IPTABLES_MODULES="ip_conntrack_ftp"

然后我们配置 iptables:

iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --sport 21 -j ACCEPT

测试一下,应该通了。

然后保存 iptables 的配置,再重启 iptables 试试:

/etc/rc.d/init.d/iptables save
service iptables restart

如果可以,大功告成。

最后还有几点注意,就是当时它的目录文件权限是:

目录 755 文件 744

[owner] root:root

因此这两个新的用户其实是没有权限的。

于是,我把这两个用户都设置到 root 组里面,然后将所有的组权限增加写权限。

usermod -g root webadmin
usermod -g root ftpadmin
chmod -R g+w /var/www/example.com

关于权限的设置,还可以参考一下这篇文章,采用 ACL 来单独给 ftpadmin 用户额外的权限:

http://blog.path8.net/archives/5950.html

# 将用户的权限递归设置为 777
setfacl -R -m u:ftpadmin:rwx /var/www/example.com
# 用户创建的文件夹默认的 acl 权限为 rwx
setfacl -R -d --set u:ftp:rwx /var/www/example.com

后记

注意,事实上,在 CentOS 6.0 的 vsftpd 部署中,本人发现了新的问题,主要的问题来源于 SELinux 策略默认把 ftp 的相关权限全部关闭了,不去主动打开这些设置是不行的:

getsebool -a | grep ftp

可以看到所有权限都是默认关闭的,这样就难怪连不上了。

需要 setsebool -P allow_ftpd_full_access 1 来打开。

注意一定要加上 -P 参数,否则重启会导致配置被重置。


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2015/02/centos-vsftpd.html【CentOS 5.11 vsftpd 部署脚本】

发表评论

电子邮件地址不会被公开。 必填项已用*标注