标签:style blog http io ar color os 使用 sp
chown ftp /var/ftp/upload chmod 777 /var/ftp/upload
[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 |
不过,在实际测试当中,却发现还是没办法上传呢!怎么回事啊?如果你有去看一下 /var/log/messages 的话,那就会发现啦! 又是 SELinux 这家伙呢!怎么办?就透过『 sealert -l ... 』在 /var/log/messages 里面观察到的指令丢进去, 立刻就知道解决方案啦!解决方案就是放行 SELinux 的匿名 FTP 规则如下:
[root@www ~]# setsebool -P allow_ftpd_anon_write=1[root@www ~]# setsebool -P allow_ftpd_full_access=1
|
终于要来聊一聊这个简单的 vsftpd 啰!vsftpd 的全名是『Very Secure FTP Daemon 』的意思, 换句话说,vsftpd 最初发展的理念就是在建构一个以安全为重的 FTP 服务器呢!我们先来聊一聊为什么 vsftpd 号称『非常安全』呢?然后再来谈设定吧!
为了建构一个安全为主的 FTP 服务器, vsftpd 针对操作系统的『程序的权限 (privilege)』概念来设计,如果你读过基础篇的十七章程序与资源管理的话,应该会晓得系统上面所执行的程序都会引发一个程序,我们称他为 PID (Process ID), 这个 PID 在系统上面能进行的任务与他拥有的权限有关。也就是说, PID 拥有的权限等级越高, 他能够进行的任务就越多。举例来说,使用 root 身份所触发的 PID 通常拥有可以进行任何工作的权限等级。
不过,万一触发这个 PID 的程序 (program) 有漏洞而导致被网络怪客 (cracker) 所攻击而取得此 PID 使用权时, 那么网络怪客将会取得这个 PID 拥有的权限吶!所以,近来发展的软件都会尽量的将服务取得的 PID 权限降低,使得该服务即使不小心被入侵了,入侵者也无法得到有效的系统管理权限,这样会让我们的系统较为安全的啦。 vsftpd 就是基于这种想法而设计的。
除了 PID 方面的权限之外, vsftpd 也支持 chroot 这个函式的功能,chroot 顾名思义就是『 change root directory 』的意思,那个 root 指的是『根目录』而非系统管理员。他可以将某个特定的目录变成根目录,所以与该目录没有关系的其他目录就不会被误用了。
举例来说,如果你以匿名身份登入我们的 ftp 服务的话,通常你会被限定在 /var/ftp 目录下工作,而你看到的根目录其实就只是 /var/ftp ,至于系统其他如 /etc, /home, /usr... 等其他目录你就看不到了!这样一来即使这个 ftp 服务被攻破了,没有关系,入侵者还是仅能在 /var/ftp 里面跑来跑去而已,而无法使用 Linux 的完整功能。自然我们的系统也就会比较安全啦!
vsftpd 是基于上面的说明来设计的一个较为安全的 FTP 服务器软件,他具有底下的特点喔:
由于具有这样的特点,所以 vsftpd 会变的比较安全一些咯!底下就开始来谈如何设定吧!
vsftpd 所需要的软件只有一个,那就是 vsftpd 啊!^_^!如果你的 CentOS 没有安装,请利用 yum install vsftpd 来安装他吧!软件很小,下载连同安装不需要几秒钟就搞定了!而事实上整个软件提供的配置文件也少的令人高兴!简单易用就是 vsftpd 的特色啊!这些设定数据比较重要的有:
[root@www ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
|
[root@www ~]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
....(底下省略)....
|
大致上就只有这几个档案需要注意而已,而且每个档案的设定又都很简单!真是不错啊!
事实上,/etc/vsftpd/vsftpd.conf 本身就是一个挺详细的配置文件,且使用『 man 5 vsftpd.conf 』则可以得到完整的参数说明。 不过我们这里依旧先将 vsftpd.conf 内的常用参数给他写出来,希望对你有帮助:
上面这些是常见的 vsftpd 的设定参数,还有很多参数我没有列出来,你可以使用 man 5 vsftpd.conf 查阅喔!不过,基本上上面这些参数已经够我们设定 vsftpd 啰。
vsftpd 可以使用 stand alone 或 super daemon 的方式来启动,我们 CentOS 预设是以 stand alone 来启动的。 那什么时候应该选择 stand alone 或者是 super daemon 呢?如果你的 ftp 服务器是提供给整个因特网来进行大量下载的任务,例如各大专院校的 FTP 服务器,那建议你使用 stand alone 的方式,服务的速度上会比较好。如果仅是提供给内部人员使用的 FTP 服务器,那使用 super daemon 来管理即可啊。
其实 CentOS 不用作任何设定就能够启动 vsftpd 啰!是这样启动的啦:
[root@www ~]# /etc/init.d/vsftpd start
[root@www ~]# netstat -tulnp| grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 11689/vsftpd
# 看到啰,是由 vsftpd 所启动的呢!
|
如果你的 FTP 是很少被使用的,那么利用 super daemon 来管理不失为一个好主意。 不过若你想要使用 super daemon 管理的话,那就得要自行修改一下配置文件了。其实也不难啦,你应该要这样处理的:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 找到 listen=YES 这一行:大约在 109 行左右啦,并将它改成:
listen=NO
|
接下来修改一下 super daemon 的配置文件,底下这个档案你必须要自行建立的,原本是不存在的喔:
[root@www ~]# yum install xinetd <==假设 xinetd 没有安装时
[root@www ~]# vim /etc/xinetd.d/vsftpd
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
disable = no
}
|
然后尝试启动看看呢:
[root@www ~]# /etc/init.d/vsftpd stop
[root@www ~]# /etc/init.d/xinetd restart
[root@www ~]# netstat -tulnp| grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 32274/xinetd
|
有趣吧!两者启动的方式可不一样啊!管理的方式就会差很多的呦!不管你要使用哪种启动的方式,切记不要两者同时启动,否则会发生错误的!你应该使用 chkconfig --list 检查一下这两种启动的方式,然后依据你的需求来决定用哪一种方式启动。鸟哥底下的设定都会以 stand alone 这个 CentOS 默认的启动模式来处理,所以赶紧将刚刚的动作给他改回来喔!
在 CentOS 的默认值当中,vsftpd 是同时开放实体用户与匿名用户的,CentOS 的默认值如下:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 1. 与匿名者有关的信息:
anonymous_enable=YES <==支持匿名者的登入使用 FTP 功能
# 2. 与实体用户有关的设定
local_enable=YES <==支持本地端的实体用户登入
write_enable=YES <==允许用户上传数据 (包括档案与目录)
local_umask=022 <==建立新目录 (755) 与档案 (644) 的权限
# 3. 与服务器环境有关的设定
dirmessage_enable=YES <==若目录下有 .message 则会显示该档案的内容
xferlog_enable=YES <==启动登录文件记录,记录于 /var/log/xferlog
connect_from_port_20=YES <==支持主动式联机功能
xferlog_std_format=YES <==支持 WuFTP 的登录档格式
listen=YES <==使用 stand alone 方式启动 vsftpd
pam_service_name=vsftpd <==支持 PAM 模块的管理
userlist_enable=YES <==支持 /etc/vsftpd/user_list 档案内的账号登入管控!
tcp_wrappers=YES <==支持 TCP Wrappers 的防火墙机制
|
上面各项设定值请自行参考 21.2.3 的详细说明吧。而通过这样的设定值咱们的 vsftpd 可以达到如下的功能:
所以当你启动 vsftpd 后,你的实体用户就能够直接利用 vsftpd 这个服务来传输他自己的数据了。不过比较大的问题是,因为 vsftpd 预设使用 GMT 时间,因为你在客户端使用 ftp 软件连接到 FTP 服务器时,会发现每个档案的时间都慢了八小时了!真是讨厌啊! 所以建议你加设一个参数值,就是『 use_localtime=YES 』啰!
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 在这个档案当中的最后一行加入这一句即可
use_localtime=YES
[root@www ~]# /etc/init.d/vsftpd restart
[root@www ~]# chkconfig vsftpd on
|
如此一来你的 FTP 服务器不但可以提供匿名账号来下载 /var/ftp 的数据,如果使用实体账号来登入的话,就能够进入到该用户的家目录底下去了!真是很简单方便的一个设定啊!且使用本地端时间呢! ^_^
另外,如果你预计要将 FTP 开放给 Internet 使用时,请注意得要开放防火墙喔!关于防火墙的建置情况,由于牵涉到数据流的主动、被动联机方式,因此,还得要加入防火墙模块。这部份我们在后续的 21.2.8 小节再加以介绍,反正,最终记得要开放 FTP 的联机要求就对了!
虽然在 CentOS 的默认情况当中实体用户已经可以使用 FTP 的服务了,不过我们可能还需要一些额外的功能来限制实体用户。举例来说,限制用户无法离开家目录 (chroot)、限制下载速率、限制用户上传档案时的权限 (mask) 等等。底下我们先列出一些希望达到的功能,然后再继续进行额外功能的处理:
你可以自行处理 vsftpd.conf 这个档案,以下则是一个范例。注意,如果你的 vsftpd.conf 没有相关设定值,请自行补上吧!OK!让我们开始一步一步来依序处理先:
[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
|
[root@www ~]# vim /etc/vsftpd/welcome.txt
欢迎光临本小站,本站提供 FTP 的相关服务!
主要的服务是针对本机实体用户提供的,
若有任何问题,请与鸟哥联络!
|
[root@www ~]# vim /etc/vsftpd/user_list
root
bin
....(底下省略)....
|
# 测试使用已知使用者登入,例如 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.
|
上面是最简单的实体账号相关设定。那如果你还想要限制用户家目录的 chroot 或其他如速限等数据,就得要看看底下的特殊设定项目啰。
在预设的情况下,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 没有这么难处理的啦!^_^
在鸟哥接触的一般 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 这个新的档案,就能够在最终知道下载的速度啦!
如果你有限制最大使用带宽的话,那么你可能还需要限制最大在线人数才行!举例来说,你希望最多只有 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 的账号写入 /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 服务了。 不过,不建议如此作喔!
|
虽然你可以同时开启实体用户与匿名用户,不过建议你,服务器还是依据需求,针对单一种身份来设定吧!底下我们将针对匿名用户来设定,且不开放实体用户。一般来说,这种设定是给类似大专院校的 FTP 服务器来使用的哩!
OK!那如何设定呢?首先我们必须要知道的是匿名用户的目录在哪里?事实上匿名者默认登入的根目录是以 ftp 这个用户的家目录为主,所以你可以使用『 finger ftp 』来查阅。咱们的 CentOS 默认的匿名者根目录在 /var/ftp/ 中。且匿名登录者在使用 FTP 服务时,他预设可以使用『 ftp 』这个使用者身份的权限喔,只是被 chroot 到 /var/ftp/ 目录中就是了。
因为匿名者只会在 /var/ftp/ 当中浏览,所以你必须将要提供给用户下载的数据通通给放置到 /var/ftp/ 去。假设你已经放置了 linux 的相关目录以及 gnu 的相关软件到该目录中了,那我们可以这样做个假设:
[root@www ~]# mkdir /var/ftp/linux
[root@www ~]# mkdir /var/ftp/gnu
|
然后将 vsftpd.conf 的数据清空,重新这样处理他吧:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 将这个档案的全部内容改成这样:
# 1. 与匿名者相关的信息:
anonymous_enable=YES
no_anon_password=YES <==匿名登录时,系统不会检验密码 (通常是email)
anon_max_rate=1000000 <==最大带宽使用为 1MB/s 左右
data_connection_timeout=60 <==数据流联机的 timeout 为 60 秒
idle_session_timeout=600 <==若匿名者发呆超过 10 分钟就断线
max_clients=50 <==最大联机与每个 IP 的可用联机
max_per_ip=5
# 2. 与实体用户相关的信息,本案例中为关闭他的情况!
local_enable=NO
# 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/anon_welcome.txt <==檔名有改喔!
[root@www ~]# /etc/init.d/vsftpd restart
|
[root@www ~]# vim /etc/vsftpd/anon_welcome.txt
欢迎光临本站所提供的 FTP 服务!
本站主要提供 Linux 操作系统相关档案以及 GNU 自由软件喔!
有问题请与站长联络!谢谢大家!
主要的目录为:
linux 提供 Linux 操作系统相关软件
gnu 提供 GNU 的自由软件
uploads 提供匿名的您上传数据
|
[root@www ~]# ftp localhost
Connected to localhost (127.0.0.1).
220-欢迎光临本站所提供的 FTP 服务! <==底下这几行中文就是欢迎与提示讯息!
220-本站主要提供 Linux 操作系统相关档案以及 GNU 自由软件喔!
220-有问题请与站长联络!谢谢大家!
220-主要的目录为:
220-
220-linux 提供 Linux 操作系统相关软件
220-gnu 提供 GNU 的自由软件
220-uploads 提供匿名的您上传数据
220
Name (localhost:root): anonymous <==匿名账号名称是要背的!
230 Login successful. <==没有输入密码即可登入呢!
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (127,0,0,1,196,17).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Aug 08 16:37 gnu
-rw-r--r-- 1 0 0 17 Aug 08 14:18 index.html
drwxr-xr-x 2 0 0 4096 Aug 08 16:37 linux
drwxr-xr-x 2 0 0 4096 Jun 25 17:44 pub
226 Directory send OK.
ftp> bye
221 Goodbye.
|
在上列的数据当中,实际上匿名用户仅可进行下载的动作而已。如果你还想让匿名者可以上传档案或者是建立目录的话,那你还需要额外增加一些设定才行:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 新增底下这几行啊!
write_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
[root@www ~]# /etc/init.d/vsftpd restart
|
如果你设定上面四项参数,则会允许匿名者拥有完整的建立、删除、修改档案与目录的权限。 不过,实际要生效还需要 Linux 的文件系统权限正确才行! 我们知道匿名者取得的身份是 ftp ,所以如果想让匿名者上传数据到 /var/ftp/uploads/ 中,则需要这样做:
[root@www ~]# mkdir /var/ftp/uploads
[root@www ~]# chown ftp /var/ftp/uploads
|
然后你以匿名者身份登入后,就会发现匿名者的根目录多了一个 /upload 的目录存在了,并且你可以在该目录中上传档案/目录喔!如此一来系统的权限大开!很要命喔!所以,请仔细的控制好你的上传目录才行!
不过,在实际测试当中,却发现还是没办法上传呢!怎么回事啊?如果你有去看一下 /var/log/messages 的话,那就会发现啦! 又是 SELinux 这家伙呢!怎么办?就透过『 sealert -l ... 』在 /var/log/messages 里面观察到的指令丢进去, 立刻就知道解决方案啦!解决方案就是放行 SELinux 的匿名 FTP 规则如下:
[root@www ~]# setsebool -P allow_ftpd_anon_write=1
[root@www ~]# setsebool -P allow_ftpd_full_access=1
|
然后你再测试一下用 anonymous 登入,到 /uploads 去上传个档案吧!就会知道能不能成功哩!
一般来说,用户上传的数据在管理员尚未查阅过是否合乎版权等相关事宜前,是不应该让其他人下载的!然而前一小节的设定当中,用户上传的资料是可以被其他人所浏览与下载的!如此一来实在是很危险!所以如果你要设定 /var/ftp/uploads/ 内透过匿名者上传的数据中,仅能上传不能被下载时,那么被上传的数据的权限就得要修改一下才行!请将前一小节所设定的四个参数简化成为:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 将这几行给他改一改先!记得要拿掉 anon_other_write_enable=YES
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
chown_uploads=YES <==新增的设定值在此!
chown_username=daemon
[root@www ~]# /etc/init.d/vsftpd restart
|
当然啦,那个 /var/ftp/uploads/ 还是需要可以被 ftp 这个使用者写入才行!如此一来被上传的档案将会被修改档案拥有者成为 daemon 这个使用者,而 ftp (匿名者取得的身份) 是无法读取 daemon 的数据的,所以也就无法被下载啰! ^_^
例题:
在上述的设定后,我尝试以 anonymous 登入并且上传一个大档案到 /uploads/ 目录下。由于网络的问题,这个档案传到一半就断线。下在我重新上传时,却告知这个档案无法覆写!该如何是好?
答:
为什么会无法覆写呢?因为这个档案在你脱机后,档案的拥有者就被改为 daemon 了!因为这个档案不属于 ftp 这个用户了,因此我们无法进行覆写或删除的动作。此时,你只能更改本地端档案的档名再次的上传,重新从头一直上传啰!
|
FTP 的联机分为主动式与被动式,主动式联机比较好处理,因为都是透过服务器的 port 20 对外主动联机,所以防火墙的处理比较简单。被动式联机就比较麻烦~因为预设 FTP 服务器会随机取几个没有在使用当中的埠口来建立被动式联机,那防火墙的设定就麻烦啦!
没关系,我们可以透过指定几个固定范围内的埠口来作为 FTP 的被动式数据连接之用即可, 这样我们就能够预先知道 FTP 数据链路的埠口啦!举例来说,我们假设被动式连接的埠口为 65400 到 65410 这几个埠口时,可以这样设定:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加底下这几行即可啊!
pasv_min_port=65400
pasv_max_port=65410
[root@www ~]# /etc/init.d/vsftpd restart
|
匿名用户的设定大致上这样就能符合你的需求啰!其他的设定就自己看着办吧! ^_^
防火墙设定有什么难的?将第九章里面的 script 拿出来修改即可啊!不过,如同前言谈到的,FTP 使用两个埠口,加上常有随机启用的数据流埠口,以及被动式联机的服务器埠口等,所以,你可能得要进行:
要修改的地方不少,那就让我们来一步一脚印吧!
# 1. 加入模块:虽然 iptables.rule 已加入模块,不过系统档案还是修改一下好了:
[root@www ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
# 加入模块即可!两个模块中间有空格键隔开!然后重新启动 iptables 服务啰!
[root@www ~]# /etc/init.d/iptables restart
# 2. 修改 iptables.rule 的脚本如下:
[root@www ~]# vim /usr/local/virus/iptables/iptables.rule
iptables -A INPUT -p TCP -i $EXTIF --dport 21 --sport 1024:65534 -j ACCEPT
# 找到上面这一行,并将前面的批注拿掉即可!并且新增底下这一行喔!
iptables -A INPUT -p TCP -i $EXTIF --dport 65400:65410 --sport 1024:65534 -j ACCEPT
[root@www ~]# /usr/local/virus/iptables/iptables.rule
|
这样就好了!同时兼顾主动式与被动式的联机!并且加入所需要的 FTP 模块啰!
底下说明几个常见的问题与解决之道吧!
上面是蛮常发现的错误,如果还是无法解决你的问题,请你务必分析一下这两个档案:/var/log/vsftpd.log 与 /var/log/messages ,里面有相当多的重要资料,可以提供给你进行除错喔!不过 /var/log/vsftpd.log 却预设不会出现! 只有 /var/log/xferlog 而已。如果你想要加入 /var/log/vsftpd.log 的支持,可以这样做:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
# 加入这两个设定值即可呦!
[root@www ~]# /etc/init.d/vsftpd restart
|
这样未来有新联机或者是错误时,就会额外写一份 /var/log/vsftpd.log 去喔! 跳转到页首
标签:style blog http io ar color os 使用 sp
原文地址:http://www.cnblogs.com/lliqiang/p/4155133.html