Ubuntu下vsftpd - 虚拟账户配置

首先做个表态, 本人并不是linux的大师, 仅限于平时有空在自己虚拟机上尝试玩几下。所以文章里有什么说的不对或者不专业的地方忘各人谅解。


最近因为某个创业项目需要, 整个服务器架构都需要自己去搭建,今天在aliyun服务器上,自己尝试搭建了FTP。 在Ubuntu OS 下安装了vsftpd ,并配置了虚拟账户登录。


大概的步骤是这样的:

vsftpd 安装 -> 创建虚拟用户数据库 -> 配置PAM文件->为虚拟用户创建本地系统用户->修改master vsftpd配置文件 -> 修改虚拟用户vsftpd 配置文件 -> 重启vsftpd

完美, 没有瑕疵。 关于如何安装vsftpd 在这边文章里不做描述, 大家不懂的地方可以问问度娘。 这里详细介绍下如何创建FTP 虚拟用户。

创建虚拟用户数据库

创建一个文本文件,ie, usrlist.txt 。保存的地址可以自己决定, 我的是/etc/vsftpd/

格式如下:

user_id
password

注意:奇数行为账户名,偶数行为密码。也就是1.3.5.等行为用户名,2.4.6行为密码;最后一行需要回车(否则建立数据库文件时无法识别最后一行,导致报奇数行错误)这里我用红色highlight就是因为自己曾经在这里摔过跟头..

生成数据库


如果你系统里没有安装db-util, 就需要自己手动安装,我看到网上其他地方很多人装的是db-util, 但我在我的服务器上找不到这个包, 于是我直接装的是db-util。  这个工具其实就是把相应的文本文件转换成相应的数据库文件。

sudo apt-get install db-util

安装完后就可以把刚刚创建的txt文本文件转换为数据库,生成验证文件。

db_load -T -t hash -f usrlist.txt /etc/vsftpd/vsftpd_login.db
chmod 600  /etc/vsftpd/vsftpd_login.db

配置PAM文件


pam 文件地址在 /etc/pam.d/vsftpd.  我在原有的基础上加入了投两行,直接显示给你们看:

auth sufficient  pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient  pam_userdb.so db=/etc/vsftpd/vsftpd_login
# Standard behaviour for ftpd(8).(以pam模块限制某些账号无法登录主机的设定)
auth	required	pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.

# Standard pam includes
 @include common-account
 @include common-session
 @include common-auth
 auth	required	pam_shells.so

我们上一步建立的数据库文件vsftpd_login在这里被应用。

我们建立的虚拟用户将采用PAM进行验证,这是通过/etc/vsftpd.conf文件中的 语句pam_service_name=vsftpd 来启用的,后面会介绍。

为虚拟用户创建本地系统用户


新建一个系统用户vsftpd,用户家目录为/home/vsftpd, 用户登录终端设为/bin/false(即使之不能登录系统)


sudo useradd vsftpd -d /home/vsftpd -s /bin/false
sudo chown vsftpd:vsftpd /home/vsftpd

我们创建的虚拟用户就是通过借助这个本地用户来登录ftp。

修改master vsftpd配置文件


master配置文件在 /etc/vsftpd.conf ,我们接下来通过配置这个文件让虚拟用户生效,主要的命令有几条

listen=YES
anonymous_enable=NO (如果要让访问的用户必须输入用户名和密码的话,这个时候这里就是设置成NO)
dirmessage_enable=YES (登录后是否显示登录信息)
xferlog_enable=YES (开启登录记录)
xferlog_file=/var/log/vsftpd.log (上传、下载日志文件路径)
xferlog_std_format=YES 
chroot_local_user=YES 
guest_enable=YES 
guest_username=vsftpd(这个就是我们上面设置的本地用户名)
user_config_dir=/etc/vsftpd_user_conf (用户配置文件)
pam_service_name=vsftpd (pam模块名称, 验证文件) 
local_enable=YES (允许本地用户登录)
secure_chroot_dir=/var/run/vsftpd  

修改虚拟用户vsftpd 配置文件


根据上面的user_config_dir路径我们创建虚拟用户自定义的权限设置,比如虚拟用户是ftpuser, 那么我们就在该路径下创建一个叫ftpuser的文件

直接显示我的配置文件内容:

local_root=/usr/www (这里是你要ftp登录的主目录)
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

重启vsftpd 服务


终于, 重启下服务, 然后测试,成功

>> ftp localhost
Connected to localhost.
220 (vsFTPd 3.0.2)
Name (localhost:root): <你的虚拟用户账号名称>
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 


Troubleshooting


  1. 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
是文件夹问题,把ftp账户登陆的文件夹设置为只读即可正常登陆,但是这样便没办法在ftp登陆的文件夹根目录写入文件了,只能新建一个文件夹来使用。尝试添加如下,重启vsftpd

echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf


你可能感兴趣的:(Linux/Ubuntu)