12.1. ftp¶
12.1.1. ftp安装¶
[root@centos-7 ~]$yum install vsftpd
12.1.2. ftp的配置项¶
12.1.2.1. 布尔选项¶
名称 |
默认值 |
描述 |
---|---|---|
allow_annon_ssl |
NO |
匿名用户被允许使用安装的ssl连接,需要ssl_enable启用 |
anon_mkdir_write_enable |
NO |
匿名用户被允许在一定条件下创建新目录,需要write_enable启用,且匿名ftp用户对父目录有写权限 |
anon_other_write_anble |
NO |
匿名用于被允许写入和创建目录,删除其他用户上传的文件 |
anon_upload_enable |
NO |
匿名用户将被运行上传文件,需要write_enable激活,且在指定目录有写权限 |
anon_world_readable_only |
YES |
匿名用户只能下载所有人都能读取的文件 |
anonmous_enable |
YES |
是否启用匿名用户 |
ascii_download_enable |
NO |
启用文本模式下载 |
ascii_upload_enable |
NO |
启用文本模式上传 |
async_abor_enable |
NO |
异步abor命令启用 |
background |
YES |
启用后vsftpd是监听模式 |
check_shell |
YES |
是使用pam_shell模块,只有在/etc/shells中指定的shell类型用户才能登陆 |
chmod_enable |
YES |
运行使用SITE chmod命令,只适用于本地用户 |
chown_uploads |
No |
如果启用,所有匿名上传的文件将编程chown_username所有者 |
chroot_list_enable |
NO |
默认是列表文件是/etc/vsftpd/chroot_list,可以使用chroot_list_file重写 |
chroot_local_user |
yes |
本地用户被禁锢在自己的家目录 |
connect_from_port_20 |
NO |
主动模式启用20端口来数据连接,可以配合其他命令修改20端口 |
debug_ssl |
NO |
将openssl的诊断信息写到日志文件去 |
delete_failed_uploads |
NO |
任何上传失败的文件被删除 |
deny_email_enable |
NO |
拒绝登陆的电子邮件恢复,默认列表是/etc/vsftpd/banned_emails,可以使用banned_email_file覆盖设置 |
dirlist_enable |
YES |
如果设置no,所有目录列表命令被拒绝 |
dirmessage_enable |
no |
如果启用,进入目录扫描目录.message内容给用户显示 |
download_enable |
Yes |
如果设置为NO,下载请求都被拒绝 |
dual_log_enable |
no |
如果yes,两种风格日志都写,/var/log/xferlog和/var/log/vsftpd.log |
force_dot_file |
NO |
如果激活,目录列表不显示..,.这些内容 |
force_annon_data_ssl |
NO |
只有ssl_enable启用的时候,所有匿名用户必须使用ssl数据传输 |
force_anon_logins_ssl |
NO |
你有ssl_enable启用的时候,匿名用户强制使用登陆 |
force_local_data_ssl |
YES |
只有ssl_enable启用的时候,本地用户数据传输使用ssl数据传输 |
force_local_logins_ssl |
YES |
你有ssl_enable启用的时候,本地用户强制使用登陆 |
guest_enable |
NO |
如果启用,将所有非匿名用户归为来宾,映射为guest_username用户 |
hide_ids |
NO |
如果启用,目录列表的所有用户和组信息显示为ftp |
implicit_ssl |
NO |
如果启用,ssl握手第一件事情是希望所有连接支持ssl |
listen_ipv6 |
NO |
监听ipv6地址,和ipv4互斥的 |
local_enable |
No |
控制本地用户是否能登陆 |
lock_upload_files |
yes |
启用后,所有上传者对上传文件写锁,所有下载者对下载文件共享读锁 |
log_ftp_protocol |
no |
启用后,所有ftp请求和响应记录日志记录,非常有用的调试选项 |
ls_recurse_enable |
no |
启用ls -R命令,来递归访问你的目录 |
mdtm_write |
YES |
该设置允许使用MDTM设置文件的修改时间 |
no_anon_password |
NO |
匿名用户将直接登陆 |
no_log_lock |
no |
当启用时,可以方式vsftpd的从写日志文件采取文件锁定 |
one_process_model |
NO |
每个连接一个进程安全模式 |
password_chroot_enable |
no |
如果启用,根据chroot_local_user,然后根据/etc/passwd的家目录来限制 |
pasv_addr_resolve |
NO |
如果使用主机名,设置YES |
pasv_enable |
YES |
支持被动模式 |
pasv_promiscuous |
yes |
设置yes禁用安全检查 |
require_cert |
no |
如果启用,所有客户端需要提供客户端证书 |
require_ssl_reuse |
YES |
要求ssl会话重用 |
reverse_lookup_enable |
yes |
方向查找,将ip转为主机名 |
run_as_launching_user |
No |
|
secure_email_list_enable |
NO |
|
session_support |
no |
会话支持,保持会话 |
set_proctitle_enable |
No |
如果启用,将尝试和显示系统进程列表中的会话状态信息 |
ssl_enable |
NO |
设置yes,启用ssl |
ssl_request_cert |
YES |
如果启用 |
ssl_sslv2 |
No |
只有ssl_enable启用,启用此项,允许sslv2协议 |
ssl_sslv3 |
NO |
只有ssl_enable启用,启用此项,允许sslv3协议 |
ssl_tlsv1 |
YES |
只有ssl_enable启用,启用此项,允许TLSV1协议 |
strict_ssl_read_eof |
NO |
如果启用,需要ssl数据上传通过ssl终止,而不是eof终止 |
strict_ssl_write_shutdown |
NO |
如果启用,需要ssl下载通过ssl终止, |
syslog_enable |
NO |
如果启用,使用系统日志来代替/var/log/vsftpd.log |
text_userdb_names |
NO |
默认情况下数字id显示目录列表的用户和组字段,开启这个参数得到文本 |
tilde_user |
NO |
如果启用,解析路径带有~username这样的路径 |
use_localtime |
NO |
启用后使用本地时区信息,默认是utc时间的 |
use_sendfile |
YES |
减少内核和应用数据交换 |
userlist_deny |
YES |
如果userlist_enable是激活的,userlist_file是拒绝用户的 |
userlist_enable |
NO |
如果启用,userlist_file中的用户能登陆 |
validate_cert |
NO |
收到的所有ssl客户端证书必须验证确定 |
userlist_log |
NO |
如果userlist_enable启用了,可以uselist_log记录失败登陆 |
virtual_use_local_privs |
NO |
如果启用,虚拟用户将是哦那个相同的权限作为本地用户 |
write_enable |
NO |
写权限启用 |
xferlog_enable |
NO |
如果启用,文件被防止到/var/log/vsftpd.log,可以使用vsftpd_log_file来覆盖 |
xferlog_std_format |
YES |
如果启用,日志文件是哦那个标准的xferlog格式记录,可以修改xferlog_file来修改日志位置,默认是/var/log/xferlog |
isoate_network |
YES |
如果启用使用clone_newnet隔离不可信进程 |
12.1.2.2. 数值选项¶
名称 |
默认值 |
描述 |
---|---|---|
accpet_timeout |
60 |
超时时间,客户端建立被动数据连接的超时时间 |
anon_max_rate |
0 |
匿名客户端的最大速率 |
anon_umask |
077 |
匿名用户创建危机的umask |
chmod_upload_mode |
0600 |
修改上传文件的mode |
connect_timeout |
60 |
客户端相应主动连接的数据连接超时时间 |
data_connection_timeout |
300 |
数据传输的连接超时时间 |
delay_failed_login |
1 |
报告登陆失败秒数 |
delay_successful_log |
0 |
报告登陆成功的描述 |
file_open_mode |
0666 |
|
ftp_data_port |
20 |
指定主动模式的连接端口,需要connect_form_port_20启用 |
idle_session_timeout |
300 |
空闲会话超时时间 |
listen_port |
21 |
监听端口 |
local_max_rate |
0 |
本地最大速率 |
local_umask |
077 |
本地用户的umask设置 |
max_clients |
2000 |
支持的最大客户端个数 |
max_login_fails |
3 |
登陆的失败的最大次数,超过次数被杀掉 |
max_per_ip |
50 |
每个ip最大连接个数 |
pasv_max_port |
0 |
被动模式的最大端口 |
pasv_min_port |
0 |
被动模式的最小端口 |
trans_chunk_size |
0 |
传输chunck大小 |
12.1.2.3. 字符串选项¶
名称 |
默认值 |
描述 |
---|---|---|
anon_root |
表示一个目录,匿名用户登陆后的根目录 |
|
banned_email_file |
/etc/vsftpd/banned_emails |
不允许匿名的电子邮件文件路径,需要deny_email_enable启用 |
banner_file |
欢迎文件路径 |
|
ca_certs_file |
ca证书文件 |
|
chown_username |
root |
匿名用户上传的所有者的用户名称,需要chown_uploads配合 |
chown_list_file |
/etc/vsftpd.conf/vsftpd.chroot_list |
|
cmds_allowed |
指定ftp使用的命令 |
|
cmds_denied |
不能使用的ftp命令,allowed优先 |
|
deny_file |
设置文件名或者目录名不能任何方式访问 |
|
dsa_cert_file |
dsa证书文件 |
|
dsa_private_key_file |
如果没有指定,使用dsa证书文件 |
|
email_password_file |
/etc/vsftpd/email_passwords |
|
ftp_username |
ftp |
用户的主目录是匿名的根 |
ftpd_banner |
ftp的提示信息 |
|
guest_username |
ftp |
来宾映射名字 |
hide_file |
指定隐藏文件hide_file = {* MP3,.hidden} |
|
listen_address |
提供一个地址 |
|
listen_address6 |
ip6地址 |
|
local_root |
代表该目录的vsftpd将试图改变成后本地(即非匿名)登录 |
|
message_file |
.message |
需要配合dirmessage_enable配合使用 |
pam_service_name |
ftp |
pam名字 |
pasv_address |
被动模式地址 |
|
rsa_cert_file |
/usr/share/ssl/certs/vsftpd.pem |
rsa证书文件 |
ra_private_key_file |
如果没有指定去rsa-cert_file里面找私钥 |
|
secure_chroot_dir |
/usr/share/empty |
|
user_config_dir |
将用户的配置文件定义到/etc/vsftpd/user_conf文件中 |
|
user_sub_token |
配合虚拟用户使用,自动为每个虚拟用户的主目录,记录模板 |
|
userlist_file |
/etc/vsftpd/user_list |
需要userlist_enable启用 |
vsftpd_log_file |
/var/log/vsftpd.log |
日志文件 |
xferlog_file |
/var/log/xferlog |
日志文件 |
12.1.3. 配置样例¶
12.1.3.1. 修改默认端口和被动模式的端口范围¶
[root@centos-7 vsftpd]$vim vsftpd.conf
# 添加3行
listen_port=20021
pasv_max_port=20080
pasv_min_port=20050
[root@centos-7 vsftpd]$systemctl restart vsftpd
# 另一个机器测试
[root@centos-152 ~]# ftp 172.18.46.7 20021
Connected to 172.18.46.7 (172.18.46.7).
220 (vsFTPd 3.0.2)
Name (172.18.46.7:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> git bigfile
?Invalid command
ftp> get bigfile
local: bigfile remote: bigfile
227 Entering Passive Mode (172,18,46,7,78,83).
150 Opening BINARY mode data connection for bigfile (1025507328 bytes).
226 Transfer complete.
1025507328 bytes received in 7.68 secs (133606.18 Kbytes/sec)
ftp> quit
221 Goodbye.
# 服务端查看
[root@centos-7 vsftpd]$ss -tun
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 52 172.18.46.7:22 172.18.101.69:49932
tcp ESTAB 0 0 ::ffff:172.18.46.7:20021 ::ffff:172.18.104.253:56238
tcp ESTAB 0 3363872 ::ffff:172.18.46.7:20051 ::ffff:172.18.104.253:54037
12.1.3.2. 映射user1,user2为comm¶
[root@centos-7 vsftpd]$vim vsftpd.conf
# 添加如下行 guest_enable=YES guest_username=comm local_root=/home/comm #这个默认就有,确认下 local_enable=YES
# 添加用户 [root@centos-7 vsftpd]$useradd user1 [root@centos-7 vsftpd]$useradd user2 [root@centos-7 vsftpd]$useradd comm [root@centos-7 vsftpd]$mkdir /home/comm/pub [root@centos-7 vsftpd]$ll -d /var/ftp/pub drwxr-xr-x. 3 root root 4096 Feb 3 12:40 /var/ftp/pub [root@centos-7 vsftpd]$ll -d /var/ftp drwxr-xr-x. 3 root root 4096 Aug 3 2017 /var/ftp [root@centos-7 vsftpd]$chmod 555 /home/comm [root@centos-7 vsftpd]$chmod 755 /home/comm/pub
# 测试 [root@centos-152 ~]# ftp 172.18.46.7 Connected to 172.18.46.7 (172.18.46.7). 220 (vsFTPd 3.0.2) Name (172.18.46.7:root): user1 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (172,18,46,7,78,94). 150 Here comes the directory listing. drwxr-xr-x 2 1037 0 4096 Feb 03 13:55 pub 226 Directory send
12.1.3.3. 禁锢用户只能在自己家目录,但是除了user1¶
[root@centos-7 vsftpd]$!vim
vim vsftpd.conf
[root@centos-7 vsftpd]$tail -n 2 vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 添加用户
[root@centos-7 vsftpd]$vim /etc/vsftpd/chroot_list
[root@centos-7 vsftpd]$cat /etc/vsftpd/chroot_list
user1
# 测试
[root@centos-152 ~]# ftp 172.18.46.7
Connected to 172.18.46.7 (172.18.46.7).
220 (vsFTPd 3.0.2)
Name (172.18.46.7:root): user1
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
ftp> ls
Not connected.
ftp> quit
[root@centos-152 ~]# ftp 172.18.46.7
Connected to 172.18.46.7 (172.18.46.7).
220 (vsFTPd 3.0.2)
Name (172.18.46.7:root): user2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (172,18,46,7,78,89).
150 Here comes the directory listing.
226 Directory send OK.
ftp> pwd
257 "/home/user2"
这样就可以让在chroot_list文件中的用户禁锢了
12.1.3.4. 禁止系统特定用户登陆ftp¶
[root@centos-7 vsftpd]$echo "user1" >> /etc/vsftpd/user_list
12.1.3.5. 限制每个ip连接的个数为5个,下载速度为100k.最多支持10个连接¶
[root@centos-7 vsftpd]$vim vsftpd.conf
[root@centos-7 vsftpd]$tail -n 4 vsftpd.conf
max_clients=100
max_per_ip=5
anon_max_rate=102400