安装:
yum install vsftpd
启动停止:
/etc/init.d/vsftpd {start|stop|restart|try-restart|force-reload|status}
配置:
/etc/vsftp/vsftpd.conf
(详细配置参见 man vsftpd.conf)
默认配置下建议修改的一些配置:
anonymous_enable=NO # 禁止匿名访问
reverse_lookup_enable=NO # 禁止根据客户端IP反查DNS名。可以加快登录速度。
pasv_min_port=1025 # 设置被动模式的随机端口范围,便于防火墙配置。
pasv_max_port=1035
启用/var/log/vsftpd.log:
默认配置下,vsftpd.log未启用。
把下面任意一个改为NO即可。
xferlog_enable
xferlog_std_format
限制用户只能访问指定部分的文件系统:
以下两个配置一起使用,可以使用户登录后以/var/ftp/pub为/,而无法访问之外的文件系统。
chroot_local_user=YES # 启用chroot,使用户的home目录成为/。
手册上为何说开启会存在安全隐患?
local_root=/var/ftp/pub # ftp登录后默认目录。
关于ftpusers,user_list:
这两个文件中列出的,是启用的还是禁用的?
可以这样理解,列出的是特殊的,也就是说,对于全部用户,
配置为启用时,这里列出的就是禁用,
配置为禁用时,这里列出的就是启用。
虚拟用户:
vsftp支持虚拟用户登录。虚拟用户不是OS的用户,而是vsftp自己管理的用户。
虚拟用户的配置比较麻烦,大致如下:
需要一个操作系统用户来代理所有的虚拟用户。
配置vsftpd.conf
anonymous_enable=NO # 这个保持禁止匿名登录
anon_world_readable_only=NO # 虚拟用户的上传下载等权限都跟anon_xxx有关,要设置。
anon_upload_enable=YES
guest_enable=YES
guest_username=xxx
virtual_use_local_privs=YES # 没有这个,能上传不能删除
创建虚拟用户账号文件。此文件是一个db4的数据库文件。
先创建一个文本文件,一行用户名,一行密码,然后用db_load转换成db文件。
cat > vusers.lst
vuser1
password1
vuser2
password2
ctrl-D
db_load -T -t hash -f vusers.lst vusers.db
配置pam(/etc/pam.d/vsftpd)
注释掉其他行。下面'db='的地方不要写扩展名,否则会找不到文件。
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vusers
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vusers
另外,如此改后,原本能够登录的本地OS用户却登录不了了。
尝试保留其他行不注释,把上面两行的required改为sufficient,
OS用户也可以登录了,但对PAM不太了解,不知是否有安全问题。
防火墙相关:
ftp协议规定控制命令和数据是分开不同端口传输的,
默认情况下,控制命令端口为21。
数据传输又分主动模式(PORT)和被动模式(PASV)。
主动模式,
服务器使用固定端口20与客户端传输数据,
建立连接的方向是服务器->客户端。
由于服务器这方是出站,所以服务器防火墙不必开放端口20。
但要求客户端防火墙开放入站才行。(客户端是随机端口,如何指定?)
被动模式,
服务器开启随机端口,并通知客户端以此端口传输数据,
建立连接的方向是客户端->服务器。
所以服务器防火墙需要开放端口。虽然端口是随机的,
但配置vsftp可以限定端口范围,例如1025-1029,防火墙开放此范围端口即可。
iptables -L -n --line-number
iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 1025:1035 -j ACCEPT
SELinux相关:
如果为了省事,可以设置如下设置,但也会是服务器失去保护。
setsebool -P allow_ftpd_full_access on
参考
SELinux 环境下网络服务设置: 第 2 部分
http://www.ibm.com/developerworks/cn/linux/1303_caojh_selinux2/index.html?ca=drs-
# ps -eZ |grep vsftpd
unconfined_u:system_r:ftpd_t:s0-s0:c0.c1023 3334 ? 00:00:00 vsftpd
public_content_t vsftpd:可以读取的文件和目录类型是 public_content_t。
public_content_rw_t:可以读取和写入的文件和目录类型是 public_content_rw_t。
vsftp 的布尔变量
-
allow_ftpd_anon_write :关闭这个布尔变量会阻止 vsftpd 读取 public_content_rw_t 类型的文件和目录。如果允许用户通过 FTP 上传文件。必须开放这个布尔变量。
-
allow_ftpd_full_access:当开放这个布尔变量时只有 Linux(DAC)的权限来控制访问,通过验证的用户可以读取和写入标记为 public_content_t 或 public_content_rw_t 类型的文件。
-
allow_ftpd_use_cif:当开放这个布尔变量时 vsftpd 允许 cifs_t 类型的文件和目录,因此这个布尔变量启用,可以让你的 FTP 服务器可以使用 Samba 文件系统。
-
allow_ftpd_use_nfs vsftpd:的当开放这个布尔变量时 vsftpd 允许 nfs_t 类型的文件和目录,因此这个布尔变量启用,可以让你的 FTP 服务器可以使用 NFS 文件系统。
-
ftp_home_dir:当开放这个布尔变量时认证用户可以读写自己的主目录中的文件。
-
ftpd_connect_db:当开放这个布尔变量时允许 vsftpd 连接数据库。
-
httpd_enable_ftp_server:当开放这个布尔变量时容许的 httpd 作为 FTP 服务器,并且监听 FTP 端口。
-
tftp_anon_write:当开放这个布尔变量时允许 TFTP 访问一个公共的目录。
阅读(1092) | 评论(0) | 转发(0) |