首先做个表态, 本人并不是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
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 文件地址在 /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在这里被应用。
新建一个系统用户vsftpd,用户家目录为/home/vsftpd, 用户登录终端设为/bin/false(即使之不能登录系统)
sudo useradd vsftpd -d /home/vsftpd -s /bin/false sudo chown vsftpd:vsftpd /home/vsftpd
我们创建的虚拟用户就是通过借助这个本地用户来登录ftp。
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
根据上面的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
终于, 重启下服务, 然后测试,成功
>> 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>
echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf