本文介绍 vsftpd-2.0.5 源代码编译安装及PAM的使用,供大家学习参考。
安装前的清理与准备工作:
复制代码 代码如下:
[root@AS4 ~]# rpm -qa | grep vsftpd
vsftpd-2.0.1-5.EL4.3
[root@AS4 ~]# rpm -e vsftpd-2.0.1-5.EL4.3 ---先删除原来的版本
[root@AS4 src]# pwd
/usr/src
[root@AS4 src]# ls
kernels
redhat vsftpd-2.0.5.tar.gz ----下载的源代码文件
一、解压:
复制代码 代码如下:
[root@AS4 src]# tar xvzf vsftpd-2.0.5.tar.gz ---解压下载的源文件
vsftpd-2.0.5/
vsftpd-2.0.5/oneprocess.h
vsftpd-2.0.5/ipaddrparse.h
……
vsftpd-2.0.5/BENCHMARKS
vsftpd-2.0.5/features.h
二、查看安装说明,作好相应的准备工作:
[root@AS4 src]# cd vsftpd-2.0.5
[root@AS4 vsftpd-2.0.5]# more INSTALL ---查看安装帮助文件
INSTALL
省略
创建必要的帐号和目录:
复制代码 代码如下:
[root@AS4 ~]# useradd nobody
useradd: user nobody exists
[root@AS4 ~]# mkdir /usr/share/empty
mkdir: cannot create directory `/usr/share/empty': File exists
[root@AS4 ~]# mkdir /var/ftp
mkdir: cannot create directory `/var/ftp': File exists
[root@AS4 ~]# useradd -d /var/ftp ftp
useradd: user ftp exists
[root@AS4 ~]# chown root:root /var/ftp
[root@AS4 ~]# chmod og-w /var/ftp
三、编译和安装
1、根据说明文档,首先要编辑一下 builddefs.h 文件。
我们来看看他默认的选项都有什么,然后把需要的功能前面的undef 改成define,然后编译就可以用了。
[root@AS4 vsftpd-2.0.5]# cat 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 */
我们通过上面代码我们可以看到,ftp验证是通过pam方式来验证的,这是一种虚拟用户登录ftp的验证方式。
这是vsftpd的一个安全的手段,通过pam方式,本地用户是没有办法登录到ftp上(但匿名ftp是能登录),这在事实上增强了系统的安全。
2、编译安装:
复制代码 代码如下:
[root@AS4 vsftpd-2.0.5]# make;make install
gcc -c main.c -O2 -Wall -W -Wshadow -idirafter dummyinc
……
gcc -o vsftpd main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o tunables.o ftpdataio.o ……
ipaddrparse.o access.o features.o readwrite.o ssl.o sysutil.o sysdeputil.o -Wl,-s `./vsf_findlibs.sh`
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 /etc/xinetd.d ]; then
install -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd; fi
3、验证结果
1)查看一下make install将make编译好的二进制文件安装到了那个目录。
[root@AS4 ~]# which vsftpd
/usr/local/sbin/vsftpd
2)查看一下vsftpd的依赖库(如果您发现vsftpd所依赖的库有libpam的行,这说明您所编译的还是通过pam验证登录。)
复制代码 代码如下:
[root@AS4 vsftpd-2.0.5]# ldd vsftpd
libwrap.so.0 => /usr/lib/libwrap.so.0 (0x03db6000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00175000)
libpam.so.0 => /lib/libpam.so.0 (0x00b4b000) ----通过PAM进行验证
libdl.so.2 => /lib/libdl.so.2 (0x0088f000)
libresolv.so.2 => /lib/libresolv.so.2 (0x009dd000)
libutil.so.1 => /lib/libutil.so.1 (0x003b9000)
libcap.so.1 => /lib/libcap.so.1 (0x00111000)
libc.so.6 => /lib/tls/libc.so.6 (0x00763000)
libaudit.so.0 => /lib/libaudit.so.0 (0x00b6c000)
/lib/ld-
linux.so.2 (0x0074a000)
4、复制一些文件过去
复制代码 代码如下:
[root@AS4 vsftpd-2.0.5]# cp vsftpd.conf /etc
[root@AS4 vsftpd-2.0.5]# cp vsftpd /usr/sbin
[root@AS4 vsftpd-2.0.5]# cp RedHat/vsftpd.pam /etc/pam.d/ftp ----用于pam认证的文件
四、配置/etc/vsftpd.conf
[root@AS4 vsftpd-2.0.5]# cp /etc/vsftpd.conf /etc/vsftpd.confBAK
在最后一行添加
listen=YES
listen_port=21
使服务器可以独立运行
复制代码 代码如下:
[root@AS4 vsftpd-2.0.5]# /usr/local/sbin/vsftpd & ---服务
后台运行并将控制台交还我们
[1] 3170 ----可把这一句写到/etc/rc.local文件中。
[root@AS4 vsftpd-2.0.5]# netstat -tnl | grep :21 ----可见已开始在21端口进行侦听
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
五、测试
复制代码 代码如下:
[root@AS4 ~]# ftp localhost
Connected to AS4.SKY.COM.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root):anonymous ---匿名登录
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,132,192)
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Apr 09 09:15 pub
-rw-r--r-- 1 0 0 7 Apr 09 09:15 t1.txt
-rw-r--r-- 1 0 0 7 Apr 09 09:15 t2.txt
226 Directory send OK.
ftp> bye
221 Goodbye.
六、创建虚拟帐号
由于ftp采用在网上以明文方式传送用户名和口令,这样帐号容易被窃取。为了防止因帐号的原因导致FTP服务器本身受到安全威胁,我们可以建立虚拟用户进行登录访问。
1、建立虚拟帐号
复制代码 代码如下:
[root@AS4 ~]# vi /home/vuser.txt
jack
123
bob
123
[root@AS4 ~]# id jack
id: jack: No such user ---可见系统中无此用户,其为虚拟用户
[root@AS4 ~]# id bob
id: bob: No such user
2、为虚拟用户建立数据库文件
复制代码 代码如下:
[root@AS4 ~]# db_load -T -t hash -f /home/vuser.txt /etc/vsftpd_login.db
[root@AS4 ~]# chmod 600 /etc/vsftpd_login.db
3、修改/etc/pam.d/ftp文件
禁掉原文件中所有行,添加以下两行:
auth required pam_userdb.so db=/etc/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd_login
4、为虚拟用户创建映射帐号和登录主目录
[root@AS4 ~]# useradd vuser -----创建帐号同时自动在/home下创建vuser目录
[root@AS4 ~]# cp /etc/group /home/vuser ---拷一个文件进入这个目录
5、修改配置文件
[root@AS4 ~]# vi /etc/vsftpd.conf
复制代码 代码如下:
# Example config file /etc/vsftpd.conf
……
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO ----禁止与匿名相关的所有项
#
# Uncomment this to allow local users to log in.
local_enable=YES
write_enable=NO
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
……省略部分全部默认……
#ls_recurse_enable=YES
guest_enable=YES ----添加此行
guest_username=vuser ----添加此行
listen=YES
6、测试
复制代码 代码如下:
[root@AS4 ~]# ftp localhost
Connected to AS4.SKY.COM.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
Login failed. ---匿名登录失败
ftp> use
(username) jack ---虚拟用户登录
331 Please specify the password.
Password:
230 Login successful. ---登录成功
ftp> ls
227 Entering Passive Mode (127,0,0,1,226,167)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory). ----看不到文件列表,因虚拟用户进入后并没有vuser的全部权限,实际上还是匿名用户权限
ftp> get .bashrc ----测试一下可否下载
local: .bashrc remote: .bashrc
227 Entering Passive Mode (127,0,0,1,60,181)
150 Opening BINARY mode data connection for .bashrc (124 bytes).
WARNING! 8 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 File send OK. ----可以下载
124 bytes received in 0.005 seconds (24 Kbytes/s)
7、让虚拟用户可以看到文件列表
[root@AS4 ~]# ls -ld /home/vuser
drwx------ 3 vuser vuser 4096 Apr 10 19:54 /home/vuser ------其它用户和组没有权限
[root@AS4 ~]# chmod o+r /home/vuser
[root@AS4 ~]# cp /etc/group /home/vuser
8、再进行测试
复制代码 代码如下:
[root@AS4 ~]# ftp localhost
Connected to AS4.SKY.COM.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): jack
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,122,110)
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 710 Apr 10 12:22 group ----看到文件列表了
226 Directory send OK.
ftp> bye
221 Goodbye.
9、在Windows客户端进行访问
1)打开浏览器,输入ftp://10.0.0.254,并按要求输入用户名和口令。
本文由 脚本学堂 搜集整理。