一直使用 samba 来更新 debian 服务器上的 web 内容,主要是方便,尤其是拷贝和更新大容量内容的时候,但是在家里的时候连接教育网的服务器很慢,samba 操作起来停顿很多,影响效率,于是安装了个可以使用虚拟用户的 vsftpd 。
需求
用一个叫做 web 的用户登录 ftp 服务器,使其可以修改 web 根目录 /www 中的内容。
直接安装二进制包
1 | apt-get install vsftpd |
修改配置文件
1 | vim /etc/vsftpd.conf |
保证下边几个参数
1 | anonymous_enable=NO |
上边参数开启了虚拟账户访问,并将该虚拟账户映射为实际账户 www-data ,www-data 一般只要安装了 web server 就存在,这样就可以避免再单独建立新账户了。
如果你的 web 根目录不是 /www ,那根据自己需要修改 /etc/passwd 中 www-data 的 home 目录,并利用 chown 设置属主为 www-data。
1 | chown -R www-data.www-data /www |
在你的 mysql 服务器上的某个库里建立一个 nsftpdvu 的表,里边字段为 name和 passwd,插入一行记录,用户名为 web,密码自己设置好
安装认证模块
1 | apt-get install libpam-mysql |
修改认证配置
1 | vim /etc/pam.d/vsftpd |
把原有内容全部注释或者删掉,添加如下两行,其中的参数,比如mysql账户名密码及主机库名等根据自己 mysql 参数修改,crypt = 0 代表存储的是明文密码。
1 | auth required pam_mysql.so user=root passwd=urdbrootpwd host=urdbserver db=urdb table=vsftpdvu usercolumn=name passwdcolumn=passwd crypt=0 |
接下来添加账户 web 的配置文件
1 | mkdir /etc/vsftpd |
1 | vim /etc/vsftpd/user_conf/web |
内容如下
1 | local_root=/www |
如果你需要添加其他账户,只需要在 vsftpdvu 表里添加账户名和密码,然后照葫芦画瓢在 /etc/vsftpd/user_conf 目录中再建立一个以账户名命名的配置文件即可。
重启vsftpd
1 | /etc/init.d/vsftpd restart |
测试用 web 登录,一切正常
另:vsftpd.conf 中的 listen ipv6 选项我开启后,说什么也连不上 ftp ,注释掉就好了,难道不能两套同时监听?
另:如果提示 vsftpd: refusing to run with writable root inside chroot()
则需要使用如下命令将用户主目录的属性去掉可写
1 | chmod a-w /www |