第一步:创建一个 ftp guest 组,用 groupadd 命令,也可以用 ftp 服务器创建的 ftp 组。
#less /etc/group //看看是否存在,如果装了ftp server的话都有这个组存在;
第二步:在 ftp 组中添加 ftp 用户;
第三步:修改 /etc/ftpaccess 文件,加入 guestgroup 的定义: guestgroup ftp;
或者用 guestuser 直接指定 ftp 用户名,如:
#guestuser ftpuser;
第四步:向这个用户的 $HOME 目录下拷贝必要的文件,主要是与 ls 有关的。一般的 ls 要 Lib 支持,你得重新编译 ls,或把 lib 目录 copy 过去,或者拷贝 ftp server 带的 ls, 比如把 /home/ftp/ 下的bin,etc,lib 三个目录拷贝到这个用户的根目录下, 并修改权限:
chown username.ftp *
注意:现在 Linux 下带的 ftp 无须拷贝这些文件,至少 Redhat6.1 是不需要拷贝的,所以就可以省去第四步。
在众多网络应用中,FTP(文件传输协议)有着非常重要的地位。Internet中一个十分重要的资源就是软件资源,而各种各样的软件资源大多数都放在FTP服务器中。与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户发出的命令,并将执行结果返回给客户机。
FTP服务可以根据服务对象的不同分为两类:系统FTP服务器只允许系统上的合法用户使用;匿名FTP服务器(Anonymous FTP Server)允许任何人登录到FTP服务器去获取文件。
FTP的数据传输模式针对FTP数据连接而言,分为主动传输模式、被动传输模式和单端口传输模式三种。
1.主动传输模式
当FTP的控制连接建立,客户提出目录列表、传输文件时,客户端发出PORT命令与服务器进行协商,FTP服务器使用一个标准端口20作为服务器端的数据连接端口(ftp-data),与客户建立数据连接。端口20只用于连接源地址是服务器端的情况,并且端口20没有监听进程来监听客户请求。
在主动传输模式下,FTP的数据连接和控制连接方向相反,由服务器向客户端发起一个用于数据传输的连接。客户端的连接端口由服务器端和客户端通过协商确定。
2.被动传输模式
当FTP的控制连接建立,客户提出目录列表、传输文件时,客户端发送PASV命令使服务器处于被动传输模式,FTP服务器等待客户与其联系。FTP服务器在非20端口的其它数据传输端口上监听客户请求。
在被动传输模式下,FTP的数据连接和控制连接方向一致,由客户端向服务器发起一个用于数据传输的连接。客户端的连接端口是发起该数据连接请求时使用的端口。当FTP客户在防火墙之外访问FTP服务器时,需要使用被动传输模式。
3.单端口模式
除上述两种模式之外,还有一种单端口模式。该模式的数据连接请求由FTP服务器发起。使用该传输模式时,客户端的控制连接端口和数据连接端口一致。因为这种模式无法在短时间连续输入数据、传输命令,因此并不常用。
Linux下有很多可用的FTP服务器,其中比较流行的有WU-FTP(Washington University FTP)和VSFTP。Red Hat 8.0中自带了WU-FTP和VSFTP两个软件。WU-FTP是一个著名的FTP服务器软件,它功能强大,能够很好地运行于众多Unix操作系统中。不过作为后起之秀的VSFTP越来越流行,在Red Hat 9.0发行版中就只带有VSFTP。
VSFTP中VS的意思是“Very Secure”。从名称可以看出,从一开始,软件的编写者就非常注重其安全性。除与生俱来的安全性外,VSFTP还具有高速、稳定的性能特点。在稳定性方面,VSFTP可以在单机(非集群)上支持4000个以上的并发用户同时连接。据ftp.redhat.com的数据,VSFTP最多可以支持15000个并发用户。
快速构建FTP服务器
FTP服务器实现的基本功能是上传下载,下面就分几个步骤来搭建一个可以实现下载功能的简易FTP服务器。
1.安装FTP服务器
如果在安装系统时没有选择安装FTP服务器,可以通过Red Hat 9.0中的“添加/删除应用程序”工具进行安装。具体方法是,选择“主选单”→“系统设置”→“添加/删除应用程序”,在弹出的界面中选中FTP服务器,单击“更新”即可。
如果无法确认是否安装了该软件,可以使用以下命令查看:
#rpm -qa|grep vsftpd vsftpd-1.1.3-8
2.启动FTP服务器
套用Red Hat 9.0的预设范例直接启动VSFTP。
# /sbin/service vsftpd start
为vsftpd启动vsftpd: [确定]
3.在/var/ftp/pub目录下创建一个名为test.txt的文件,文件内容为“This is a test file”。
4.测试
使用FTP客户端登录到本地服务器,然后以匿名身份(anonymous)登录:
# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 (vsFTPd 1.1.3) Name (127.0.0.1:root): anonymous 331 Please specify the password. Password: 230 Login successful. Have fun. Remote system type is UNIX. Using binary mode to transfer files.
这样就成功地登录到FTP服务器。可以显示服务器目录列表如下:
ftp> ls 227 Entering Passive Mode (127,0,0,1,63,15) 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 Dec 04 01:35 pub 226 Directory send OK.
切换到pub目录下,并显示目录内容,可以找到刚才创建的文件test.txt:
ftp> cd pub 250 Directory successfully changed. ftp> ls 227 Entering Passive Mode (127,0,0,1,232,34) 150 Here comes the directory listing. -rw-r--r-- 1 0 0 21 Dec 04 01:35 test.txt 226 Directory send OK.
下载test.txt文件:
ftp> mget test.txt mget test.txt? y 227 Entering Passive Mode (127,0,0,1,186,210) 150 Opening BINARY mode data connection for test.txt (21 bytes). 226 File send OK. 21 bytes received in 0.0108 secs (1.9 Kbytes/sec)
查看本机目录内容,可以看到test.txt已成功下载到本机。
ftp> !ls a EIO_Binders initrd mnt proc tftpboot ylg.txt bin etc lib mymnt root tmp boot home lost+found myshare sbin usr dev id_dsas.pub misc opt test.txt var
尝试上传名为ylg.txt的文件,可以看到请求被拒绝了。
ftp> put ylg.txt local: ylg.txt remote: ylg.txt 227 Entering Passive Mode (127,0,0,1,243,10) 550 Permission denied.
退出登录:
ftp> bye 221 Goodbye.
由测试可以看出,已经可以下载文件,但不能上传文件(也不能在服务器上创建目录和文件)。实际上这是一个专门提供下载服务的匿名FTP服务器。
从上面的步骤可以看出,并不需要做什么配置就可以完成一个简易FTP服务器的架设。这是因为Red Hat已经配置好一个缺省的FTP服务器。不过在实际应用中,大部分情况下这个简易的服务器并不能满足需求。
FTP:文件传输协议,客户/服务器模式
一、安装WU-FTPD
#rpm -ivh wu-ftpd*.rpm
#tar zxvf wu-ftpd*.tar.gz
#cd wu-ftp*
#./configure
#make
#make install
如果没有指定安装目录,那么其执行文件默认会分别安装在/usr/bin和/usr/sbin 中。
二、启动WU-FTPD
cd 到/etc/xinetd.d/目录
打开wu-ftpd文件,将其中的disable = yes 改为disable = no。
然后重新启动xinetd服务:
#/etc/rc.d/init.d/xinetd restart三、确认FTP是否启动
#telnet localhost 21
Trying 127.0.0.1
connected to rh
escape character is '^]',
220 rh.china.com FTP server (version wu-2.6.1) mon jul 24 01:59:25 EDT 2000)ready.
^] //按ctrl+]号中断。
telnet>q //按Q键退出。
四、匿名FTP的设置与组织
/etc/ftpaccess //WU-FTPD 最重要的设定文件WU-FTPD的可执行程序
/etc/ftpconversions //设置FTP匿名用户传输文件时,可对文件做tar,压缩,解压缩等处理。
/etc/ftpgroups //限定哪些用户组不能登陆到FTP服务器。
/etc/ftphosts //限定哪些网络地址的机器不能连接到FTP服务器
/etc/ftpusers //限定谁不能登陆FTP服务器。
/usr/bin/ftpcount //查询目前各类的上线用户人数。放置上,下载文件的目录
/usr/bin/ftprestart //重新激活FTP
/usr/bin/ftpshut //产生shutmsg文件,并暂停FTP服务。
/usr/bin/ftpwho //查询联机情况
/var/ftp
为了增加系统的安全性,可以使用adduser添加FTP服务器资源的管理者,如:ftpadm,并将ftpadm加入到adm组,这样当别人对FTP有所建议时,可以发email给ftpadm,而不必凡事都要root出马。
修改 /etc/group内容应该如下:
adm:x4:root,adm,daemon,ftpadm然后:
#adduser ftpadm
/var/ftp/bin目录
因为匿名用户看不到除/var/ftp以外的东西,所以必须提供足够的文件供匿名FTP使用,默认/var/ftp是FTP用户的根目录,/var/ftp/bin目录
放置一些常用的FTP命令,如:ls,tar,gzip,compress等执行文件,此目录权限应该是111。
/var/ftp/etc目录
这个目录放置一些匿名FTP用户需要的设置文件,如passwd,group。当匿名用户执行ls -l时,FTP服务器的文件、目录才会显示拥有者的名称和组而不是出现数字。此目录的权限是111。
/var/ftp/pub目录
放置下载文件的起点,通常在pub目录下,会将文件资源特性分类,再建立子目录,由管理员自行规划。
/var/ftp/upload目录
上传目录。系统默认不提供上传目录,如果需要做文件上传,要自己建立此目录,以提供匿名FTP用户上传文件,为了避免病毒,一个好的管理员会筛选upload里的文件和目录,一切都没有问题后,才将上传的文件移至下载区。一般设置upload目录的权限是:chmod 733
/var/ftp/upload/
五、限制登入的用户和主机
将可登入的用户分为3类,分别是real,anonymous,guest。
real:
在此服务器拥有帐号的用户,并以他的帐号登陆,此类帐户默认的登入的目录是其专属目录,但只要他拥有某目录的读取权限,即使该目录不在其专属目录中,也能切换到哪个目录。
anonymous:
指的是在此服务器上没有帐户的用户,可以用anonymous及电子邮件地址当作帐号名称和密码,以匿名方式登入服务器,登入后的根是/var/ftp,此类用户不能切换到除/var/ftp以外的目录。
guest:
来宾帐号。在某些情况下,管理员可能只希望某些拥有帐号的用户登入后,只能存取专属目录下的文件,而不得存取专属目录以外的文件,因此管理员可以利用ftpaccess设定文件中的 guestuser或guestgroup参数指定属于这类的用户有哪些。
设定不可以登入的用户
/etc/ftpusers设定文件用来设定不允许哪些用户登入,方法是每个用户占一行。
修改/etc/ftphosts设定文件
该文件是用来设定允许或拒绝用户从不同的地址登入,有allow和deny两种设定格式。
1允许特定用户从指定地址登入 allow
格式如下:
allow <帐号名称> <主机地址> ...例如,允许test用户从*.china.com网域登陆,
allow test *.china.com
2拒绝特定用户从指定地址登入 deny
格式如下:
deny <帐号名称> <主机名称> ...例如,不允许test用户从202.198.16.8地址登陆,
deny test 202.198.16.8
六、服务器环境设定(/etc/ftpaccess文件)
指令
class
class 用来定义用户工作组,并指定属于这工作组的是哪些类别的用户,或来自哪个阻击地址,同时我们可以在一个ftpaccess文件中定义多个工作组,格式如下:
class <工作组名称><用户类别><用户所在的主机地址>
工作组名称:此工作组名称,由管理员定义
用户类别: 可以使用的类别是real,anonymous,guest。
主机地址:登入用户所在的主机的IP或域名,此处可明确指明主机地址,或采用通配符*也可以。
下例为缺省值:
class all real,guest,anonymous *例如,class group1 real *
//此定义的工作组名称是all,并设定此工作组成员为从任何地方登入的所有类别的用户。
class group2 real,guest,anonymous *.china.com 203.84.200.*
设定FTP服务器管理员的E-mail地址,当WU-FTPD要显示管理者email地址时,即会显示此处的设定格式:
email ylei@163.com
练习:
1启动FTP
2建立用户帐户aaa和bbb,设置不允许bbb登陆
3建立工作组group1,定义此工作组成员是从192.168.9.0网络登陆的real,和anonymous类别的用户
guestuser
指定属于guest类别的用户
例如(格式):
guestuser aaa bbb
guestgroup
用来指定属于guest 类别的工作组有哪些,下例将指定属于guestgp工作组的用户,都属于guest类别:guestgroup guestgp //guestgp工作组要先建立才行。
loginfails
设定允许用户最多登入失败的次数,格式如下:
loginfails <登入次数> //登入次数指当用户输入了错误的帐号和密码超过了设定的登入次数之后,即不再允许用户再尝试登入。
例如:
loginfails 3
readme
用来设定当用户登入FTP后,或第一次切换某目录时,会出现提示信息提醒用户自行读取说明文件,其格式如下:
readme <说明文件路径><时机><工作组名称>
说明文件路径:
设定说明文件的位置,此处设定值可以使用通配符*
时机:
设定要显示提示信息的时机,使用login选项,表示用户登入后;使用cwd=<路径>选项,表示用户第一次切换到该目录时。
工作组名称:
只针对指定的工作组,才显示提示信息。
练习:
设定:
readme README* login //当用户登入FTP时,系统会提示用户读取同一目录下的README*文件在user的专属目录下建立以README文件,或建立以README名称开头的文件,并输入些内容。
重新启动xinetd服务
/etc/rc.d/init.d/xinetd restart
在shell状态以user身份连接ftp server。会有提示你读取README文件
例二
设定readme README* cwd=* //表示当用户地一次切换到任一目录时,系统会提示用户读取同一目录下的README*文件。
例三
设定readme README* CWD=/LIB GROUP1 //表示当group1工作组的用户第一次切换到/lib目录时,系统才会提示该用户读取README*文件。
message
是用来设定当用户登入后,或第一次切换到某目录时,系统所要显示的欢迎信息,其格式如下:
message <信息文件路径><时机><类别>
信息文件路径:
设定欢迎信息文件存放的位置,此位置的路径是相对于/var/ftp目录的。
时机:
设定要显示提示信息的时机。使用login选项,表示用户登入后,cwd=< 路径>则表示用户第一次切换到该目录时,只有当用户地一次切换到该目录时,才显示此提示信息,若再次切换回到同一目录则不再显示信息。