pure-ftpd 使用虚拟用户 安装/配置 方法

运行环境/版本

OS : 16.04.2

pure-ftpd : 1.0.36-3.2build1

安装

#直接使用包管理器安装
sudo apt-get install pure-ftpd

创建对应的系统用户

虚拟用户需要关联系统用户来获得对服务器上的文件的访问控制权限,可以使用多个虚拟用户关联同一个系统用户来然后使用不同的访问目录,也可以关联不同的系统用户来实现不同的权限控制。这里我使用第一种方式。

# 创建系统用户的组
sudo groupadd ftpgroup
# 创建系统用户,加入刚刚创建的组
sudo useradd ftpuser -g ftpgroup -s /sbin/nologin
# 创建ftp存储目录,并使响应的系统用户拥有权限
sudo mkdir -p /var/opt/ftp/user1
sudo mkdir -p /var/opt/ftp/user2
sudo chown -R ftpuser:ftpgroup /var/opt/ftp/

创建虚拟用户

虚拟用户可以通过安装附带的 pure-pw 工具来进行管理

sudo pure-pw useradd user1 -u ftpuser -g ftpgroup -d /var/opt/ftp/user1
# 运行命令后会要求在终端中输入要设置的用户密码
sudo pure-pw useradd user2 -u ftpuser -g ftpgroup -d /var/opt/ftp/user2
# 用户创建完成后需要运行下面命令创建/更新用户数据库。或者在运行 pure-pw useradd 等命令时加上 -m 参数直接创建/更新数据库以省略本步。 
sudo pure-pw mkdb

这里有一个坑,使用 apt-get 安装的 pure-ftpd 默认没有开启虚拟用户的的认证方式,所以就算创建了虚拟用户,仍然无法登陆ftp。pure-ftpd 的默认配置文件位置在 /etc/pure-ftpd 文件夹下,启用虚拟用户认证的方式需要在认证文件夹 /etc/pure-ftpd/auth 下创建对应认证方式的软连接。

cd /etc/pure-ftpd/auth/
# 创建虚拟用户认证的软连接
sudo ln -s ../conf/PureDB 60puredb
# 还需要检查一下设置中虚拟用户方式是否是开启状态
cat 60puredb 
# 结果为 /etc/pure-ftpd/pureftpd.pdb 。内容为虚拟用户数据库文件

之后再重启 pure-ftpd 服务。

sudo systemctl restart pure-ftpd

此时已经可以通过 ftp 客户端使用创建好的虚拟用户进行连接了。

配置用户

# 常见用法如下
# 添加用户
sudo pure-pw useradd user1 -u ftpuser -g ftpgroup -d /var/opt/ftp/user1
# 修改密码
sudo pure-pw passwd user2
# 显示用户列表
sudo pure-pw list
# 生成/重新生成用户数据库文件
sudo pure-pw mkdb
# 更多详细用法参考
man pure-pw

其他配置

prue-ftpd 的配置文件不同于常见的 vsftpd ,它使用在conf文件夹的文件名做为配置项,使用文件的内容作为配置值。经过上面简单配置后,配置文件夹的结构如下:

$ pwd
/etc/pure-ftpd
$ tree 
.
├── auth
│   ├── 60puredb -> ../conf/PureDB
│   ├── 65unix -> ../conf/UnixAuthentication
│   └── 70pam -> ../conf/PAMAuthentication
├── conf
│   ├── AltLog
│   ├── FSCharset
│   ├── MinUID
│   ├── NoAnonymous
│   ├── PAMAuthentication
│   ├── PureDB
│   ├── TLSCipherSuite
│   └── UnixAuthentication
├── db
├── pureftpd-dir-aliases
├── pureftpd.passwd
└── pureftpd.pdb
  • 关闭系统用户访问

    使用虚拟用户方式访问 ftp 时默认配置就是限制根目录 (chroot) 的,而系统用户使用 pam 方式认证登录后是不对 ftp 根目录进行限制的,这样无形之中增加了风险。所以在已经设置了虚拟用户后,最好将其他认证方式关闭。

    sudo sh -c "echo 'no' > conf/PAMAuthentication"
    sudo sh -c "echo 'no' > conf/UnixAuthentication" 
  • 修改默认字符集

    选择使用 pure-ftpd 的理由之一就是可以设置 GBK 字符集 ,解决在 windows 上传中文乱码的问题。(可能是因为默认配置里服务端显式指定了 UTF-8 ,所以在我 WIN7 的资源管理器上也能正常显示中文,但IE 浏览器中打开 ftp 还是乱码。具体使用哪种字符集请根据需要确定。另外,如果需要修改字符集的话最好在FTP还是空的时候修改,这样不会造成已经上传的文件字符集和系统设置不同导致乱码。)

    sudo sh -c "echo 'GBK' > conf/FSCharset"
  • 修改用户最小UID

    在 pure-ftpd 的设置中有一项 conf/MinUID ,UID大于等于这个值的用户才可以登录(包括虚拟用户对应的系统用户)。所以出现用户无法登录的问题时,也可能是用户的UID小于这个值导致的,这时需要修改这个值或用户的UID解决。

    sudo sh -c "echo '1000' > conf/MinUID"
  • 不解析主机名

    设置这项可以加快 ftp 连接速度

    sudo sh -c "echo 'yes' > conf/DontResolve"
  • 更多配置

    # 更多配置可以参考
    man pure-ftpd-wrapper

    因为我是用的是软件包直接安装好了服务化的 pure-ftpd 所以使用的就是如上所示的修改配置方式。其他情况下还可以直接在 pure-ftpd 服务启动时添加参数,详见官网

    # 将当前配置文件显示为参数形式
    $ pure-ftpd-wrapper --show-options
    -l puredb:/etc/pure-ftpd/pureftpd.pdb -J ALL:!aNULL:!SSLv3 -E -O clf:/var/log/pure-ftpd/transfer.log -8 UTF-8 -u 1000 -H -g /var/run/pure-ftpd/pure-ftpd.pid

参考文档

Pure-ftpd服务安装及虚拟用户设置
Pure-ftpd服务安装设置
用pureftpd+pureDB虚拟用户,建立一个简单安全(不需要数据库支持)的linux ftp网站


sunny5541
1 声望0 粉丝

小运维祈祷中……