vsftp配置虚拟用户


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 loginfailed,到日志文件文件查看,看出了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中默认是不被允许的。要修复这个错误,可以用命令chmoda-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用户/宿主。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
1. 安装 vsftpd 在终端中输入以下命令: ```bash sudo apt-get update sudo apt-get install vsftpd ``` 2. 配置 vsftpd 打开 vsftpd 的配置文件 /etc/vsftpd.conf,找到以下行: ```bash # anonymous_enable=YES ``` 将这一行的注释去掉,并将 YES 改为 NO,变成以下内容: ```bash anonymous_enable=NO ``` 接着找到以下行: ```bash # local_enable=YES ``` 将这一行的注释去掉,并将 YES 改为 NO,变成以下内容: ```bash local_enable=NO ``` 然后再找到以下行: ```bash # write_enable=YES ``` 将这一行的注释去掉,并将 YES 改为 NO,变成以下内容: ```bash write_enable=NO ``` 最后添加以下内容: ```bash # 设置虚拟用户的根目录 local_root=/var/www/virtual # 允许虚拟用户登录 guest_enable=YES # 使用虚拟用户配置文件 guest_username=ftp user_config_dir=/etc/vsftpd/vsftpd_user_conf # 允许虚拟用户写入文件 anon_upload_enable=YES anon_mkdir_write_enable=YES # 禁止匿名用户写入文件 anon_world_readable_only=YES ``` 3. 配置虚拟用户 在 /etc/vsftpd 目录下创建一个名为 db 的目录,并在该目录下创建一个名为 virtual_users.db 的文件: ```bash sudo mkdir /etc/vsftpd/db sudo touch /etc/vsftpd/db/virtual_users.db ``` 使用 vsftpd 提供的命令 htpasswd,创建一个名为 ftp虚拟用户,并将其密码保存在 /etc/vsftpd/db/virtual_users 文件中: ```bash sudo htpasswd -cd /etc/vsftpd/db/virtual_users ftp ``` 此时会要求输入密码,输入密码后保存即可。如果需要添加更多的虚拟用户,可以使用以下命令: ```bash sudo htpasswd -d /etc/vsftpd/db/virtual_users username ``` 其中 username 是新建虚拟用户用户名。 4. 配置虚拟用户配置文件 在 /etc/vsftpd 目录下创建一个名为 vsftpd_user_conf 的目录,用于存放每个虚拟用户配置文件: ```bash sudo mkdir /etc/vsftpd/vsftpd_user_conf ``` 在该目录下创建一个名为 ftp 的文件,用于配置 ftp 虚拟用户的权限: ```bash sudo touch /etc/vsftpd/vsftpd_user_conf/ftp ``` 打开该文件,添加以下内容: ```bash # 允许登录 local_enable=YES # 允许写入文件 write_enable=YES # 设置默认文件权限 local_umask=022 # 设置用户的根目录 local_root=/var/www/virtual/ftp ``` 其中 local_root 为虚拟用户的根目录,可以根据实际情况进行修改。 5. 重启 vsftpd 服务 在终端中输入以下命令,重启 vsftpd 服务: ```bash sudo service vsftpd restart ``` 至此,vsftpd 配置虚拟用户的步骤就完成了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值