1. 下载
从ftp://vsftpd.beasts.org/users/cevans/下载。
2. 编译和安装
进入vsftpd-2.3.2,编译
[forrest@host vsftpd-2.3.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 -Wl,-s `./vsf_findlibs.sh`
/lib/libpam.so.0: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [vsftpd] Error 1
google了一下,是因为上面的vsf_findlibs.sh脚本是按照32位系统来寻找lib包的,所以路径可能错误。需要手工修正。
已解决。
I also hit this - the problem is that the lib-finding script vsf_findlibs.sh returns e.g. /lib/libpam.so.0; however if you're on a x86_64 machine, for example, you need /lib64/libpam.so.0. Fixing this up sorted things out for me.
奇怪的是64位系统上居然有两个lib,而且都有内容:
[forrest@host ~]$ ll / | grep lib
drwxr-xr-x 11 root root 4096 Sep 2 04:06 lib
drwxr-xr-x 7 root root 4096 Sep 2 04:07 lib64
[forrest@host ~]$ ll /lib64/ | grep libpam
lrwxrwxrwx 1 root root 17 Mar 8 2010 libpamc.so.0 -> libpamc.so.0.81.0
-rwxr-xr-x 1 root root 11264 Jun 18 2009 libpamc.so.0.81.0
lrwxrwxrwx 1 root root 21 Mar 8 2010 libpam_misc.so.0 -> libpam_misc.so.0.81.2
-rwxr-xr-x 1 root root 13456 Jun 18 2009 libpam_misc.so.0.81.2
lrwxrwxrwx 1 root root 16 Mar 8 2010 libpam.so.0 -> libpam.so.0.81.5
-rwxr-xr-x 1 root root 46800 Jun 18 2009 libpam.so.0.81.5
[forrest@host ~]$ ll /lib/ | grep libpam
lrwxrwxrwx 1 root root 17 Mar 8 2010 libpamc.so.0 -> libpamc.so.0.81.0
-rwxr-xr-x 1 root root 9868 Jun 18 2009 libpamc.so.0.81.0
lrwxrwxrwx 1 root root 21 Mar 8 2010 libpam_misc.so.0 -> libpam_misc.so.0.81.2
-rwxr-xr-x 1 root root 8588 Jun 18 2009 libpam_misc.so.0.81.2
lrwxrwxrwx 1 root root 16 Mar 8 2010 libpam.so.0 -> libpam.so.0.81.5
-rwxr-xr-x 1 root root 43020 Jun 18 2009 libpam.so.0.81.5
[forrest@host usr]$ cd /usr
[forrest@host usr]$ ll | grep lib
drwxr-xr-x 83 root root 69632 Sep 2 04:07 lib
drwxr-xr-x 92 root root 69632 Sep 2 04:08 lib64
drwxr-xr-x 11 root root 4096 Sep 7 20:21 libexec
[forrest@host usr]$
Anyway,修改vi vsf_findlibs.sh,将这一行:locate_library /lib/libpam.so.0 && echo "/lib/libpam.so.0";修改为
locate_library /lib64/libpam.so.0 && echo "/lib64/libpam.so.0";
直接跑这个脚本验证一下是不是找对了:
[forrest@host vsftpd-2.3.2]$ ./vsf_findlibs.sh
/lib64/libpam.so.0
-lpam
-ldl
-lnsl
-lresolv
-lutil
/lib/libcap.so.1
再次编译:
[forrest@host vsftpd-2.3.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 -Wl,-s `./vsf_findlibs.sh`
/lib/libcap.so.1: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [vsftpd] Error 1
[forrest@host vsftpd-2.3.2]$
类似的问题,如上解决。然后再次编译,done!
[forrest@host vsftpd-2.3.2]$ make
[forrest@host vsftpd-2.3.2]$ sudo 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 \
install -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd; fi
[forrest@host vsftpd-2.3.2]$ sudo cp vsftpd.conf /etc
|
在make install后,一定不要忘记手工将vsftpd.conf文件cp到/etc目录下,否则会找不到这个配置文件的,这个是vsftpd一个非常恶心的地方。 否则运行时候会报如下错误:
[forrest@host usr]$ sudo /usr/local/sbin/vsftpd
Password:
500 OOPS: vsftpd: not configured for standalone, must be started from inetd
这是因为是否以standalone形式运行,取决于vsftpd.conf文件中的listen配置。
# When "listen" directive is enabled, vsftpd runs in standalone mode and # listens on IPv4 sockets. This directive cannot be used in conjunction # with the listen_ipv6 directive. listen=YES
同样如果你要支持本地用户登录,那么需要copy源码目录下的vsftpd.pam文件
复制pam验证文件:(多数使用vsftpd的用户在用源代码安装后都会遇到这样的问题:匿名用户可以登录,而本地用户无论怎样设置都无法登录,原因就在于vsftpd采用了PAM验证的方式,需要复制一个验证文件本地用户才能访问。)
[forrest@host vsftpd-2.3.2]$ find . | grep vsftpd.pam
./EXAMPLE/VIRTUAL_USERS/vsftpd.pam
./RedHat/vsftpd.pam
[forrest@host vsftpd-2.3.2]$ sudo cp RedHat/vsftpd.pam /etc/pam.d/ftp
|
cp后再次运行上面命令,报如下错误:
[forrest@host xinetd.d]$ sudo /usr/local/sbin/vsftpd
500 OOPS: could not bind listening IPv4 socket
google搜了一下,这是因为同时指定了xinetd(或者老的inetd)和standalone两种运行方式,端口冲突了。删除/etc/xinetd.d/vsftpd这个文件;然后重新启动xinetd服务器,就可以了。
[forrest@host var]$ netstat -ant | grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
[forrest@host xinetd.d]$ cd /etc/xinetd.d/
[forrest@host xinetd.d]$ ls | grep vsftpd
vsftpd
[forrest@host xinetd.d]$ cat vsftpd
# default: on
# description:
# The vsftpd FTP server serves FTP connections. It uses
# normal, unencrypted usernames and passwords for authentication.
# vsftpd is designed to be secure.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
# server_args =
# log_on_success += DURATION USERID
# log_on_failure += USERID
nice = 10
disable = no
}
[forrest@host xinetd.d]$ sudo rm vsftpd
[forrest@host xinetd.d]$ sudo /etc/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
[forrest@host xinetd.d]$ sudo /usr/local/sbin/vsftpd &
## Test
forrest@ubuntu:~$ ftp 10.249.167.161
Connected to 10.249.167.161.
220 (vsFTPd 2.3.2)
Name (10.249.167.161:forrest): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
|
vsFTPd运行有两种模式,standalone方式和xinetd(inetd)模式。可以在initd.d目录下编写一个启动脚本,这样服务器起来的时候就可以自动运行standalone方式。
|
3. 配置
sftpd服务器的配置文件为/etc/vsftpd.conf。事实上简单的使用vsftp,并不需要什么配置的,目前我们关系的两项就是:
listen=YES
anonymous_enable=YES
其他常用的vsftpd的配置项如下:
1.禁止匿名用户访问。
anonymous_enable=NO
2.允许本地用户登录并允许其上传文件。
local_enable=YES
write_enable=YES
要使上述选项生效,必须复制一个pam验证文件到/etc/pam.d,并改名为ftp。当然也可以改为其他名称,但必须修改pam_service_name的值,默认为ftp。
3.将本地用户锁定在主目录中,不允许切换到上一级目录中。
chroot_local_user=YES
4.禁止某些用户通过ftp登录服务器。
如果设置了local_enable=YES,那么所有的用户包括root也能通过ftp登录服务器,出于安全考虑,需要对某些用户进行限制。
在vsftpd.conf中有三个选项控制:
userlist_deny=YES/NO
userlist_enalbe=YES
userlist_file=/etc/vsftpd.user_list
4. 体验一下吧
现在让我们上传一些文件,然后登录看看能不能浏览和下载吧。
Radhat另一个恶心的地方是安装后生成了ftp:ftp用户和用户组,却没有生成ftp用户根目录/var/ftp。因此你需要自己创建一个:
[forrest@host ebooks]$ grep ftp /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
这个显示ftp用户的根目录为/var/ftp。
[forrest@host ebooks]$ groups ftp
ftp : ftp
[forrest@host ebooks]$ sudo mkdir /var/ftp
进入该目录放几个文件,然后用浏览器登录试一下,应该可以正常浏览和下载:
[forrest@host init.d]$ cd /var/ftp/
[forrest@host ftp]$ ll
total 8
drwxr-xr-x 2 root root 4096 Sep 19 17:39 ebooks
-rw-r--r-- 1 root root 13 Sep 19 17:26 helloworld.txt
|
500 OOPS: vsftpd: refusing to run with writable anonymous root 如果我们已经把vsftpd服务器启动好了,但登录测试是会出现类似下面的提示: 500 OOPS: vsftpd: refusing to run with writable anonymous root 这表示ftp用户的根目录的权限不对,应该改过才对:
[forrest@host ebooks]$ grep ftp /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
我们发现ftp用户的根目录在/var/ftp,就是这个/var/ftp的权限不对所致,这个目录的权限是不能打开所有权限的(如果没有ftp用户这个家目录,当然您要自己建一个) 修正这个错误,应该用下面的办法:
[forrest@host ebooks]$ sudo chown root:root /var/ftp
[forrest@host ebooks]$ sudo chmod 755 /var/ftp
有的弟兄可能会说,那匿名用户的可读、可下载、可上传怎么办呢?这也简单,在/var/ftp下再建一个目录,权限是777的就行了,再改一改vsftpd.conf就OK了。没有什么难的。
vsftpd出于安全考虑,是不准让ftp用户的家目录的权限是完全没有限制的,您可以去读一下vsftpd的文档就明白的了。否则也不能称为最安全的FTP服务器了,对不对?
|
|
使用发行版提供的软件来安装
[forrest@host ~]$ sudo yum install vsftpd
Password:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
addons | 951 B 00:00
base | 2.1 kB 00:00
extras | 2.1 kB 00:00
updates | 1.9 kB 00:00
updates/primary_db | 661 kB 00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package vsftpd.x86_64 0:2.0.5-16.el5_5.1 set to be updated
updates/filelists_db | 2.1 MB 00:00
--> Finished Dependency Resolution
Dependencies Resolved
============================================================================================================================================================================
Package Arch Version Repository Size
============================================================================================================================================================================
Installing:
vsftpd x86_64 2.0.5-16.el5_5.1 updates 139 k
Transaction Summary
============================================================================================================================================================================
Install 1 Package(s)
Upgrade 0 Package(s)
forrest@ubuntu:/etc$ sudo apt-get install vsftpd
sudo: unable to resolve host ubuntu
[sudo] password for forrest:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libparted0
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
vsftpd
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 148kB of archives.
After this operation, 492kB of additional disk space will be used.
Get:1 http:Fetched 148kB in 0s (222kB/s)
Preconfiguring packages ...
Selecting previously deselected package vsftpd.
(Reading database ... 218180 files and directories currently installed.)
Unpacking vsftpd (from .../vsftpd_2.2.2-3ubuntu7.1_amd64.deb) ...
Processing triggers for man-db ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Setting up vsftpd (2.2.2-3ubuntu7.1) ...
Adding user ftp to group ftp
vsftpd start/running, process 15835
可以看到非常方便,自动识别出我们的就是64位环境。不需要我们修改编译脚本。不过就是版本稍微老了些。
|
分享到:
相关推荐
一 vsftpd搭建步骤 1、首先安装vsftpd,并设置开机启动 yum -y install vsftpd chkconfig vsftpd on 2、基于虚拟用户配置,(所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的。虚拟...
安装vsftpd搭建ftp服务器
由于服务器的CentOS 7,用windows无法远程(其实可以的,但是好麻烦,而且可视化界面也很卡,所以还是命令行好用,再且,远程以后不能像远程windows系列服务器一样直接把文件拖过去就好),所以更新...于是果断搭建ftp。
contos中利用vsftpd搭建ftp服务器
vsftpd搭建ftp服务器 centos7.5,自己踩坑安装了,写下文档供大家下载学习,分数只是为了自己下载东西,内含vsftp安装包。不通用户有自己的用户目录。
日志需要带有三个参数 如下,为定时任务写法"01 00 * * * (cd ~/sh/ && ./CutVsftpdLog 1 /var/log/vsftpd.log /home/ftp/bak)" 第一个参数默认是1,代表一天一切割,第二个参数是ftp日志所在位置,第三个为日志备份...
Linux下vsFTPD实战方案
自己动手实验,模拟生产环境,涉及到磁盘配额,系统分区,文件系统知识!
vsftpd nginx搭建上传ftp服务,一起学习,一起进步
Ubuntu 10.04 搭建vsftpd 2.2.2
centos7搭建vsftpd教程
亲自动手做了一套centos6.5环境下搭建ftp服务器(vsftpd)的教程,教程中肯定还有需要改进的地方,但是能达到需求,恭候各位大牛的指点
包含的 Logstash 配置文件需要消息字段中的 vsftpd 日志数据,当您使用 Logstash 的syslog输入接收 vsftpd 日志记录时,这是开箱即用的。 测试 在test/目录中,有一个测试套件试图确保以前支持的日志行不会因为...
Linux环境下vsftpd服务器的搭建
安装vsftpd,搭建ftp服务器过程中碰到的问题
资源名称:vsftpd的搭建资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
最近需要在一台阿里云的云服务器上搭建FTP服务器,在这篇博文中分享一下我们根据实际需求进行的一些配置。 ftp软件用的是vsftpd。 vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用...
vsftpd + ssl 搭建加密传输的安全FTP服务器
本人亲手在red hat linux上配置ftp成功后写的安装文档, 并有安装过程中各种问题的解决方案!
centos el7上的vsftpd v3.0.5版本的rpm安装包 1)如果运行了vsftpd,则先停止: systemctl stop vsftpd 2)安装或升级vsftpd: rpm -Uvh vsftpd-3.0.5-1.el7.x86_64.rpm rpm -Uvh vsftpd-sysvinit-3.0.5-1.el7.x86_...