鸟哥linux ftp,鸟哥的 Linux 私房菜 -- 文件服务器之三: FTP 服务器

虽然在 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 服务了。

不过,不建议如此作喔!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值