Vsftpd配置还是好麻烦,花了不少时间,特别是权限管理,什么本地用户和虚拟用户。
配置vsftpd主要是为了方便上传web,并让apache能够访问。
以默认目录/var/www为例
目标:
建立ftp服务,指定虚拟用户并设置对提供web的目录具有写操作。
指定apache服务所在用户加入ftp虚拟用户组,使ftp只需要调整组权限就能调整是否对apache可写,无需777权限。
1.vsftpd安装,添加虚拟用户的帐户
sudo apt-get install vsftpd
sudo useradd ftpvirtual -d /home/ftpvirtual -s /bin/false
修改vsftpd配置相关文件
sudo vim /etc/vsftpd.conf
自己的配置相关文件为:
listen=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
data_connection_timeout=2
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd#权限验证,指向/etc/pam.d/vsftpd
user_config_dir=/etc/vsftpd/user_conf#虚拟用户的配置目录
data_connection_timeout=120
guest_enable=YES#打开虚拟用户
guest_username=ftpvirtual#虚拟用户使用的本地用户,由上面命令创建
准备建立虚拟用户,本来还有mysql的方式,不过太麻烦就懒得去做了,用不到这么强的功能。
首先建立一个空白文件:
sudo vim /etc/vsftpd/virtuals
该文件输入的内容就是虚拟用户的用户名和密码,格式为一行用户名一行密码例如:
testuser
111111
username
password
使用命令将该文本转为数据库,这里不清楚是否安装了db4.7-util,没有安装的执行接下来命令(可能老版本为4.6,新版本就不知道了)
sudo apt-get install db4.7-util
执行命令建立数据库文件
sudo db4.7_load -T -t hash -f /etc/vsftpd/virtuals /etc/vsftpd/virtuals.db
设置一下数据库文件权限,并删除刚才的文这篇文章件
sudo chmod 600 /etc/vsftpd/virtuals.db
sudo rm /etc/vsftpd/virtuals
现在配置PAM文件
sudo vim /etc/pam.d/vsftpd
修改内容为接下来内容,注意没有".db"这个后缀
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
account required /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
将/var/www拥有者和组改为ftpvirtual
sudo chown -R ftpvirtual:ftpvirtual /var/www
建立虚拟用户配置相关文件
sudo vim /etc/vsftpd/user_conf/test_user
加入以下权限设置内容
write_enable=YES
local_root=/var/www
local_umask=003
anon_umask=003
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
将www-data用户加入ftpvirtual用户组
gpasswd -a www-data ftpvirtual
重启vsftpd
sudo /etc/init.d/vsftpd restart
以上配置完成。
一旦考虑更安全的权限,应该把anon_umask调整为023,需要可写的地方用ftp设置组的写权限。
配置环境
Ubuntu 9.04 server 32bit