安装 vsftpd
目前是和 @dotkrnl 一起合买 DigitalOcean 的 VPS ,我们目前在 VPS 上面放置了两三个 PHP 虚拟主机。之前 @dotkrnl 已经很好地配置了 nginx
, php-fpm
和 MariaDB
,然后我自己装了个 Wordpress ,发现没有 FTP 好不方便,于是我就装了个 vsftpd
,下面的记录可供参考。
首先,服务器的背景是这样的:
- 网站在
/srv/http/www/abcdabcd987.com/
里面 /srv/http/www/abcdabcd987.com/
的所有者是abcdabcd987_com
所有组是http
vsftpd.conf
如下:
anonymous_enable=NO # 拒绝匿名
local_enable=YES # 用 Linux 账号登入
write_enable=YES # 允许写入
local_umask=0007 # 去除其他人的所有权限
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
ftpd_banner=Welcome to remote.dotkrnl.com FTP service.
chroot_local_user=YES # 锁定根目录
allow_writeable_chroot=YES # 允许写入
listen=YES
seccomp_sandbox=NO # ???
userlist_deny=NO # 只允许特定用户登入
userlist_enable=YES # 使用用户列表
userlist_file=/etc/vsftpd.allowed_users
后来发现这样 FTP 上传的文件的所有组不是 http
,由于对 Linux 权限管理不是很熟悉,所以又 Google 了一番,发现只要 把父目录 chmod g+s
即可!
如果现在要再加入一个网站,大致可以按照如下脚本执行:
DIR=/srv/http/www/abcdabcd987.com/
USER=abcdabcd987_com
mkdir $DIR
useradd -d $DIR -s /bin/nologin $USER
chown -R $USER $DIR
chgrp -R http $DIR
chmod -R g+s /srv/http/www/abcdabcd987.com/
echo abcdabcd987_com >> /etc/vsftpd.allowed_users
passwd ababcd987_com
其实一开始的时候遇到了一点奇怪的问题,附上问题的解决方案:
- 500 OOPS: priv_sock_get_cmd error while making an FTP connection:
seccomp_sandbox=NO
- 500 OOPS: vsftpd: refusing to run with writable root inside chroot:
allow_writeable_chroot=YES