首先安装
vsftpd db4-utils pam
等包;根据自己的系统安装 有32位和64位的,因为我的是64位系统 所以选择了64位;
建立虚拟账号相关联的系统账号 useradd virftp -s
/sbin/nologin
建立虚拟账户相关的文件 vim
/etc/vsftpd/vsftpd_login
//内容如下:
zhang
123
为了安全只让root可读,修改权限:chmod 600 /etc/vsftpd/vsftpd_login
生成对应的库文件 db_load -T -t hash -f /etc/vsftpd/vsftpd_login
/etc/vsftpd/vsftpd_login.db
建立虚拟账号相关的目录以及配置文件 mkdir /etc/vsftpd/vsftpd_user_conf
cd /etc/vsftpd/vsftpd_user_conf
创建和用户对应的配置文件 vim zhang 内容如下:
local_root=/home/virftp/zhang
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000
创建目录
mkdir /home/virftp/zhang
修改权限:chown -R virftp:virftp /home/virftp/zhang
vim /etc/pam.d/vsftpd 在最开头添加两行
auth sufficient /lib/security/pam_userdb.so
db=/etc/vsftpd/vsftpd_login
account sufficient /lib/security/pam_userdb.so
db=/etc/vsftpd/vsftpd_login
再修改 vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES改为anonymous_enable=NO
#anon_upload_enable=YES 改为 anon_upload_enable=NO
#anon_mkdir_write_enable=YES
更多来源:http://www.jiejuchina.com/question/
改为 anon_mkdir_write_enable=NO
再增加:
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
启动vsftpd服务service vsftpd restart
[root@zhang ~]# service vsftpd restart
Shutting down vsftpd: [ OK
]
Starting vsftpd for vsftpd: [
OK ]
[root@zhang ~]# lftp zhang@127.0.0.1
Password:
lftp zhang@192.168.1.108:~> ls
lftp zhang@192.168.1.108:/>
若没有lftp命令 安装:yum install -y lftp.
二:下面我来说一下我使用vsftpd 配置FTP服务遇到的问题以及解方法:
登录ftp出现:Login failed: 530 Login incorrect
于是我找出日志文件:[root@zhang ~]# cat /var/log/secure
Oct 19 11:14:25 localhost vsftpd[4821]: PAM unable to
dlopen(/lib/security/pam_userdb.so): /lib/security/pam_userdb.so:
cannot open shared object file: No such file or directory
Oct 19 11:14:25 localhost vsftpd[4821]: PAM adding faulty
module: /lib/security/pam_userdb.so
Oct 19 11:14:25 localhost vsftpd[4821]: pam_unix(vsftpd:auth):
check pass; user unknown
Oct 19 11:14:25 localhost vsftpd[4821]: pam_unix(vsftpd:auth):
authentication failure; logname= uid=0 euid=0 tty=ftp ruser=zhang
rhost=localhost.localdomain
Oct 19 11:14:25 localhost vsftpd[4821]:
pam_succeed_if(vsftpd:auth): error retrieving information about
user zhang
很明显是
/lib/security/pam_userdb.so这个载入失败。
于是我查看pam是否安装
[root@zhang ~]# yum list |grep pam
fprintd-pam.x86_64 0.1-20.git04fd09cfa.el6 @base
gnome-keyring-pam.x86_64 2.28.2-8.el6_3 @base
pam.i686 1.1.1-13.el6
@base
pam.x86_64 1.1.1-13.el6 @anaconda-CentOS-201303020151
已安装
我机器是64位的,猜想应该是要载入pam.x86_64
[root@zhang ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
auth sufficient
/lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
session optional
pam_keyinit.so
force revoke
auth required pam_listfile.so item=user sense=deny
file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account include
system-auth
session include
system-auth
session required
pam_loginuid.so
就是 /lib/security/pam_userdb.so 这个文件载入失败。
[root@zhang ~]# vi /etc/pam.d/vsftpd
#%PAM-1.0
auth sufficient
/lib64/security/pam_userdb.so
db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
保存重启vsftpd服务。
重新测试,登陆成功了。
三使用root权限配置FTP服务器
首先安装vsftpd
[root@zhang ~]# cd /etc/vsftpd
[root@zhang vsftpd]# ls
ftpusers vsftpd.conf vsftpd_login
vsftpd_login.db
user_list vsftpd_conf_migrate.sh
vsftpd_login.d
vsftpd_user_conf
分别编辑 ftpusers 和user_list
文件
[root@zhang
vsftpd]# vi user_list
[root@zhang
vsftpd]# vi ftpusers
屏蔽root权限将root那一行删掉或#注释掉
1重启vsftpd服务
[root@zhang vsftpd]# cd
[root@zhang ~]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): root
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
成功!
注:启动服务或者连接服务前,应先关闭防火墙,编辑
/etc/selinux/config 文件 使SELINUX=distabled
[root@zhang ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the
system.
# SELINUX= can take one of these three values:
# enforcing - SELinux
security policy is enforced.
# permissive - SELinux
prints warnings instead of enforcing.
# disabled - No SELinux
policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted
processes are protected,
# mls - Multi Level
Security protection.
SELINUXTYPE=targeted