当前位置: 代码迷 >> 综合 >> linux centos6.5源码编译安装vsftp服务器端
  详细解决方案

linux centos6.5源码编译安装vsftp服务器端

热度:69   发布时间:2023-09-20 09:32:51.0

1、下载vsftpd,可以从官网(http://vsftpd.beasts.org)下载,也可以百度搜索

[root@localhost vsftpd]# wget http://down1.chinaunix.net/distfiles/vsftpd-3.0.2.tar.gz(此地址不能使用)

2、解压压缩包并进入解压出来的目录 安装在192.168.125.128上

[root@localhost vsftpd]# tar -zxvf vsftpd-3.0.2.tar.gz(解压后属于1000用户)
[root@localhost vsftpd]# cd vsftpd-3.0.2/

3、查看INSTALL文件

INSTALL文件中记录了创建、安装、运行vsftp的详细方法,主要包括以下7个步骤:

 

步骤一、编译vsftpd:

 

1a、进入vsftpd解压目录

         编辑“builddefs.h”,内容如下:

#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */

        (c文件不需要打开注释)将以上undef的都改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL

1b、输入“make”生成二进制安装程序:

        执行make时出现以下错误

tcpwrap.c:16:20: 致命错误:tcpd.h:没有那个文件或目录#include <tcpd.h>                    ^
编译中断。
make: *** [tcpwrap.o] 错误 1

        解决方法:

yum install tcp_wrappers
yum install tcp_wrappers-devel

        再次执行make时又出现以下错误:

ssl.c:28:25: 致命错误:openssl/err.h:没有那个文件或目录#include <openssl/err.h>

        解决方法:

yum install openssl*

        再次执行make时又出现以下错误:

/usr/bin/ld: cannot find -lcap
collect2: 错误:ld 返回 1
make: *** [vsftpd] 错误 1

        解决方法:

yum install libcap-devel

        最后执行make成功,结果如下:

[root@localhost vsftpd-3.0.2]# make
gcc -o vsftpd main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o tunables.o ftpdataio.o secbuf.o ls.o postprivparent.o logging.o str.o netstr.o sysstr.o strlist.o banner.o filestr.o parseconf.o secutil.o ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o ssl.o sslslave.o ptracesandbox.o ftppolicy.o sysutil.o sysdeputil.o seccompsandbox.o -Wl,-s -fPIE -pie -Wl,-z,relro -Wl,-z,now `./vsf_findlibs.sh`

1c、测试编译结果:

[root@localhost vsftpd-3.0.2]# ls -l vsftpd
-rwxr-xr-x. 1 root root 151832 3月   4 14:49 vsftpd

 

步骤二:满足vsftpd先决条件

 

2a、vsftp缺省配置需要“nobody”用户,如果系统中没有就先创建(system default have create this useraccount)

[root@localhost vsftpd-3.0.2]# useradd nobody
useradd:用户“nobody”已存在

2b、vsftpd缺省配置需要目录“/usr/share/empty”,没有该目录的话就创建一个(system default have create this directory)

[root@localhost vsftpd-3.0.2]# ls /usr/share |grep empty
empty

        这里显示目录已经存在

3c、匿名文件传输协议(anonymous FTP)需要创建用户“ftp”,创建一个主目录(属主不能是用户ftp,且用户ftp不可写)

[wj@localhost vsftpd-3.0.3]# sudo mkdir /var/ftp
[wj@localhost vsftpd-3.0.3]# sudo useradd -d /var/ftp ftp
useradd:用户“ftp”已存在

        用户ftp已存在,转至下面的命令(更改ftp目录的属主、数组及权限):

[root@localhost vsftpd-3.0.2]# chown root.root /var/ftp
[root@localhost vsftpd-3.0.2]# chmod og-w /var/ftp

        修改后ftp目录权限如下:

[root@localhost vsftpd-3.0.2]# ls -l /var/ |grep ftp
drwxr-xr-x.  2 root root    6 3月   4 16:31 ftp

 

步骤三:安装vsftpd配置文件

 

3a、运行“make install”

[root@REHL vsftpd-3.0.2]# make install
if [ -x /usr/local/sbin ]; then         install -m 755 vsftpd /usr/local/sbin/vsftpd;     else         install -m 755 vsftpd /usr/sbin/vsftpd; fi
if [ -x /usr/local/man ]; then         install -m 644 vsftpd.8 /usr/local/man/man8/vsftpd.8;         install -m 644 vsftpd.conf.5 /usr/local/man/man5/vsftpd.conf.5;     elif [ -x /usr/share/man ]; then         install -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8;         install -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5;     else         install -m 644 vsftpd.8 /usr/man/man8/vsftpd.8;         install -m 644 vsftpd.conf.5 /usr/man/man5/vsftpd.conf.5; fi
if [ -x /etc/xinetd.d ]; then         ins先tall -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd; fi

 执行make install时报错:install: cannot create regular file `/usr/local/man/man8/vsftpd.8': No such file or directory 

解决方法:先将vsftp目录改为root.root权限[root@localhost vsftpd-3.0.3]# mkdir -p /usr/local/man/man5  /usr/local/man/man8

再次编译正确安装    

将配置样例拷贝到etc目录下

[root@REHL vsftpd-3.0.2]# cp vsftpd.conf /etc/

 

步骤四:冒烟测试

4a、编辑/etc/vsftpd.conf,在底部增加“listen=YES”(作用是让vsftpd不从inetd启动)

4b、以root权限登录,确保没有运行其他FTP服务(否则vsftpd不能使用ftp端口21)

        运行vsftpd二进制程序

[root@localhost root]#/usr/local/sbin/vsftpd &
[1] 2104

4c、关闭防火墙

[root@REHL soft]# service iptables stop
iptables:清除防火墙规则:                                 [确定]
iptables:将链设置为政策 ACCEPT:filter                    [确定]
iptables:正在卸载模块:                                   [确定]

4d、随便复制几个文件到“/var/ftp”目录下

4e、连接FTP

[root@REHL ftp]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (localhost:zcl): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

        Password处直接敲回车登录

4f、查看ftp文件

ftp> ls -l
227 Entering Passive Mode (127,0,0,1,183,34).
150 Here comes the directory listing.
-r--r--r--    1 0        0           58300 Mar 07 01:24 ftp-0.17-51.1.el6.x86_64.rpm
-rw-r--r--    1 0        0          192808&nbs

注意点:源码编译安装/usr/local/sbin/vsftpd &默认读取配置文件为/etc/vsftpd.conf 将配置文件中的anoymous匿名登录注掉,添加userlist_enable=yes userlist_deny=no在/etc目录下添加文件vsftpd.user_list在这个文件中只添加用户名,不需要密码,filezilla登录后直接进到该用户home目录,如果将userlist文件放在/etc/vsftpd目录中,用filezilla连接时会报错,并有提示响应:    500 OOPS: cannot read user list file:/etc/vsftpd.user_list

启动:/usr/local/sbin/vsftpd /etc/vsftpd.conf &

停止:kill-9 pid