此苹果非彼苹果
« »

CentOS5.5下安装vsftp,配置虚拟用户登陆成功

linux上配置过好多次vsftp了,因为不常弄,有时候还是会遇到以前遇到过的问题。以前记的笔记也比较零散,遇到的问题总结的不全面。这次再综合总结一次。

下载当前vsftp最新版本

# wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.3.2.tar.gz

解压

# tar zxvf  vsftpd-2.3.2.tar.gz

进到目录中

# cd vsftpd-2.3.2

开始安装

# make

这时候遇到第一个问题,没有记录错误内容,提示的是make失败,gcc编译器没有安装。知道会有这么多问题,因为安装CentOS的时候,我在文本模式下只安装了base里最基本的核心程序。

那么用yum命令安装一下gcc吧。

# yum install gcc

后面一堆过程提示略过…

最后提示安装完成。

如果刚才yum命令都用不了,那么下面这点先前操作一下。

CentOS配置YUM:
# cd /etc/yum.repos.d
# mv CentOS-Base.repo  CentOS-Base.repo.save
# wget http://centos.ustc.edu.cn/CentOS-Base.repo.5
# mv CentOS-Base.repo.5 CentOS-Base.repo
安装 EPEL RHEL 5

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

安装完毕之后,即可使用 yum 来安装软件

现在可以在vsftpd-2.3.2目录里make了

# make

编译完注意看一下有没有提示错误,我这里遇到一个问题。make的时候没有加载pam,可以用以下方法查看是不是加载了

# ldd vsftpd

linux-gate.so.1 =>  (0xffffe000)
#libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7ed6000)
libdl.so.2 => /lib/libdl.so.2 (0xb7ed2000)
libnsl.so.1 => /lib/libnsl.so.1 (0xb7ebd000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb7eaa000)
libutil.so.1 => /lib/libutil.so.1 (0xb7ea5000)
libcap.so.1 => /lib/libcap.so.1 (0xb7ea1000)
libc.so.6 => /lib/libc.so.6 (0xb7d81000)
/lib/ld-linux.so.2 (0xb7f13000)

果然vsftpd文件有没有加载/lib/libpam.so.0,问题是没有安装pam-devel

# rpm -q pam-devel

package pam-devel is not installed

# yum install pam-devel
后面一堆安装完成略过。。。以前没有用过centos,发现红帽这个yum还真方便啊。软件安装升级上都很简单。

安装完它,再回去make,make完之后查一下是否加载成功了。

# ldd vsftpd
linux-gate.so.1 => (0xffffe000)
libpam.so.0 => /lib/libpam.so.0 (0xb7fce000)
libdl.so.2 => /lib/libdl.so.2 (0xb7fca000)
libnsl.so.1 => /lib/libnsl.so.1 (0xb7fb5000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb7fa2000)
libutil.so.1 => /lib/libutil.so.1 (0xb7f9d000)
libcap.so.1 => /lib/libcap.so.1 (0xb7f99000)
libc.so.6 => /lib/libc.so.6 (0xb7e79000)
/lib/ld-linux.so.2 (0xb7fe3000)
以上说明vsftpd已经加载成功。

这么费劲才完成第1步,下面第2步。这里第几步是按照vsftp里的install说明文档说的。

# useradd nobody
# mkdir /usr/share/empty/
# mkdir /var/ftp/
# useradd -d /var/ftp ftp
# chown root.root /var/ftp
# chmod og-w /var/ftp

上面每一个语句做的是什么事就不详细了,操作的人应该都懂得了。不懂的话看原来的英文说明文档去吧。

第3步
make install
或者手动考贝:
cp vsftpd /usr/local/sbin/vsftpd
cp vsftpd.conf.5 /usr/local/man/man5
cp vsftpd.8 /usr/local/man/man8

注意:make install 不能拷贝简单的配置文件。推荐手动拷贝。
cp vsftpd.conf /etc

holiday100:/srv/ftp/soft/vsftpd-2.0.6 # 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
注意:和INSTALL中不同的是最后会安装xinetd。install -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd;

然后修改/etc/vsftpd.conf ,在配置文件的最后一行加入下面一行;
# vi /etc/vsftpd.conf

anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_world_readable_only=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
chroot_list_enable=NO
guest_enable=YES
guest_username=daemon
listen=NO
listen_port=21
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
pam_service_name=vsftpd
pasv_promiscuous=YES
port_promiscuous=YES
local_umask=022
anon_umask=022
#chown_uploads=YES
#chown_username=root
max_clients=100
max_per_ip=5
user_config_dir=/etc/vsftpd_user_conf
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
idle_session_timeout=600
data_connection_timeout=120
accept_timeout=120
connect_timeout=120
use_localtime=YES //解决时间问题

详细的不解释了,注意标红的地方指定的文件名要与/etc/pam.d/vsftpd 文件名相一致,这个涉及到非匿名登录(虚拟用户)。

按照 INSTALL 文件中第5步,第2小步,配置xinetd。
要求必须参考:EXAMPLE/INTERNET_SITE/README
根据配置文件:
a)配置xinetd配置文件
cp vsftpd.xinetd /etc/xinetd.d/vsftpd #这一步在make install中已经完成。

按照 INSTALL 文件中第5步,第2小步,配置xinetd。要求必须参考:EXAMPLE/INTERNET_SITE/README
根据配置文件:a)配置xinetd配置文件cp vsftpd.xinetd /etc/xinetd.d/vsftpd #这一步在make install中已经完成。

但是发现启动xinetd的时候启动不了,命令无效,也是因为没有安装xinetd的问题。

# yum install xinetd

# vi /etc/xinetd.d/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
}

重启xinetd

# /etc/rc.d/xinetd restart

启动正常

注意 xinetd启动失败的多数原因可能是刚才vsftp的配置文件配置的不正确,检查

vi  /etc/xinetd.d/vsftpd 和 vi /etc/vsftpd.conf 我遇到两次xinetd启动失败,都是这两个里有地方配置错了.

之前使用这个启动的时候出现错误

500 oops: could not bind listening ipv4 socket

是因为已经被xinetd已经启动了vsftpd,而vsftpd设置成了stardalone模式,所以,先

停止xinetd服务,  service xinetd stop ,我这里没有停止这个服务,而是kill掉了原来的vsftp的进程。

然后# /usr/local/sbin/vsftpd &

启动ftp服务

最后没有用这种方式启动,用xinetd启动,注意配置文件里的listen要设置为NO

下面就是配置用来登陆vsftp的用户帐号密码

第1步

# vi logins.txt

先创建一个文本文件logins.txt,格式是

username
password
user2
pw2

以此类推

检查一下服务器是不是装了db

# rpm -q db

db-4.3.29-15.2

没安装的话yum一下,下面在db_load的时候,发现不行,原来是db装了,还有其它的文件没有装导致的。

# yum install -y db4-utils iptables
# db_load -T -t hash -f logins.txt /etc/vsftpd_login.db
# chmod 600 /etc/vsftpd_login.db

第2步 创建一个PAM文件

# vi vsftpd.pam

文件内容包含以下两行,此处不知道是不是linux系统还有差别,以前遇到虚拟用户登陆不起作用是这里的问题,一定要用绝对目录才行。

auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
# cp vsftpd.pam /etc/pam.d/vsftpd   #考贝到/etc/pam.d/vsftpd 注意这里的文件名要与刚才配置文件里标红的地方一致

第3步 为虚拟用户创建本地文件夹

useradd -d /home/ftp daemon
groupadd daemon

chown -R daemon:daemon /home/ftp    # -R 参数会使其下所有目录都将用户权限及用户组改为virtual,貌似vsftp安装说明文件里说的是用virtual这个虚拟帐号来登陆,我这里都改成了用daemon,因为在后来的使用中发现,通过PHP程序上传上来的附件文件所有者用户是daemon,这样FTP中就无权删除或下载相应文件,操作的时候很是郁闷。

#出现的问题
#上传文件提示失败  原因是登陆的用户没有权限<

此权限一是文件夹是否属于FTP所用的虚拟用户,用户组是否属于它,还有文件夹没有可写权限
drwxr-xr-x  为755
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5

配置完了,现在还差最后一步,给每个用户的操作目录做一下挂载。要想永久挂载,重启不会失效,要把这两行加到fstab里

# vi /etc/fstab   #关于fstab查看这里http://doc.linuxpk.com/520.html
最后面加上
/home/ftp /home/username/ftp none rw,bind 0 0

# username  是你自己给某用户开启的帐号

重启测试OK.

————————–以下2011年8月4日更新———————————–

今天修改了虚拟帐户的权限,但是修改完之后发现登陆的时候被拒绝,在服务器端上登陆也提示ftp: connect: Connection refused。没有别的任何提示了。这是怎么回事呢?xinet没有启动?不对啊,刚才重启的时候,都提示ok了。然后kill掉了xinet的进程,又启动了一下,这次ok了。去除了的帐号登陆的时候提示:331 Please specify the password.一切正常了。不过还是感觉这样管理帐户有些麻烦。。谁有更好的办法,请留言给我。不要吝啬你多打那几个字哈~~ :)

日志信息 »

该日志于2010-11-16 18:58由 Apple 发表在LA/NMP分类下, 评论已关闭。 如果觉得这篇文章不错,可以分享给你的朋友们~ :)
返回顶部