1. 安装 vsftpd
Debian/Ubuntu 下:
$ sudo apt-get install vsftpd
安装完后,会自动向 /etc/passwd 和 /etc/group 添加一个 ftp 用户,一个 ftp 组
2. 使用匿名用户
配置文件 /etc/vsftpd.conf
vsftpd 的匿名用户 (anonymous) 需要对应系统的本地用户,默认情形下对应 ftp,可通过如下选项控制:
ftp_username = ftp
# 允许匿名用户登录,无须密码
anonymous_enable=YES
no_anon_password=YES
# 允许匿名用户建立目录
anon_mkdir_write_enable=YES
# 允许匿名上传文件
anon_upload_enable=YES
上述匿名用户的 mkdir 和 upload 权限,必须打开这个选项才能生效:
write_enable=YES
而且匿名用户在系统中对应的用户,必须对操作的目录有写权限
# 改变匿名用户上传之文件属于系统本地用户 ftp
chown_uploads=YES # 此选项默认为 NO,则匿名用户上传的文件自己没法下载没法查看
chown_username=ftp
# 匿名上传之文件的权限
chown_upload_mode=0744
如果 chown_upload_mode=0222
则 匿名用户不能查看和下载自己上传的文件
# 不允许 /etc/passwd 中的本地用户登录 ftp
local_enable=NO
3. vsftpd 一般默认使用 /srv/ftp 作为匿名用户登录后的主目录
这个目录一般在安装完成后会自动建立,大多数情形下我们还是用自己的目录:
$ su root $ mkdir /data/ftp
在配置文件中重新指定匿名用户的根目录:
anon_root=/data/ftp
不管 /data/ftp 属于谁,anonymous 对应的用户 ftp 不能对该目录有写权限(安全考虑),否则连接后会报:
OOPS: vsftpd: refusing to run with writable anonymous root
因此,为保证匿名用户的上传权限,可在 /data/ftp 目录下,再建立一个 upload 目录,赋予 ftp 读写执行的权限即可:
$ mkdir -p /data/ftp/upload $ chown ftp /data/ftp/upload
4. 允许匿名用户更多的权限
以上配置下,即使匿名用户自己上传的文件权限是 744,其也不能删除和重命名自己上传的文件,除非打开如下选项:
#除了上传和创建目录外,还可以重命名,删除文件
anon_other_write_enable=YES (经测试,不可用)
5. 本地用户
要使用本地用户,则修改配置为:
local_enable=YES
本地用户的登录控制,通过 /etc/ftpuser 文件控制:
root@hahaha:/var/data# cat /etc/ftpusers # /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5). root daemon bin sys sync man lp
在其中挂名的,不能从 vsftpd 登录
对于本地用户,其 vsftpd 用户主目录默认为其 home 目录,如 jjyy,则客户端登录后直接到 /home/jjyy
可通过配置选项来改变这个用户登录后的 vsftpd 主目录:
local_root=/var/ftp
对本地用户没有权限限制
默认情形下配置选项 chroot_local_user=NO,表示本地用户可以随意访问整个系统的文件系统,即:对可登录的本地用户来说,其根目录就是整个 Linux 系统的根目录,没有被 chroot 到用户主目录下,这是一个安全隐患:
chroot_local_user=YES
则将可登录的本地用户根目录 chroot 到其的用户主目录下,这样其就不能看到和访问整个文件系统的根目录
对于需要开放整个文件系统的本地用户,可以通过如下选项控制之:
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
在 /etc/vsftpd.chroot_list 列上需要的用户名即可
6. 磁盘配额
为特定用户配额适当的磁盘空间,以防服务被滥用
$ apt-get install quota $ mount -o usrquota,grpquota /dev/xvdb /mnt $ quota -uvs ftp # 查看 ftp 配额 $ edquota -u ftp # 编辑配额 Disk quotas for user hom (uid 501): Filesystem blocks soft hard inodes soft hard /dev/sdb5 16 0 1024 4 0 0 改列 hard,单位为 KB $ quotaon -avu # 打开磁盘配额监控进程 $ quota -uvs ftp # 查看 ftp 配额 Disk quotas for user ftp (uid 104): Filesystem space quota limit grace files quota limit grace /dev/xvdb 30768K 0K 4883M 6 0 0 $ quotaoff -vug /dev/xvdb # 关闭 xvdb 的配额