一、实验目的

该实验是基于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脚本的编写,不断的练习,总是会让我总结经验的,不断的积累,才是茁壮成长的表现。

https://blog.51cto.com/eyessay/1341366