CenOS6.0 源码安装vsftpd 配置虚拟用户

来源:互联网 发布:搞基漫画软件 编辑:程序博客网 时间:2024/05/29 03:36

#先做些准备工作

#查看安装vsftpd需要的基本组件是否安装

 

#虚拟用户生成密码时需要组件

rpm –qa | grep db4

#虚拟用户需要使用的组件

rpm –qa | grep pam-devel

#编译安装时需要使用的组件    

rpm –qa | grep gcc

#支持tcp_wrappers使用的组件

rpm –qa | grep tcp_wrappers

#ftp客户端测试时使用

rpm –qa | grep ftp

 

 

#安装前,如果已经安装则不需要安装

QQ截图20111221110751

 

#通过yum安装

yum install pam-devel

yum install gcc

yum install tcp_wr*

yum install ftp

#或批量安装,自动确认。

yum install pam-devel gcc tcp_wr* ftp -y

#安装完所需软件

QQ截图20111221113506

 

#建立所需的目录

#解压之前存放的路径

mkdir –p /data/software

#存放vsftpd的主文件

mkdir –p /usr/local/vsftpd/sbin

#存放vsftpd的配置文件

mkdir /usr/local/vsftpd/etc

#vsftd所需的特殊目录

mkdir /usr/local/vsftpd/empty

chmod 555 /usr/local/vsftpd/empty

#建立ftp目录

mkdir /data/ftp

#建立日志目录

mkdir –p /data/log/vsftpd/

#创建日志文件

touch /data/log/vsftpd/vsftpd.log

 

#建立所需的用户

useradd –M vsftp –d /data/ftp –s /sbin/nologin

 

 

备注:要确认系统存在nobody用户,如果没有需要添加

cat /etc/passwd | grep ^nobody

#nobody 用户配置

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

 

 

#下载vsftpd

#下载链接获取,vsftpd官方网站。

#https://security.appspot.com/vsftpd.html#download

vsf_thumb1

#貌似被墙了,用代理上吧。

QQ20111219143253_thumb1

#如果被墙了,用代理下载完,通过SSH传到主机里吧。

 

#备注

#2.3.5版本有bug..把文件名改成2.3.4下载,bug困扰我好长时间。。。

 

#解压缩文件

tar –zxvf /data/software/vsftpd-2.3.5.tar.gz –C /usr/local/src/

QQ20111220104038_thumb3

 

#进入解压缩的目录

cd /usr/local/src/vsftpd-2.3.5

#查看README

cat README

#软件自身介绍,如果安装查看INSTALL,可以通过man 5 vsftpd.conf查看配置帮助,示例文件在EXAMPLE目录下。

 

#查看安装说明

cat INSTALL

#此文件说明如何安装vsftpd

 

#首先编辑builddefs.h

vi builddefs.h

QQ截图20111221112958

#支持tcpwrappers,和pam

 

#编译,如果没有错误就说明更新成功

make

 

#安装,实际复制几个文件就OK了

cp vsftpd /usr/local/vsftpd/sbin/

cp vsftpd.conf /usr/local/vsftpd/etc/

 

 

#配置vsftpd

vi /usr/local/vsftpd/etc/vsftpd.conf

#日志保存路径

xferlog_file=/data/log/vsftpd/vsftpd.log

#标准日志格式

xferlog_std_format=YES

#ftp 欢迎语

ftpd_banner=Welcome to blah FTP service.

#独立监听

listen=YES

 

#匿名用户为vsftp

ftp_username=vsftp

#空目录

secure_chroot_dir=/usr/local/vsftpd/empty

 

#建立测试目录

mkdir /data/ftp/test

#启动服务

/usr/local/vsftpd/sbin/vsftpd /usr/local/vsftpd/etc/vsftpd.conf &

#测试连接

ftp 127.0.0.1

#用户名 anonymous

#密码为空

 

#显示列表

dir

 

QQ截图20111221145416

#ftp 成功登陆,下面开始配置虚拟用户。

 

#创建密码库

vi /usr/local/vsftpd/etc/login

test1

123

test2

123

#创建两个用户,test1,test2,密码为123

#奇数为用户名,偶数为密码。

 

#更改文件权限

chmod 600 /usr/local/vsftpd/etc/login

 

#生成密码库

db_load -T -t hash -f /usr/local/vsftpd/etc/login /usr/local/vsftpd/etc/login.db

chmod 600 /usr/local/vsftpd/etc/login.db

 

#复制认证文件

cp /usr/local/src/vsftpd-2.3.5/EXAMPLE/VIRTUAL_USERS/vsftpd.pam /etc/pam.d/vsftpd

 

#修改文件内容

vi /etc/pam.d/vsftpd
auth required /lib/security/pam_userdb.so db=/usr/local/vsftpd/etc/login
account required /lib/security/pam_userdb.so db=/usr/local/vsftpd/etc/login

 

#创建虚拟用户配置目录

mkdir /usr/local/vsftpd/etc/user_config

 

#编辑配置文件

vi /usr/local/vsftpd/etc/vsftpd.conf

#禁止匿名登录

anonymous_enable=NO

#开启本地登录

local_enable=YES

#开启写权限,如果此权限不开,anon_mkdir_write_enable设置会无效。

write_enable=YES

#开启虚拟用户

guest_enable=YES

#虚拟用户

guest_username=vsftp

#pam

pam_service_name=vsftpd

#虚拟用户权限配置目录

user_config_dir=/usr/local/vsftpd/etc/user_config

#被动模式端口

pasv_max_port=60050
pasv_min_port=60000

 

#具体配置如下

cat /usr/local/vsftpd/etc/vsftpd.conf | grep ^# -v

QQ截图20111224194012

 

 

#更改目录所属者,否则不能创建文件等

chown vsftp:vsftp /data/ftp

 

#建立test1用户

mkdir /data/ftp/test1

chown vsftp:vsftp /data/ftp/test1

 

#建立和用户名相同的文件

vi /usr/local/vsftpd/etc/user_config/test1

#是否禁止浏览目录,默认是
anon_world_readable_only=NO
#是否允许创建文件夹,但不能阻止用户上传文件夹
anon_mkdir_write_enable=YES
#是否允许上传文件及文件夹
anon_upload_enable=YES
#是否允许用户修改,删除文件和文件夹
anon_other_write_enable=YES
#主目录
local_root=/data/ftp/test1

 

 

#kill掉进程

#重启服务即可

/usr/local/vsftpd/sbin/vsftpd /usr/local/vsftpd/etc/vsftpd.conf &

 

#测试

QQ截图20111222171738

 

 

#开机启动

echo '/usr/local/vsftpd/sbin/vsftpd /usr/local/vsftpd/etc/vsftpd.conf &' >> /etc/rc.local

 

 

#更改监听端口,IP访问限制

 

#监听端口

listen_port=自定义其他端口

#开启tcp_wrappers

vi /usr/local/vsftpd/etc/vsftpd.conf

tcp_wrappers=YES

 

#开启192.168.0.1网段允许访问

echo 'vsftpd:192.168.0.*:allow' >> /etc/hosts.allow

#阻止所有用户

echo 'vsftpd:all:deny' >> /etc/hosts.deny

#hosts.allow和hosts.deny发生冲突时以host.allow为准。

 

#开启iptables

/sbin/iptables -A INPUT -p tcp --dport 60000:60050 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT

 

#卸载程序

rm –rf /usr/local/vsftpd

rm –r /etc/pam.d/vsftpd

#删除开机启动,删除对应行

vi /etc/rc.local

#删除IP限制,对应行

vi /etc/host.allow

vi /etc/host.deny

#日志及数据根据自己的情况是否删除



安装过程中可能出现问题:


Make的时候报错:

安装vsftpd 报告错误 undefined reference to `crypt'

gcc -c access.c -lcrypt -O2 -Wall -W -Wshadow  -idirafter dummyinc 
gcc -c features.c -lcrypt -O2 -Wall -W -Wshadow  -idirafter dummyinc 
gcc -c readwrite.c -lcrypt -O2 -Wall -W -Wshadow  -idirafter dummyinc 
gcc -c opts.c -lcrypt -O2 -Wall -W -Wshadow  -idirafter dummyinc 
gcc -c ssl.c -lcrypt -O2 -Wall -W -Wshadow  -idirafter dummyinc 
gcc -c sslslave.c -lcrypt -O2 -Wall -W -Wshadow  -idirafter dummyinc 
gcc -c ptracesandbox.c -lcrypt -O2 -Wall -W -Wshadow  -idirafter dummyinc 
gcc -c ftppolicy.c -lcrypt -O2 -Wall -W -Wshadow  -idirafter dummyinc 
gcc -c sysutil.c -lcrypt -O2 -Wall -W -Wshadow  -idirafter dummyinc 
gcc -c sysdeputil.c -lcrypt -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 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` 
sysdeputil.o: In function `vsf_sysdep_check_auth':
sysdeputil.c:(.text+0xf1): undefined reference to `crypt'
sysdeputil.c:(.text+0x122): undefined reference to `crypt'


解决方法:

打开Makefile

vim Makefile

LIBS    =       `./vsf_findlibs.sh`

末尾增加 -lcrypt 变成

LIBS    =       `./vsf_findlibs.sh` -lcrypt

http://stackoverflow.com/questions/12884229/gcc-lcrypt-flag-error-in-unix-c-undefined-reference-to-crypt


http://blog.tianya.cn/blogger/post_show.asp?BlogID=2432412&PostID=19956088


转载:http://www.cnblogs.com/madehua/archive/2011/12/22/2298065.html