Contents
基础
安装,执行命令:
1 | sudo apt-get install vsftpd |
查看是否打开21端口:
1 | sudo netstat -npltu | grep 21 |
以standalone方式运行(另一种是super daemon): sudo service vsftpd start
重启: sudo service vsftpd restart
停止: sudo service vsftpd stop
ftp 默认目录位置: /srv/ftp
配置
查阅配置文件详细信息:
1 | man 5 vsftpd.conf |
配置文件位置: /etc/vsftpd.conf
备份配置文件:
1 | cp /etc/vsftpd.conf /etc/vsftpd.conf_orig |
将下面内容写入配置文件
1 | #使用当地时间 |
更改配置后,重启vsftpd使配置生效。
Vsftpd虚拟用户设置(通过MySQL)
安装 libpam-mysql
1 | sudo apt-get install libpam-mysql |
添加禁止登录系统的用户
1 | sudo useradd vsftpduser -d /srv/ftp -s /sbin/nologin -g nogroup |
/sbin/nologin和/bin/false的区别:
都不允许登录系统,/bin/false不允许使用ftp等服务。如果要使/bin/false能不允许登录系统,同时允许ftp等服务,可以在/etc/shells里增加一行/bin/false。
创建/etc/nologin文件,则除root用户外,其它用户无法登录,可以在维护服务器的时候使用。
删除用户(userdel命令):
userdel [-r] [要删除的用户的名称]
设置密码: passwd vsftpduser
在配置文件 vsftpd.conf加入
1 | #设定启用虚拟用户功能 |
创建用户名密码数据库
创建test数据库
1 | create database test; |
建用户表:
1 | create table user( |
插入用户:
1 | insert into user values (null,'user1','123456'); |
分配权限,把123456换成你的密码:
1 | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON test.* TO 'vsftpduser'@'localhost' IDENTIFIED BY '123456'; |
配置PAM认证模块
先备份PAM认证文件
1 | cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig |
修改/etc/pam.d/vsftpd 内容如下:
1 | auth required /lib/security/pam_mysql.so user=vsftpduser passwd=123456 host=localhost db=test table=user usercolumn=name passwdcolumn=password crypt=0 |
- user=vsftpduser 刚才添加的mysql用户名
- passwd=123456 刚才添加的用户名密码
- host=localhost mysql服务器名,我是做在本机所以……。
- db=test 与这个对应create databases test,是存储用户名的mysql库名
- table=user 存储用户名的mysql库中的表名
- usercolumn=name 与mysql数据库中用户名对应的键
- passwdcolumn=password 与mysql数据库中用户密码对应的键
- crypt=0 加密方式,0表示明文,1表示unix方式crypt()函数加密,2表示mysql中的password函数加密,3表示md5加密的。MySQL和libpam-mysql有兼容问题,采用crypt=0
为各个虚拟用户建立配置文件
在配置文件中添加
1 | user_config_dir=/etc/vsftpd/vconf |
现在,我们要把各个用户的配置文件放到目录/etc/vsftpd/vconf中
1 | sudo mkdir /etc/vsftpd/vconf |
用户的根目录不能对别的用户开放写权限
user1文件中的内容如下
1 | local_root=/srv/ftp/user1 |
user2文件中的内容如下
1 | local_root=/srv/ftp/user2 |
user3文件中的内容如下
1 | local_root=/srv/ftp/user3 |
这里要注意不能有空格,不然登录的时候会提示出错。
Vsftpd虚拟用户设置(通过数据文件)
安装db4-utils
1 | sudo apt-get install db4-utils |
创建用户密码文件
1 | vi /etc/vsftpd/users.txt |
一行用户名,一行密码写入到文件中
1 | user1 |
生成虚拟用户数据文件
1 | db_load -T -t hash -f /etc/vsftpd/users.txt /etc/vsftpd/users.db |
配置PAM认证文件
编辑/etc/pam.d/vsftpd
1 | auth required /lib/security/pam_userdb.so db=/etc/vsftpd/users |
添加禁止登录系统的用户
1 | sudo useradd vsftpduser -d /srv/ftp -s /sbin/nologin -g nogroup |
在配置文件 vsftpd.conf加入
1 | #设定启用虚拟用户功能 |
Chroot
限制所有
限制登录用户访问其他目录,改之前登录显示的路径比如是 ~ ,改之后则是 /。
注:我的本地用户(local user为fenghao,home directory为/home/fenghao)
1 | root@ubuntu:~# ftp localhost |
看上边,正常情况下,输入pwd时,应该是显示/home/fenghao.
由于我做了chroot.所以,/home/fenghao变成 /
1 | chroot_local_user=YES |
开放所有,限制特定
可指定一组用户限制
1 | chroot_local_user=NO |
随后创建列表
1 | sudo vi /etc/vsftpd/chroot_list |
一行一个用户名 重启vsftpd
1 | sudo service vsftpd restart |
chroot_list中的用户将被限制登录的根目录
限制所有,开放特定
上面的规则是限制 /etc/vsftpd/chroot_list 中的用户,反过来限制一切,只解禁 /etc/vsftpd/chroot_list 的用户。这样:
1 | chroot_local_user=YES |
分析日志文件
安装weblizer(类似软件还有awstats)
1 | sudo apt-get install weblizer |
配置文件:
1 | sudo gedit /etc/webalizer/webalizer.conf |
解决乱码:
1 | sudo mv /usr/share/locale/zh/LC_MESSAGES/webalizer.mo /home/fenghao/back |
分析日志:
1 | sudo webalizer /var/log/xferlog -F ftp |
自动分析日志:
1 |
|
把上面的复制粘贴到webalizer_daily.sh
中。
编辑/etc/crontab
1 | vi /etc/crontab |
加入下面内容,则每天四点零二执行脚本
1 | 02 4 * * * root run-parts /home/fenghao/webalizer_daily.sh # 每天 |