linux 架设vsftp服务器全过程 要求加精

linux 架设vsftp服务器全过程 要求加精

1.首先我们还是查看是否安装了 rpm qa|grep vsftpd
如果没安装请在这里下载ftp://vsftpd.beasts.org/users/cevans/
2.我们去这里下载最新版本2.01,并把它下ftp://vsftpd.beasts.org/users/cevans/
3.然后我们需要把它解开[root@zy jishu]# tar zxvf vsftpd-2.01 ,jishu是我建立的用户 目录是/home/jishu
大家看清是在/home/jishu 目录下进行解压的 呵呵,顺便说一下 tar zcvf 就是压缩 大家可以自己试着把一个文件压缩成tar的格式
4.[root@zy jishu]#cd vsftpd -2.0.1 解开后我们进入相应的目录
[root@zy jishu]#./configure    版本是否满足编译的需要等安装所需要的系统信息。为随后的编译工作做准备。---- 如果检查过程中,发现有错误,configure将给予提示,并停止检查。你可以跟据提示对系统进行配置。再重新执行该程序。检查通过后,将生成用于编译的MakeFile文件。此时,可以开始进行编译了。编译的过程视软件的规模和计算机的性能的不同,所耗费的时间也不同:
5.在这里我补充一点linux安装和卸载软件的方法
 Linux软件的安装和卸载一直是困惑许多初学者的难题。由于Linux与Windows在系统目录结构,系统配置方式等诸多方面的重大差异,使这两者的软件安装卸载的方式也截然不同。在Windows中使用的是控制面板中的"添加/删除程序";与其相类似,在Linux下有一个功能强大的软件
安装卸载工具,名为RPM。其全名为"Red Hat Package Manager"。它可以用来建立、安装、查询、更新、卸载软件。该工具是在命令行下使用的。在Shell的提示符后输入rpm,就可获得该命令的帮助信息。 软件的安装
   Linux下软件的安装主要有两种不同的形式。第一种安装文件名为filename.tar.gz。另一种安装文件名为filename.i386.rpm。以第一种方式发行的软件多为以源码形式发送的。第二种方式则是直接以二进制形式发行的。i386即表示该软件是按Inter 386指令集编译生成的。
  对于第一种,安装方法如下:
  首先,将安装文件拷贝至你的目录中。例如,如果你是以root身份登录上的,就将软件拷贝至/root中。
   #cp filename.tar.gz /root
  由于该文件是被压缩并打包的,所以,应对其解压缩。命令为:
   #tar xvzf filename.tar.gz
  执行该命令后,安装文件按路径,解压缩在当前目录下。用ls命令可以看到解压缩后的文件。通常在解压缩后产生的文件中,有名
为"INSTALL"的文件。该文件为纯文本文件,详细讲述了该软件包的安装方法。
   对于多数需要编译的软件,其安装的方法大体相同。执行解压缩后产生的一个名为configure的可执行脚本程序。它是用于检查系统是否有编译时所需的库,以及库的版本是否满足编译的需要等安装所需要的系统信息。为随后的编译工作做准备。命令为:
  #./configure
  如果检查过程中,发现有错误,configure将给予提示,并停止检查。你可以跟据提示对系统进行配置。再重新执行该程序。检查通过后,将生成用于编译的MakeFile文件。此时,可以开始进行编译了。编译的过程视软件的规模和计算机的性能的不同,所耗费的时间也不同。命令为:
   #make  #make install
  安装完毕,应清除编译过程中产生的临时文件和配置过程中产生的文件。键入如下命令:
   #make clean
  至此,软件的安装结束。
   对于第二种,其安装方法要简单的多。
   同第一种方式一样,将安装文件拷贝至你的目录中。然后使用rpm来安装该文件。命令如下:
  #rpm -i filename.i386.rpm
   rpm将自动将安装文件解包,并将软件安装到缺省的目录下。并将软件的安装信息注册到rpm的数据库中。参数i的作用是使rpm进入安装模式。  另外,还有一些Linux平台下的商业软件。在其安装文件中,有Setup安装程序,其安装方法同Windows平台下的一样。如:Corel WordPerfect。
  软件的卸载
   软件的卸载主要是使用rpm来进行的。卸载软件首先要知道软件包在系统中注册的名称。键入命令:
  #rpm -qa
  即可查询到当前系统中安装的所有的软件包。参数q的作用是使rpm进入查询命令模式。参数a是查询模式的子参数,意为全部(ALL)。查询到的信息较多,可使用less人屏显示。
  确定了要卸载的软件的名称,就可以开始实际卸载该软件了。键入命令:
  #rpm -e
  即可卸载软件。参数e的作用是使rpm进入卸载模式。对名为的软件包进行卸载。由于系统中各个软件包之间相互有依赖关系。如果因存在依赖关系而不能卸载,rpm将给予提示并停止卸载。你可以使用如下的命令来忽略依赖关系,直接开始卸载
   #rpm -e -nodeps  忽略依赖关系的卸载可能会导致系统中其它的一此软件无法使用。你可以使用
   #rpm -e -test
  使rpm进行一次卸载预演,而不是真正卸载。这样可以使你检查一下软件是否存在有依赖关系。卸载过程中是否有错误。
6.[root@zy vsftpd -2.0.1]#make  ,使其生成二进制数据
7.[root@zy vsftpd -2.0.1]#make INSTALL安装的命令,安装生成的二进制数据 相当于运行windows下的exe文件
7.[root@zy vsftpd -2.0.1]#which vsftpd 查看vsftpd装到那里了
8.现在服务器已经装好了,现在我们要去修改配置文件了
[root@zy vsftpd -2.0.1]#more install 我们可以看看安装帮助
看看应该如何配置,一般安装都要注意看看如何配置文档
我们首先要把主配置文件copy到/etc目录下
[root@zy vsftpd -2.0.1]#cp vsftpd.conf /etc
[root@zy etc]#cp RedHat/vsftpd.pam /etc/pam.d/ftp  ,这个cp是为了ftp认证用的,即用户登录的时候是需要通过pm.d 这个认证的
呵呵,大家多研究下 more INSTALL 里面好多内容都是教我们如何架设一个成功的vsftpd的服务器的
[root@zy etc#vi vsftpd.conf
我们需要在最后加入一句listen=YES ,这样做的原因是让服务器独立的运行,让服务器自己监听,wq 保存并退出
[root@zy vsftpd -2.0.1]#mkdir /var/ftp  创建匿名登录用户目录
[root@zy vsftpd -2.0.1]#chown root.root /var/ftp 将目录所有者改为root,组也改为root
[root@zy vsftpd -2.0.1]#chmod og-w /var/ftp 权限设定为其他用户和root组的人不能写入,只能读和进入
[root@zy vsftpd -2.0.1]#finger ftp 确认一下匿名用户
[root@zy vsftpd -2.0.1]#/usr/local/sbin/vsftpd & 为了让服务器启动的时候,我们来控制,我们加一个& 符号,这样服务器启动的时候就在后台运行了。could not bind listening IPv4 socket?
只要在/etc/xinetd.d/vsftpd文件中,把disable=no改成YES就行!
还有就是在/etc/vsftpd.conf文件添加listen=yes这样就改成了STANDALONE独立模式!
因为xinetd已经启动了vsftpd,而vsftpd设置成了stardalone模式,所以,先停止xinetd服务,  service xinetd stop ,然后
/usr/local/sbin/vsftpd &启动ftp服务
[root@zy vsftpd -2.0.1]#netstat -tnl 我们检查下看有没有开一个端口为21的地址,如果有ok,如果没查看下是那个进程在使用21端口,用kill -9 进程pid 删除该进程
[root@zy vsftpd -2.0.1]#ftp localhost  我们测试下链接下自己,、它会让你输入用户名和密码,我们尝试用anonymous  密码为空,发现现在已经登录成功了 ,
[root@zy vsftpd -2.0.1]#vi /etc/rc.local  为了让ftp服务器开机自动启动,我们需要把它写入/etc/rc.local目录下
我们在该文件最后写入 /usr/local/sbin/vsftpd &
wq 保存退出  
9.前面已经把vsftpd服务器,http://www.linuxdiyf.com/bbs/viewthread.php?tid=53105架设起来了,我们最好从新启动下服务器,看看是否开机会自动启vsftp
10.前面装好的服务器会默认在[root@zy root]#ls /usr/local/sbin/ 下创建vsftpd守护进程,同时也在 [root@zy root]#ls /etc/xinetd.d/vsftpd 也放了一个vsftpd的启动脚本 所以服务器可以用两种方式启动,但我们希望它独立运行,所以我们要关闭这个启动,[root@zy root]#chkconfig --list vsftpd
[root@zy root]#chkconfig vsftpd off
[root@zy root]#chkconfig --list vsftpd
[root@zy root]#netstat -tnl 查看21端口是否被占用着,如果被占用就要杀死该进程
[root@zy root]#ps -aux |grep ftp
[root@zy root]#kill -9 进程pid号
[root@zy root]#/etc/rc.local 执行rc.local下的sbin命令
[root@zy root]#netstat -tnl 再次查看端口
3.[root@zy root]#vi /etc/vsftpd.conf 修改服务器的配置文件
我们首先来解释下vsftpd.conf配置下的几个常见命令
anonymous_enable=YES 允许匿名用户登录 注释掉即去掉#
local_enable=YES     允许本地用户登录  去掉#
write_enable=YES     允许本地用户写入   去掉#
local_umask=022   本地用户新文件的umask值  去掉#
abon_upload_enable=YES 允许匿名用户上传文件  去掉#
anon_mkdir_write_enable=YES 允许匿名用户创建目录 不要管它
dirmessage_enable=YES 允许使用目录信息 去掉#
ftpd_banner=welcome to zy ftp server  登录欢迎词  去掉#
ls_recurse_enable=YES  允许客户端使用ls-r 命令 不管
listen=YES 监听模式 在结尾加入此句 wq保存退出
[root@zy root]#killall -9 vsftpd 现在我们的服务器是独立运行的我们需要把它杀死掉
[root@zy root]# /usr/local/sbin/vsftpd & 从新启动vsftpd
[root@zy root]#useradd redhat 创建一个用户
[root@zy root]#passwd redhat 为它设上密码
[root@zy root]#ftp 192.168.1.144 登录自己的ftp服务器
输入用户名redhat 密码
ftp>pwd 查看当前的目录/home/redhat
ftp>help 查看所有可使用的命令
ftp>put /etc/services ftpservices 将/etc/services 上传到ftp服务器上
ftp>ls 查看ftp服务器的目录
ftp>quit 退出ftp服务器
然后我们仿照上面用匿名用户上传文章试一下,结果我们会发现不成功的关键原因就是匿名用户的目录是/var/ftp ,而这个目录不属于匿名用户
[root@zy root]#cd /var/ftp/
[root@zy ftp]#mkdir /var/ftp/shangchuan 创建一个新的目录
[root@zy ftp]#chmod g+w shangchuan/ 让组可写
[root@zy root]#chgrp ftp shangchuan/ 把目录交给组ftp
这样我们就可以用匿名用户创建目录了
ftp>cd shangchuan 进入上传目录
然后就可以上传文章了
然后我们来体验下vsftp的另一个安全性,锁定用户目录
首先我们用redhat用户登录ftp
ftp>pwd 当前的目录/home/redhat
ftp>cd /etc 将会显示更改成功目录
ok 退出ftp quit
然后修改[root@zy root]#vi /etc/vsftpd.conf
将chroot_list_enable=YES
  chroot_list_file=/etc/vsftpd.chroot_list 将这两行注释掉
[root@zy root]#vi /etc/vsftpd.chroot_list
redhat  将这个用户名写入进去,wq
然后我们再次登录ftp服务器
这次用redhat用户登录
ftp>pwd 这次将显示的是  / 目录其实是用户已经被锁定目录了
ftp>cd /etc 将会显示更改目录失败的提示了
11.如果我们要控制用户访问ftp服务器
[root@zy root]#vi /etc/ftpuesrs
redhat
zy
wq 保存退出 这样默认情况下这两个用户 redhat和zy就不能访问ftp服务器,etc/ftpuesrs 是一个ftp服务器的黑名单
刚刚我们用redhat登录成功,现在我们把redhat加进ftpusers中
[root@zy root]# echo "redhat" >> /etc/ftpusers
再次登录就会发现登录失败。
[root@zy root]#vi  /etc/passwd 对于系统的敏感用户,即passwd目录下 uid 500 以下的人 这些一般是被系统保留的人,我们应该通通把他们加入 /etc/ftpusers 中,这样做很麻烦
但我们可以反过来只允许指定人访问ftp服务器,而其他人被拒绝
[root@zy root]#cp RedHat/vsftpd.pam /etc/pam.d/ftp 这个第三课有说明大家看一下
[root@zy root]#more /etc/pam.d/ftp  这些用户本质上能登录是被pam.d文件控制了
我们只需要对pam.d/ftp 文件进行更改就可以了
[root@zy root]#vi /etc/pam.d/ftp 将里面默认拒绝的命令sense = deny 换成 sense=allow 这样就只有redhat 和 zy 用户可以登录ftp服务器了
12.为了安全期间,我们不想ftp用户是系统用户,所以我们就要建立一个虚拟的ftp用户,要保证系统确实没有的用户,如tom
首先我们编辑一个users.txt ,[root@zy root]#vi users.txt
里面输入用户 tom
        密码 123  《用户和密码不要输进去,第一行是用户tom,第二行是密码123》
[root@zy root]#id tom 确认一下 tom用户不存在
[root@zy root]#db_load -T -t hash -f users.txt /etc/vsftpd_login.db  解释一下 -T 就是将简单txt文件写入db 数据库的命令 -t 是指写入的类型为hash ,-f就是文件名 ,/etc/vsftpd_login.db 这是指文件写入到的位置
[root@zy root]#chmod 600 /etc/vsftpd_login.db 将这个文件的权限改为600
[root@zy root]#vi /etc/pam.d/ftp 修改pam.d的服务文件
首先我们要把以前的注释掉 ,在所有的前面加# 注释掉
然后我们添上两句话
auth     required  pam_userdb.so db=/etc/vsftpd_login.db
account  required  pam_userdb.so db=/etc/vsftpd_login.db
auth 是认证,其中required 是一种控制方式 我们使用pam_user.db.so这个模块 并且加载一个db=/etc/vsftpd_login.db
account 是指类型为
[root@zy root]# useradd vuser 建立一个虚拟帐户用来映射的,这个用户是不用设密码的
[root@zy root]#vi /etc/vsftpd.conf 编辑服务器的配置
我们要禁用掉所有的anon开头的命令,禁止匿名用户登录 然后
我们要加入两条命令 guest_enable=YES
                            guest_username=vuser
wq保存退出
然后我们实验下用redhat登录下结果反应是登录失败de
ftp>user 我们用虚拟user登录
(username)tom
密码输入 123
进去了 ok
我们可以下个文件看看ftp》get .bashrc 下载成功 ls但是我们却不能看到 quit退出
[root@zy root]#cp install.log /home/vuser/ 复制install.log
[root@zy root]#chmod o+r /home/vuser/ 改变目录为其他人可读
从新用tom登录我们就可以看到install.log了
特别注意,每次对/etc/vsftpd.conf文件做一次修改都要从新启动一次服务器用这个命令可以代替[root@zy root]#killall -HUP vsftpd
非常详细的教程啊,谢谢楼主,呵呵!谢谢啦
本来想每天都写下去的,现在看看论坛,设置的不太合理,努力写了半天也是一帖,随便发了两字也是一帖,而且积分相同,郁闷啊,不知道如果没人支持我还能写下去不
搂主太棒了,顶一下
引用:
原帖由 zy66289214 于 2007-7-24 11:59 发表
本来想每天都写下去的,现在看看论坛,设置的不太合理,努力写了半天也是一帖,随便发了两字也是一帖,而且积分相同,郁闷啊,不知道如果没人支持我还能写下去不
我按上面的步骤设置了VSFTPD,但是ftp登录时出错:500 OOPS:cannot change directory:/home/testme (我是使用testme帐户登录的)。我该咋办?谢谢赐教!
首先查看这个组的权限
以及/home/testme 属于那个组 那个用户
然后把这个用户加入到这个组里就可以了
very good
   收藏了哈
听听神的言论。。。。。支持你顶你
强人!!!!!!!!!!!!!