随笔 - 298  文章 - 377  trackbacks - 0
<2016年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

留言簿(34)

随笔分类

随笔档案

文章档案

相册

收藏夹

搜索

  •  

最新评论

阅读排行榜

评论排行榜

vsftp配置虚拟用户


1、vsftp安装

由于系统是debian7,故直接通过apt-get来安装就行了。

sudo apt-get install vsftpd

2、虚拟用户配置

安装的vsftpd版本是2.3.5-3,这个版本,配置文件是/etc/vsftpd.conf.

关于具体的配置,直接网上搜就一大堆,推荐这个网址的,挺详细的。

http://www.cnblogs.com/hhuai/archive/2011/02/12/1952647.html

(1)虚拟用户配置

vsftp允许三种用户登录:

  1. 本地用户(系统中的用户)
  2. 匿名用户(anonymous免密码登录)
  3. 虚拟用户(基于本地用户)

虚拟用户以本地用户为宿主(一般是不能登录系统的本地用户),仅仅用于登录vsftp,无法登陆系统;可以建立多个虚拟用户,设置各自的密码,并且根据其用途设置相应的配置,能适应多种情况。

(2)虚拟用户相应配置

guest_enable=YES        # 启用虚拟用户
guest_username=ftp      # 虚拟用户的宿主用户名
virtual_use_local_privs=YES     # 虚拟本地权限
user_config_dir=/etc/vsftpconf  # 虚拟用户设置文件夹(如果不设定则按照主配置文件)

3、相关设置

(1)用户账号生成

新建文件,比如/etc/vsftpd/ftpusers,然后按照“一行用户名,一行密码”的规则写入文件。

mkdir /etc/vsftpd           # 创建文件夹
vi /etc/vsftpd/ftpusers     # 编辑写入
cat /etc/vsftpd/ftpusers    # 写入的用户/密码
user1
123456
user2
654321

保存退出,这样就建立两个用户,然后就要利用这个用户文件生成pam能识别的db格式。
debian下可以用db4.8_load命令,如果没有可以先检查安装

aptitude search db | grep util    # 查找软件、版本
aptitude install db4.8-utils      # 安装软件(安装完成就有 db4.8_load 命令)
db4.8_load -T -t hash -f /etc/vsftpd/ftpusers /etc/vsftpd/ftpusers.db    # 生成db格式

(2)pam设置

vsftpd的pam校验模块在配置文件中指定,可以使用相对路径,由系统自己找。

pam_service_name=vsftpd     # 指定pam模块名(可以自定义)

默认的模块是/etc/pam.d/vsftpd

cat /etc/pam.d/vsftpd
# Standard behaviour for ftpd(8).
auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth    required        pam_shells.so

虚拟用户模块设置:

# 在/etc/pam.d目录下新建vsftpd.vu文件写入
auth required /lib/security/pam_userdb.so db=/etc/vsftpconf/virtusers
account required /lib/security/pam_userdb.so db=/etc/vsftpconf/virtusers
# 并在/etc/vsftpd.conf中修改pam模块名
pam_service_name=vsftpd.vu

注意自己的系统如果是64位,userdb验证模块的位置有可能在/lib64/security/pam_userdb.so,另外,也可能模块并未链接出来,在/lib/security或者/lib64/security中都没有这个模块名,那么便要自己去找出来。

# 64位系统
ln -s /lib/x86_64-linux-gnu/security/pam_userdb.so /lib64/security/pam_userdb.so
# 32位系统
ln -s /lib/i386-linux-gnu/security/pam_userdb.so /lib/security/pam_userdb.so

(3)pam日志文件

很多linux版本的验证信息是存在/var/log/secure,但 debian 7 是存到另外的文件 /var/log/auth.log

如果登录时候提示530,登录失败,可以到这个文件中查看相应的错误提示信息,这个日志文件就是保存与账户验证相关的日志信息。

(4)db路径设置

新版的pam验证db模块,会要求是要 .db后缀的文件,验证时候会自动帮你补上这个后缀,从帮助文件可以看出。

db=[path]   use the [path] database for performing lookup.
There is no default; the module will return PAM_IGNORE if no database is provided.
Newer versions of DB will automatically append ".db" to whatever pathname you supply here,
so the path should not include it.

一开始不清楚,在自定义的pam验证模块里,把db后缀写上,登录时候一直提示530 login failed,到日志文件文件查看,看出了db路径有问题

pam_userdb(vsftpd.vu:auth):
user_lookup: could not open database `/etc/vsftpd/ftpusers.db': No such file or directory

最后将 .db后缀去掉后,就可以正常认证登录了。


4、宿主用户配置

(1)ftp宿主用户

一般安装完vsftp都会生成一个不可登录的用户,各版本这个用户名可能不太相同,这个版本的vsftp生成的用户是ftp,可以在/etc/passwd中查看:

$ cat /etc/passwd | grep ftp
ftp:x:121:129:ftp daemon,,,:/var/ftp:/bin/false

用户名ftp,用户组ftp,主目录/var/ftp(修改过),不可登录/bin/false。

因为/var/ftp的属主是ftp用户,一般不做指定登录目录情况下,以ftp为宿主的虚拟用户默认就是登录到这里,当然,也可以在虚拟用户自定义配置(见下面)中指定相应用户的登录目录,但要注意的是:宿主用户(ftp)必须对虚拟用户登录目录有相应的权限,否则会登录失败。

(2)手动添加宿主用户

如果不想用已有的ftp用户,或者安装后没有软件没有创建用户,可以利用adduser命令,手动添加一个不可登录的宿主用户。

 adduser -d /opt/vsftp -g ftp -s /sbin/nologin vsftp
# -d: 指定用户主目录
# -g: 指定用户组
# -s: 指定登录后分配的shell(nologin表示不可登录)
# vsftp: 表示要添加的用户名

如果这样修改后,登录ftp提示500错误:

500 OOPS: cannot change directory:/home/*******
500 OOPS: child died

可以试着在输入以下命令解决

setsebool -P ftpd_disable_trans 1
service vsftpd restart

第一行中的-P参数是为了以后不需要每次开机都输入这个命令


5、虚拟用户配置

/etc/vsftpd.conf中指定的虚拟用户配置目录,比如下面的,就是/etc/vsftpconf:

user_config_dir=/etc/vsftpconf

然后就可以在目录中创建与虚拟用户同名的文件,就是相应用户的配置文件,配置格式与vsftpd的主配置文件一样,不过可以不用那么复杂,精简点就行了,这样也就达到了不同用户不同配置的目的。这里贴一下一个样本:

# cat /etc/vsftpconf/user1
local_root=/opt/vsftp/user1     # 指定用户登录目录
anonymous_enable=NO             # 不允许匿名登录
write_enable=YES                # 可写
local_umask=022                 # 掩码为022
anon_upload_enable=NO           # 匿名用户不可上传
anon_mkdir_write_enable=NO      # 匿名用户不可创建目录
idle_session_timeout=300        # 会话超时时间300秒
data_connection_timeout=90      # 数据连接超时时间90秒
max_clients=1                   # 最大连接数1
max_per_ip=1                    # 每个ip最大连接数1
local_max_rate=25000            # 最大传输数率25000B/s

6、本地用户与匿名用户验证

上面说过vsftpd的登录验证是利用pam验证模块,而默认的验证模块/etc/pam.d/vsftpd仅支持本地用户登录,修改后的/etc/pam.d/vsftpd.vu仅支持匿名用户登录,也即,本地用户无法通过验证。

(1)支持本地与虚拟用户验证
/etc/vsftpd.conf中指定的验证模块内容修改为:

# virtual users auth
auth    sufficient      /lib/security/pam_userdb.so     db=/etc/vsftpd/ftpusers
account sufficient      /lib/security/pam_userdb.so     db=/etc/vsftpd/ftpusers
# Standard behaviour for ftpd(8).
auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth    required        pam_shells.so

这里的auth是指对用户的用户名口令进行验证。
这里的accout是指对用户的帐户有哪些权限哪些限制进行验证。
其后的sufficient表示充分条件,也就是说,一旦在这里通过了验证,那么也就不用经过下面剩下的验证步骤了。相反,如果没有通过的话,也不会被系统立即挡之门外,因为sufficient的失败不决定整个验证的失败,意味着用户还必须将经历剩下来的验证审核。


7、其他常见错误

(1)500错误

500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

这种一般是因为用户的根目录可写,同时又使用了chroot限制,但这在这个版本的vsftp中默认是不被允许的。要修复这个错误,可以用命令chmod a-w /home/ftp 去除用户根目录的写权限,注意把目录替换成你自己的。

同时,在根目录下创建可以有写权限的文件夹,这样就可以进入该文件夹中,上传东西了。

或者显式指定根目录可以写,在vsftpd的配置文件中增加下列两项中的一项:
对于标准的vsftpd build (vsftpd):

allow_writeable_chroot=YES

对于扩展的vsftpd build (vsftpd-ext):

allow_writable_chroot=YES

(2)550错误

550 Create directory operation failed.

这种一般是权限问题,不能创建目录或文件,重新修改下目录权限即可,同时注意是不是文件拥有者是不是ftp用户/宿主。

@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
posted on 2016-09-21 11:00 聂文龙 阅读(419) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理