OS : 16.04.2php
pure-ftpd : 1.0.36-3.2build1linux
#直接使用包管理器安装 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 工具来进行管理ubuntu
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 下建立对应认证方式的软链接。windows
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文件夹的文件名作为配置项,使用文件的内容做为配置值。通过上面简单配置后,配置文件夹的结构以下:bash
$ 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 根目录进行限制的,这样无形之中增长了风险。因此在已经设置了虚拟用户后,最好将其余认证方式关闭。app
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网站