一、实验目的

该实验是基于yum源代码安装ftp服务器,并编写服务器控制脚本,主要是练习yum源代码安装软件包的能力,及练习shell脚本编写能力。

二、实验环境

Vmware 10 虚拟机写安装的Linux操作系统centos6.4 64位的操作系统。

三、实验步骤

1、实验准备

Yum源代码安装软件包需要编译环境的,针对本次实验,在centos操作系统上需要我们事先安装两个软甲包组(Additional Development Development tools)。然后我们还需要最新的vsftpd软件包,这里已有我们下载的最新的,下载地址:http//vsftpd.beasts.org/  

2、安装

软件包已经在系统/root目录下,我们需要将其展开到/usr/local/src/目录下。我们进目录内,可以找你展开生成的目录,这里是vsftps-3.0.2 ,进入此目录找到INSTALL文件,因为vsftp的这个服务里面没有./configure 文件,在这个服务里我们所有需要安装的项目步骤都在INSTALL文件说明内,所以这个文件是我们需要关注的。

(1)根据INSTALL文件内安装步骤指示,第一步我们需要编辑builddefs.h 文件命令如下:

cd/usr/local/src/vsftpd-3.0.2/

vim builddefs.h

文件内定义了一些ftp服务需要的功能,这里我们选择

#defineVSF_BUILD_TCPWRAPPERS  //简易防火墙

#defineVSF_BUILD_PAM   //可插拔的身份验证模块

(2)、执行make

会出现错误

tcpwrap.c:16:20: error: tcpd.h: No such file or directory 出现这样错误可能是我们tcp_wrap安装文件缺失,这需要我们排查我们安装的是否还有别的tcp_wrap没有安装。

yum --disablerepo=\* --enablerepo=c6-media list all |grep-i  tcp_wrap

tcp_wrappers-devel.i686

tcp_wrappers-devel.x86_64

tcp_wrappers-libs.i686

如果我们不知道具体缺失的是那个文件那我们可以都安装了。

安装完这些文件包之后,我们要做的是清除我们刚才已经编译过的文件,让make重新执行,make clean all 指令。

在这样的安装过程中,我们也许会遇到不少错误,要做的只有见招拆招就可以了,

出现了这样一个错误:

/usr/bin/ld: cannot find –lcap    //表示缺少一种cap     l表示是库文件cap表示的名称

缺少的是一些关于libcap开发的库:

libcap-devel-2.16-5.5.el6.i686.rpm

libcap-devel-2.16-5.5.el6.x86_64.rpm

安装这些库之后我们依然要执行 make clean all  指令,之后再执行make

好在之后没有出现什么问题了。

(2)确定当前目录下是否生成vsftps文件,指令:ll  vsftpd*  

之后我们要确认下我们系统下是否有nobody账户

grep nobody/etc/passwd

nobody:x:99:99:Nobody:/:/sbin/nologin

nfsnobody:x:65534:65534:AnonymousNFS User:/var/lib/nfs:/sbin/nologin

说明nobody账户存在。


还要查看是否在有这个目录/usr/share/empty/没有就要创建

mkdir /usr/share/empty/

mkdir: cannot create directory `/usr/share/empty/': File exists  //显示的是创建过


要创建一个名为ftp的用户,还需要自定义家目录名称为ftp

mkdir /var/ftp/

useradd -d /var/ftp ftp

改变用户的所有者,并且以为用户是匿名的所以不需要别人有可修改的权限。

chown root.root /var/ftp

chmod og-w /var/ftp

(3)执行make install ,发现man手册不能自动放到对应的目录下所以需要我们手动操作:

mkdir -pv/usr/local/man/{man5,man8}

cp vsftpd.conf.5/usr/local/man/man5

cp vsftpd.8  /usr/local/man/man8

make install 指令不会去复制模板配置文件,需要我们自己去拷贝:

cp vsftpd.conf  /etc

(4)测试一下:cd /usr/local/sbin/

            vsftpd &

netstat -tupln|grep 21

tcp        0     0 0.0.0.0:21                 0.0.0.0:*                   LISTEN      5581/vsftpd    //21端口已经启动

ftp lftp(匿名账户)测试。注意:如果你的centos是最小化安装的话,你

的系统内可能没有这些命令,需要安装指令。

匿名账户可以成功但是本地账户登录不行,所以我们还要找到/etc/pam.d/ftp 这个文件,可是我们没有找到文件所以需要拷贝:

cp  /usr/local/src/vsftpd-3.0.2/RedHat/vsftpd.pam  /etc/pam.d/ftp


但是需要我们注意的还是会出错,但是这样的错不关pam的问题了,这时我们要看自己的配置文件了

/etc/vsftpd.conf中我们的本地账户登录就没有启动,所以就把local_enable=YES的前面的“#”去掉就行了。

3、编写控制脚本

#!/bin/bash

[ -e/etc/init.d/functons  ] && ./etc/init.d/functions

prog=/usr/local/sbin/vsftpd

lockfile=/var/lock/subsys/vsftpd


start (){

     if [ -e $lockfile ] ; then

        echo " the vsftp is started"

      else

        echo -n "the vsftpd is starting.... "

    $prog &

   if [ $? ]; then

       echo "[ok]" && touch$lockfile

        else

        echo "failer "


   fi


fi


}



stop () {

     if [ ! -e $lockfile]; then

    echo " the vsftp is stoped "

    else

    echo -n "the vsftpd is stoping ......"

    sleep 1

    killproc vsftpd && echo "[ ok]" && rm -rf $lockfile || echo "failer"

    fi

}


status (){


    if [ -e $lockfile ];then

   echo "the vsftpd server is started"

   else

   echo "the vsftpd server is  stoped"

  fi

}


case "$1" in

start)

  start

  ;;

stop)

  stop

  ;;

status)

 status

  ;;

restart)

  stop

  start

  ;;

*)

 echo "vsftpdUSAGE:start|stop|restart|status"

esac

四、实验结果

[root@ahaosbin]# ftp localhost

Trying::1...

ftp:connect to address ::1Connection refused

Trying127.0.0.1...

Connectedto localhost (127.0.0.1).

220(vsFTPd 3.0.2)

Name(localhost:root): anonymous

331Please specify the password.

Password:

230 Loginsuccessful.

Remotesystem type is UNIX.

Using binarymode to transfer files.

ftp>dir

227Entering Passive Mode (127,0,0,1,185,229).

150 Herecomes the directory listing.

226Directory send OK.

ftp>      //匿名账户登录测试成功



[root@ahao~]# ftp 127.0.0.1

Connectedto 127.0.0.1 (127.0.0.1).

220(vsFTPd 3.0.2)

Name(127.0.0.1:root): user10

331Please specify the password.

Password:

230 Loginsuccessful.

Remotesystem type is UNIX.

Usingbinary mode to transfer files.

ftp>       //本地账户登录成功



控制脚本结果

[root@ahaoinit.d]# service vsftpd start

thevsftpd is starting .... [ok]

[root@ahaoinit.d]# netstat -tupln | grep 21

tcp        0     0 0.0.0.0:21                 0.0.0.0:*                   LISTEN      5660/vsftpd        

[root@ahaoinit.d]# ll /var/lock/subsys/vsf*

-rw-r--r--.1 root root 0 Dec 17 06:22 /var/lock/subsys/vsftpd

   [root@ahao init.d]# service vsftpd status

thevsftpd server is started

[root@ahaoinit.d]# service vsftpd stop  

thevsftpd is stoping ...... [ok]

五、实验总结

安装的过程虽然繁琐,但是过程中间出现的问题,都需要我们好好想想怎么解决,这在我们学习过程中都是不错的经验,还有shell脚本的编写,不断的练习,总是会让我总结经验的,不断的积累,才是茁壮成长的表现。