bsbforever 发表于 2015-11-6 13:43:56

linux下的vsftp服务

这里以vsftpd.-2.0.4.bz为范例,请留意你的系统是否装有开发环境,vsftpd的网站是http://vsftpd.beasts.org.
ftp<file tranfer protocol>是特意提供上传和下载的一项服务,一般会开21为默认端口,其中有message和date二条通信通道,一个信息传递,另一个就是传输数据,其中在dos系统登陆ftp的软件直接是ftp ftp.server.org win下面的很多了,unix下面的有ftp和gftp.
首先把下载来的vsftpd拷贝到&quot;/usr/src&quot;目录里,

[*]
#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的服务器是匿名服务器,也就是说不允许有密码有帐号的人访问,匿名的文件夹默认指定为&quot;/var/ftp&quot;所以上面的并不完整,我们还需要手工建立一下,&quot;#mkdir /var/ftp&quot;由于建立的是匿名服务器,安全一定要有所保证.

#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 &quot;/usr/local/sbin/vsftpd &&quot; >> /etc/rc.local #开机自动启动!

使用which 命令查看vsftpd所处的目录,&quot;/usr/local/sbin/vsftpd&quot;因为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命令可以下载文件,只有匿名用户的主目录有错了,

# ls -ld /var/ftp/
drwxr-xr-x    2 root   root         40965月 23 20:03 /var/ftp/
只有读和执行的权限,没有写的权限.问题就是这儿了,那我们动手把它改成可写不就行了吗??你觉的可行吗?那你就试试;我这里讲的是在/var/ftp里再另行创建一个文件夹作为匿名用户可写的地方,

#
# mkdir /var/ftp/incomeing
# ls /var/ftp/incomeing/
# ls -ld /var/ftp/incomeing/
drwxr-xr-x    2 root   root         40965&Ocirc;&Acirc; 23 21:29 /var/ftp/incomeing/
# chogrp ftp /var/ftp/incomeing/
# chmod go+w /var/ftp/incomeing/

   再次登陆一下就会有创建文件的权限了,你问我没有创建文件夹的权限?看你的配置文件有设置允许没??进入后我们的文件别人都可以进行查看,下载,修改,可不安全啊..
这样的都会遇到别人的覆盖和修改,我们把它修改为只让他看不让他破坏!

   我们把incoming文件夹ftp组的&quot;r&quot;拿去,只让他们只上传,不允许查看,这样它们依靠那天才的思维也不能查看的到吧!哈,到了这里有人不信了,不会吧,这么天才,那好用匿名用户登陆,自己传一个&quot;/etc/services&quot;然后你再用get下载看能否行的通???不行吧!

在此我们用匿名用户登陆,用pwd进行查看的时候会发现我们所处的环境是&quot;/&quot;,我们指定的是&quot;/var/ftp/&quot;怎么变成了&quot;/&quot;,这个环境就是&quot;chroot&quot;在次指明了vsftp是非常安全的,那我们用非匿名用户登陆还会有此功能吗?答案是否定的,我们如果对一些特别的用户进行指定chroot,让他们只看到&quot;/&quot;而不知道他们所处真实系统的位置,再次配置/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里的&quot;/&quot;但是系统帐号可以自由的查看上传和修改了,因为是他们的主目录了,

下面开始对user进行控制,如果哪些用户比较不适合访问这个ftp服务器,怎么禁用它呢??,我们只能在/etc/ftpusers里进行配置了,和/etc/sftpd.chroot_list的一样哦, 都是一行一个用户名,存在这里面的用户默认是禁止他们登陆的,我们也可以修改&quot;/etc/pam.d/ftp&quot;把它改成允许的,其它这个文件是由我们刚才复制的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的精华点就是虚拟帐号,这样就能防止一些危险用户猜测系统帐号密码对系统造成破坏,当然也可以用&quot;useradd -s /etc/nologin username&quot;,让别人知道我们系统的帐号总不会是好事,还是从根本上杜绝!

这里以图文解说;
  # useradd vuser #新建一个虚拟登陆指定的号!
# vi users.txt#虚拟号范本一行用户名下一行密码
# db_load -T -t hash -f users.txt /etc/vsftpd.login.db #把users.txt的内容加为虚拟用户的帐号和密码
# chmod 600 /etc/vsftpd.login.db #为了安全修改里面的内容
# vi /etc/pam.d/ftp#修改里面的内容,使之与下面的相同
# more /etc/pam.d/ftp
#%PAM-1.0
#auth       required    /lib/security/pam_listfile.so item=user sense=allow 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
auth      required    pam_userdb.so db=/etc/vsftpd.login
account   required    pam_userdb.so db=/etc/vsftpd.login
再次修改/etc/vsftpd.conf,使其内容与anonymous有关的全部禁用,还有刚才的chroot也被列为禁用,如果想用的话保证虚拟号能常的前提下再另行测试,并在最后加入二句话:
  guest_enable=YES
  guest_username=vuser接下来就是重启vsftpd
  # killall -HUP vsftpd#!
# ftp localhost#测试
Connected to server.redhat.org.cn.
220 Welcome to linfeng's ftp server.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): tom   #虚拟号
331 Please specify the password.
Password:   #虚拟号tom的密码
230 Login successful.#成功
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,136,56)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).   #怎么会禁止了呢?想一下上面的,,呵呵,这就是因为vuser用户的权限啊,只需&quot;chmod o+r /home/vuser&quot;那可浏览,但不可上传,因为没有&quot;w&quot;位



页: [1]
查看完整版本: linux下的vsftp服务