VSFTP Quick Start

来自Jack's Lab
跳转到: 导航, 搜索

目录

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 添加新用户

Create the system user (workers) and the work directory (/home/work) to be used by the virtual users in vsftpd where they will upload their work in it
$ sudo useradd -d /home/work workers
$ sudo mkdir /home/work
$ sudo chown workers /home/work
Create directories to save the virtual users definitions
$ sudo mkdir /etc/vsftpd
$ sudo mkdir /etc/vsftpd/vusers
Edit the default /etc/vsftpd.conf
# Disable anonymous_enable is optional.
anonymous_enable=NO
...
local_enable=YES
...
pam_service_name=ftp


Enable TLS/SSL/FTPS:

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
# Filezilla uses port 21 if you don't set any port
# in Servertype "FTPES - FTP over explicit TLS/SSL"
# Port 990 is the default used for FTPS protocol.
# Uncomment it if you want/have to use port 990.
#listen_port=990


In the end of the file and add
# Enable (only) guests.
guest_enable=YES
# This is not needed, it's the default. Just here for clarity.
guest_username=ftp
# Where the guests (virtual) usernames are set.
user_config_dir=/etc/vsftpd/vusers


Create the new file /etc/pam.d/ftp for the new authentication system
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login


Create a file with the virtual usernames and passwords that can login (one line for username, one line for password and so on for all the users) and call it "logins.txt"
gump
gump_password
riffsolo
riffsolo_password


Install db-util, create the login database with the file logins.txt and restrict permissions to the database
sudo apt-get install db-util
sudo db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db
sudo chmod 600 /etc/vsftpd/vsftpd_login.db
# This is not safe, you should delete this file.
sudo chmod 600 logins.txt


Create a file for the workers settings (gump and riffsolo on logins.txt)
 sudo nano /etc/vsftpd/workers


Add the new definitions for this users (remember that virtual users are treated as anonymous users by default on vsftpd, default anonymous settings are set on /etc/vsftpd.conf):

write_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_upload_enable=YES
local_root=/home/work
chroot_local_user=YES
dirlist_enable=YES
download_enable=YES
guest_username=workers
Link this file to the workers usernames in /etc/vsftpd/vusers/, so that any change made at /etc/vsftpd/workers is applied to all workers (after you restart vsftpd).
sudo ln -s /etc/vsftpd/workers /etc/vsftpd/vusers/gump
sudo ln -s /etc/vsftpd/workers /etc/vsftpd/vusers/riffsolo


Restart vsftpd
$ sudo /etc/init.d/vsftpd restart




6 本地用户

要使用本地用户,则修改配置为:

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 列上需要的用户名即可



7 磁盘配额

为特定用户配额适当的磁盘空间,以防服务被滥用

$ 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 的配额



8 参考











个人工具
名字空间

变换
操作
导航
工具箱