#pwd
/usr/src
#ls
vsftpd-2.0.4.tar.gz
#tar zxvf vsftpd-2.0.4.tar.gz
#cd vsftpd-2.0.4
#make;make install
#useradd -d /var/ftp ftp
#cp vsftpd.conf /etc/
#cp RedHat/vsftpd.pam /etc/pam.d/ftp
第五句是表示解压缩文件,注意的是第七句.往往其它软件解压后的第一件事是./config,但这个没有,可以直接make进行编译,安装好后,运行man INSTALL<保证你现在的位置在/usr/scr/vsftpd-2.0.4中>,那里会一步一步的教你,我说的都是些大概,第八句是测试本机是否存在了ftp这个用户,当然也可以用finger先行查看,这里方便了^_^,安装好后的vsftpd的服务器是匿名服务器,也就是说不允许有密码有帐号的人访问,匿名的文件夹默认指定为"/var/ftp"所以上面的并不完整,我们还需要手工建立一下,"#mkdir /var/ftp"由于建立的是匿名服务器,安全一定要有所保证.
#chown root.root /var/ftp
#chmod og-w /var/ftp
这两句话的意思就是把属主分给root用户,其它用户<不能创建文件>
第九句是把当前目录下</usr/src>的vsftpd.conf移到/etc/下,否则系统找不到配置文件,第十句是把当前目录下的RedHat子目录下的vsftpd.pam拷贝到/etc/下并更名为ftp,这一点需要注意,
#which vsftpd
/usr/local/sbin/vsftpd
#/usr/local/sbin/vsftpd & #后台启动ftp服务
#echo "/usr/local/sbin/vsftpd &" >> /etc/rc.local #开机自动启动!
使用which 命令查看vsftpd所处的目录,"/usr/local/sbin/vsftpd"因为vsftpd是一个系统服务,所以它也将会在/etc/xinetd.d/也会有vsftpd这个文件,我们让vsftpd是一个独立的进程,需要把/etc/xinetd.d下的vsftpd关闭,chkconfig vsftpd off可用chkconfig vsftpd --list查看是否成功关闭了,接下来就是查看当前系统端口中是否已经别的服务占用了21端口.
- #netstat -tnlp | grep 21
- #/etc/rc.local #如果没有的话就运行这条
下面就开始配置这个服务器了vi /etc/vsftpd,这里是以本地用户为主.
其中有几个比较常用的选项.这里加以说明;
- anonymous_enable=yes 允许匿名用户访问
- local_enable=yes 允许本地用户,默认是注解了
- write_enable=yes 允许客户写命令,
- local_umask=022 本地用户新建文件的值
- anon_upload_enable=yes 允许匿名用户上传
- anon_mkdir_enable=yes允许匿名用户建文件夹,不要选此项
- dirmessage_enable=yes 允许使用文件夹的说明选项
- ftpd_banner=welcome to my frist ftp server 欢迎辞
- ls_recurse_enable=yes 允许使用ls -R,不使用
- listen=yes 监听模式,独立运行的关键
- 保存退出后#killall -9 vsftpd
- #/usr/local/sbin/vsftpd & 或者是
- killall -i vsftpd 抑或是killall -HUP vsftpd
- 之后重新登陆测试;
ftp localhost
会看到成功的提示符吧..这样你就可以用系统用户进行登陆,登陆后的主目录是帐号的主目录,可以用put上传,get下载.具体的在进入后可用help查看帮助,那匿名用户能否传和下载文件呢?
- #ftp localhost
- Name (localhost:root):ftp<or anonymous>
- #password:回车
- #put /etc/services services227 Entering Passive Mode (127,0,0,1,236,198)
553 Could not create file.
你会看到不能创建文件,我们在/etc/vsftpd.conf已经设置了,怎么还是不可以呢??检查一下匿名用户的目录;
get hosts 正常.说明上传有错.配置文件是没错的,因为get命令可以下载文件,只有匿名用户的主目录有错了,
[root@server root]# ls -ld /var/ftp/
drwxr-xr-x 2 root root 4096 5月 23 20:03 /var/ftp/
只有读和执行的权限,没有写的权限.问题就是这儿了,那我们动手把它改成可写不就行了吗??你觉的可行吗?那你就试试;我这里讲的是在/var/ftp里再另行创建一个文件夹作为匿名用户可写的地方,
[root@server root]#
[root@server root]# mkdir /var/ftp/incomeing
[root@server root]# ls /var/ftp/incomeing/
[root@server root]# ls -ld /var/ftp/incomeing/
drwxr-xr-x 2 root root 4096 5ÔÂ 23 21:29 /var/ftp/incomeing/
[root@server root]# chogrp ftp /var/ftp/incomeing/
[root@server root]# chmod go+w /var/ftp/incomeing/
再次登陆一下就会有创建文件的权限了,你问我没有创建文件夹的权限?看你的配置文件有设置允许没??进入后我们的文件别人都可以进行查看,下载,修改,可不安全啊..
这样的都会遇到别人的覆盖和修改,我们把它修改为只让他看不让他破坏!
我们把incoming文件夹ftp组的"r"拿去,只让他们只上传,不允许查看,这样它们依靠那天才的思维也不能查看的到吧!哈,到了这里有人不信了,不会吧,这么天才,那好用匿名用户登陆,自己传一个"/etc/services"然后你再用get下载看能否行的通???不行吧!
在此我们用匿名用户登陆,用pwd进行查看的时候会发现我们所处的环境是"/",我们指定的是"/var/ftp/"怎么变成了"/",这个环境就是"chroot"在次指明了vsftp是非常安全的,那我们用非匿名用户登陆还会有此功能吗?答案是否定的,我们如果对一些特别的用户进行指定chroot,让他们只看到"/"而不知道他们所处真实系统的位置,再次配置/etc/vsftpd.conf.
chroot_list_enable=yes- chroot_list_file=/etc/vsftpd.chroot.list
第一项是启用.默认是注解的,如果你在此写个no,也是没用的,第二项是仅依第一项的yes而存的,其中要看明白chroot_list_file=/etc/vsftpd.chroot.list,其中把指定的文件位置就是默认支持chroot的系统用户清单,切记的是一行一个用户,这样里面的帐号进入后就进入他们的主目录,也就是ftp里的"/"但是系统帐号可以自由的查看上传和修改了,因为是他们的主目录了,
下面开始对user进行控制,如果哪些用户比较不适合访问这个ftp服务器,怎么禁用它呢??,我们只能在/etc/ftpusers里进行配置了,和/etc/sftpd.chroot_list的一样哦, 都是一行一个用户名,存在这里面的用户默认是禁止他们登陆的,我们也可以修改"/etc/pam.d/ftp"把它改成允许的,其它这个文件是由我们刚才复制的pam控制的,先看一下pam.d
#more /etc/pam.d/ftp
#%PAM-1.0
auth required /lib/security/pam_listfile.so item=user sense=deny file=
/etc/ftpusers onerr=succeed
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_shells.so
account required /lib/security/pam_pwdb.so
session required /lib/security/pam_pwdb.so
看到的是pam是一个接口型的文件,首先我们登陆ftp服务的时候会自动检查是否存在于/pam_listfile,这个pam_listfile就是/etc/ftpusers,类型是user,怎么处理呢?sense=deny禁止,把它改为allow就变成允许了,
用一个登陆成的帐号加进/etc/ftpusers里,再次登陆,
你会看到的是失败,
再讲一个vsftp的精华点就是虚拟帐号,这样就能防止一些危险用户猜测系统帐号密码对系统造成破坏,当然也可以用"useradd -s /etc/nologin username",让别人知道我们系统的帐号总不会是好事,还是从根本上杜绝!
这里以图文解说;
[root@server root]# useradd vuser #新建一个虚拟登陆指定的号! guest_enable=YES guest_username=vuser 接下来就是重启vsftpd [root@server root]# killall -HUP vsftpd #! |