- 论坛徽章:
- 0
|
账号登录
/etc/ftpusers文件
该文件内的用户一律禁止ftp连接,默认列表包括了root, daemon, nobody等。需要禁止某个用户,添加进来便是。
这个文件是由PAM模块的 /etc/pam.d/vsftpd 指定的
1234567891011 | root@ubuntu:~$ sudo cat /etc/pam.d/vsftpd# Standard behaviour for ftpd( .auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed # Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so. # Standard pam includes@include common-account@include common-session@include common-authauth required pam_shells.so |
userlist_file 文件
vsftpd自订的列表,跟/etc/ftpusers类似,具体文件名和路径是由用户自己指定的。这边设成 /etc/vsftpd.user_list
添加配置文件字段:
123 | userlist_enable=YESuserlist_deny=YESuserlist_file=/etc/vsftpd.user_list |
限制一切,开放特定
上述2个方法都是限制列表文件中的用户,如果要反过来,限制一切用户登录,只允许列表文件中的用户,用 userlist_file,这样:
12 | userlist_enable=YESuserlist_deny=NO |
root登录
之所以限制root这类账号登录就是托上面几个文件,要是你非要用系统账号登录,如上所述,将列表文件中的特定用户名删除便是。
主机访问
tcp_wrappers配置
stand alone模式下提供基于主机的访问控制的配置
tcp_wrappers 使用/etc/hosts.allow和/etc/hosts.deny两个配置文件实现访问控制,hosts.allow是一个许可 表,hosts.deny是一个拒绝表 在hosts.allow中也可以使用DENY,所以通常可以只使用hosts.allow来实现访问控制。 对vsftpd而言,书写hosts.allow有三种语法形式
123 | 1: vsftpd:主机表 (设置允许访问的主机表)2: vsftpd:主机表 ENY (设置拒绝访问的主机表)3: vsftpd:主机表:setenv VSFTPD_LOAD_CONF 配置文件名 (对指定的主机使用另外的配置) |
setenv VSFTPD_LOAD_CONF的值为指定的配置文件名,意图是让vsftpd守护进程读取新的配置项来覆盖主配置文件中的项,实现特定待遇 这有一个小例子来说明tcp_wrappers
1234 | 功能:》1.拒绝192.168.2.0/24访问》2.对192.168.1.0/24内的所有主机不作连接限制和最大传输速率限制》3.对其他主机的访问限制为:每ip连接数为1,最大传输速率为10kb/s (在主配置文件中设置就好了) |
首先保证设定
然后编辑
1 | sudo vi /etc/hosts.allow |
123 | vsftpd:192.168.2.0/24: DENY (阻止192.168.2.0子网的访问)vsftpd:192.168.1.0/24 (允许192.168.1.0子网的访问)vsftpd:192.168.1.0/24: setenv VSFTPD_LOAD_CONF /etc/xxx.conf (对192.168.1.0/24指定专有配置文件xxx.conf,xxx可以自己指定文件名,需要建立) |
然后建立xxx.conf文件,并编辑 (建立文件可以用sudo touch /etc/xxx.conf建立)
super daemon限制主机访问
只允许指定主机访问
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
如 only_from 192.168.1.0 表示只允许192.168.1.0网段内的主机访问。
指定不能访问的主机
如:no_access 192.168.1.0 表示只有192.168.1.0网段内的主机不能访问。
主机表
关于主机表的书写形式,见下表:
访问控制表时主机表的书写语法
1234567 | 选项值 含义Hostname 可解析的主机名IP Address 十进制表示的IP地址Net_name 在/etc/networks中定义的网络名x.x.x.0 x.x.0.0 x.0.0.0 0.0.0.0 0作为通配符看待。如:191.72.61.0匹配从191.72.61.0到191.72.61.255的所有IP地址。0.0.0.0表示匹配所有的IP地址x.x.x.{a,b,.} x.x.{a,b,.} x.{a,b,.} 指定主机表。如:191.72.61.{1,3,123}表示包含地址191.72.61.1、191.72.61.2和191.72.61.123IPAddress/netmask 定义要匹配的网络或子网。如:172.19.16/20匹配从172.19.16.0到172.19.31.255 |
限制
限制连接数
前者为服务器最大支持连接数,后者为每个ip允许最多连接数。
12 | max_clients=数字max_per_ip=数字 |
错误提示分别是
123 | root@ubuntu:~$ ftp localhostConnected to localhost.421 There are too many connected users, please try later. |
123 | root@ubuntu:~$ ftp localhostConnected to localhost.421 There are too many connections from your internet address. |
限制下载速度
单位是字节,所以需要换算。比如我想让匿名用户和vsFTP上的用户都以80KB下载,所以这个数字应该是1024×80=81920
12 | anon_max_rate=数字 #匿名用户下载速度local_max_rate=数字 #普通用户下载速度 |
super daemon限制连接数
instances 是服务器最多的连接数,per_source 是单个IP地址最多的连接数。
1234567891011121314 | service ftp{ socket_type = stream wait = no user = root server = /usr/sbin/vsftpd server_args = /etc/vsftpd.conf log_on_success += DURATION USERID log_on_failure += USERID nice = 10 disable = no per_source = 10 instances = 10} |
错误提示都是
123 | root@ubuntu:~$ ftp localhostConnected to localhost.421 Service not available, remote server has closed connection |
定制错误提示,添加
1 | banner_fail = /etc/vsftpd.busy_banner |
编辑提示内容
1 | sudo vi /etc/vsftpd.busy_banner |
比如
123 | root@ubuntu:~$ ftp localhostConnected to localhost.服务器大姨妈中 |
欢迎信息
然后编辑各用户home目录下的.message
12 | root@ubuntu:~$ cat .message欢迎来到vsftpd |
1234567891011 | root@ubuntu:~$ ftp localhostConnected to localhost.220 (vsFTPd 2.2.2)Name (localhost:qii): qii331 Please specify the password.Password:230-欢迎来到vsftpd230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> |
若是匿名用户,就放到
虚拟路径
比如我的ftp的默认目录是/srv/ftp,我想把/mnt/LinG/WinSoft文件夹,映射到/srv/ftp目录中,我就如下操作 命令:
1 | #mount --bind [原有的目录] [新目录] |
先创建文件夹
1 | sudo mkdir /srv/ftp/WinSoft |
执行mount命令
1 | sudo mount --bind /mnt/LinG/WinSoft /srv/ftp/WinSoft |
|
|