虽然在 CentOS 的默认情况当中实体用户已经可以使用 FTP 的服务了,不过我们可能还需要一些额外的功能来限制实体用户。
举例来说,限制用户无法离开家目录 (chroot)、限制下载速率、限制用户上传档案时的权限 (mask) 等等。
底下我们先列出一些希望达到的功能,然后再继续进行额外功能的处理:
希望使用台湾本地时间取代 GMT 时间;
用户登入时显示一些欢迎讯息的信息;
系统账号不可登入主机 (亦即 UID 小于 500 以下的账号);
一般实体用户可以进行上传、下载、建立目录及修改档案等动作;
用户新增的档案、目录之 umask 希望设定为 002;
其他主机设定值保留默认值即可。
你可以自行处理 vsftpd.conf 这个档案,以下则是一个范例。注意,如果你的 vsftpd.conf 没有相关设定值,
请自行补上吧!OK!让我们开始一步一步来依序处理先:
先建立主配置文件 vsftpd.conf,这个配置文件已经包含了主要设定值:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 1. 与匿名者相关的信息,在这个案例中将匿名登录取消:
anonymous_enable=NO
# 2. 与实体用户相关的信息:可写入,且 umask 为 002 喔!
local_enable=YES
write_enable=YES
local_umask=002
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list <==这个档案必须存在!还好,预设有此档案!
# 3. 与服务器环境有关的设定
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt <==这个档案必须存在!需手动建立!
[root@www ~]# /etc/init.d/xinetd restart <==取消 super dameon
[root@www ~]# /etc/init.d/vsftpd restart
建立欢迎讯息:
当我们想让登入者可查阅咱们系统管理员所下达的『公告』事项时,可以使用这个设定!那就是
banner_file=/etc/vsftpd/welcome.txt 这个参数的用途了!我们可以编辑这个档案即可。
好了,开始来建立欢迎画面吧!
[root@www ~]# vim /etc/vsftpd/welcome.txt
欢迎光临本小站,本站提供 FTP 的相关服务!
主要的服务是针对本机实体用户提供的,
若有任何问题,请与鸟哥联络!
建立限制系统账号登入的档案
再来是针对系统账号来给予抵挡的机制,其实有两个档案啦,一个是 PAM 模块管的,一个是 vsftpd 主动提供的,
在预设的情况下这两个档案分别是:
/etc/vsftpd/ftpusers:就是 /etc/pam.d/vsftpd 这个档案的设定所影响的;
/etc/vsftpd/user_list:由 vsftpd.conf 的 userlist_file 所设定。
这两个档案的内容是一样的哩~并且这两个档案必须要存在才行。请你参考你的 /etc/passwd 配置文件,
然后将 UID 小于 500 的账号名称给他同时写到这两个档案内吧!一行一个账号!
[root@www ~]# vim /etc/vsftpd/user_list
root
bin
....(底下省略)....
测试结果:
你可以使用图形接口的 FTP 客户端软件来处理,也可以透过 Linux 本身提供的 ftp 客户端功能哩!
关于 ftp 指令我们已经在第五章谈过了,你可以自行前往参考。这里直接测试一下吧:
# 测试使用已知使用者登入,例如 dmtsai 这个实体用户:
[root@www ~]# ftp localhost
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220-欢迎光临本小站,本站提供 FTP 的相关服务! <==刚刚建立的欢迎讯息
220-主要的服务是针对本机实体用户提供的,
220-若有任何问题,请与鸟哥联络!
220
Name (localhost:root): student
331 Please specify the password.
Password: <==输入密码啰在这里!
500 OOPS: cannot change directory:/home/student <==有讲登入失败的原因喔!
Login failed.
ftp> bye
221 Goodbye.
由于默认一般用户无法登入 FTP 的!因为 SELinux 的问题啦!请参考下个小节的方式来处理。
然后以上面的方式测试完毕后,你可以在登入者账号处分别填写 (1)root (2)anonymous 来尝试登入看看!
如果不能登入的话,那就是设定 OK 的啦!(root 不能登入是因为 PAM 模块以及 user_list 设定值的关系,
而匿名无法登入,是因为我们 vsftpd.conf 里头就是设定不能用匿名登录嘛!)
上面是最简单的实体账号相关设定。那如果你还想要限制用户家目录的 chroot
或其他如速限等数据,就得要看看底下的特殊设定项目啰。
实体账号的 SELinux 议题
在预设的情况下,CentOS 的 FTP 是不允许实体账号登入取得家目录数据的,这是因为 SELinux 的问题啦!
如果你在刚刚的 ftp localhost 步骤中,在 bye 离开 FTP 之前下达过『 dir 』的话,那你会发现没有任何资料跑出来~
这并不是你错了,而是 SELinux 不太对劲的缘故。那如何解决呢?这样处理即可:
[root@www ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off <==就是这玩意儿!要设定 on 才行!
....(底下省略)....
[root@www ~]# setsebool -P ftp_home_dir=1
这样就搞定啰!如果还有其他可能发生错误的原因,包括档案数据使用 mv 而非使用 cp 导致 SELinux
文件类型无法继承原有目录的类型时,那就请自行查阅 /var/log/messages 的内容吧!通常 SELinux
没有这么难处理的啦!^_^
对使用者 (包括未来新增用户) 进行 chroot
在鸟哥接触的一般 FTP 使用环境中,大多数都是要开放给厂商联机来使用的,给自己人使用的机会虽然也有,
不过使用者数量通常比较少一些。所以啰,鸟哥现在都是建议默认让实体用户通通被 chroot,
而允许不必 chroot 的账号才需要额外设定。这样的好处是,新建的账号如果忘记进行 chroot,反正原本就是 chroot,
比较不用担心如果该账号是开给厂商时该怎办的问题。
现在假设我系统里面仅有 vbird 与 dmtsai 两个账号不要被 chroot,其他如 student, smb1... 等账号通通预设是 chroot
的啦,包括未来新增账号也全部预设 chroot!那该如何设定?很简单,三个设定值加上一个额外配置文件就搞定了!步骤如下:
# 1. 修改 vsftpd.conf 的参数值:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加是否设定针对某些使用者来 chroot 的相关设定呦!
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 2. 建立不被 chroot 的使用者账号列表,即使没有任何账号,此档案也是要存在!
[root@www ~]# vim /etc/vsftpd/chroot_list
vbird
dmtsai
[root@www ~]# /etc/init.d/vsftpd restart
如此一来,除了 dmtsai 与 vbird 之外的其他可用 FTP 的账号者,通通会被 chroot 在他们的家目录下,
这样对系统比较好啦!接下来,请你自己分别使用有与没有被 chroot 的账号来联机测试看看。
限制实体用户的总下载流量 (带宽)
你可不希望带宽被使用者上传/下载所耗尽,而影响咱们服务器的其他正常服务吧?所以限制使用者的传输带宽有时也是需要的!
假设『我要限制所有使用者的总传输带宽最大可达 1 MBytes/秒 』时,你可以这样做即可:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加底下这一个参数即可:
local_max_rate=1000000 <==记住喔,单位是 bytes/second
[root@www ~]# /etc/init.d/vsftpd restart
上述的单位是 Bytes/秒,所以你可以依据你自己的网络环境来限制你的带宽!这样就给他限制好啰!有够容易吧!
那怎么测试啊?很简单,用本机测试最准!你可以用 dd 做出一个 10MB 的档案放在 student 的家目录下,然后用 root 下达
ftp localhost,并输入 student 的帐密,接下来给他 get 这个新的档案,就能够在最终知道下载的速度啦!
限制最大同时上线人数与同一 IP 的 FTP 联机数
如果你有限制最大使用带宽的话,那么你可能还需要限制最大在线人数才行!举例来说,你希望最多只有 10 个人同时使用你的
FTP 的话,并且每个 IP 来源最多只能建立一条 FTP 的联机时,那你可以这样做:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加底下的这两个参数:
max_clients=10
max_per_ip=1
[root@www ~]# /etc/init.d/vsftpd restart
这样就搞定了!让你的 FTP 不会人满为患吶!
建立严格的可使用 FTP 的账号列表
在预设的环境当中,我们是将『不许使用 FTP 的账号写入 /etc/vsftpd/user_list 档案』,所以没有写入
/etc/vsftpd/user_list 当中的使用者就能够使用 FTP 了!如此一来,未来新增的使用者预设都能够使用 FTP 的服务。
如果换个角度来思考,若我想只让某些人可以使用 FTP 而已,亦即是新增的使用者预设不可使用
FTP 这个服务的话那么应该如何作呢?你需要修改配置文件成为这样:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 这几个参数必须要修改成这样:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
[root@www ~]# /etc/init.d/vsftpd restart
则此时『写入 /etc/vsftpd/user_list 变成可以使用 FTP 的账号』了!
所以未来新增的使用者如果要能够使用 FTP 的话,就必须要写入 /etc/vsftpd/user_list 才行!
使用这个机制请特别小心,否则容易搞混掉~
透过这几个简单的设定值,相信 vsftpd 已经可以符合大部分合法 FTP 网站的需求啰!
更多详细的用法则请参考 man 5 vsftpd.conf 吧!
例题:
假设你因为某些特殊需求,所以必须要开放 root 使用 FTP 传输档案,那么你应该要如何处理?
答:
由于系统账号无法使用 FTP 是因为 PAM 模块与 vsftpd 的内建功能所致,亦即是 /etc/vsftpd/ftpusers 及 /etc/vsftpd/user_list
这两个档案的影响。所以你只要进入这两个档案,并且将 root 那一行批注掉,那 root 就可以使用 vsftpd这个 FTP 服务了。
不过,不建议如此作喔!