写在最前
近来用vsftpd架设FTP,但在虚拟用户这一环节卡住了。查阅《鸟哥的LINUX私房菜》,《Linux运维之道》以及各种百度之后。终于搞定了,现将步骤和容易出问题的环节作以记录。 (实验不建议拷贝,引号会导致命令不成功。)
检测是否已安装过vsftpd
yum search db4* pam* vsftpd*安装vsftpd
yum -y install db4* pam* vsftpd*
1). 建立 vsftpd 服务用户和组
查看用户和用户组
grep ‘vsftpd’ /etc/passwd
grep ‘vsftpd’ /etc/group新建 vsftpd 用户,不需要目录
useradd -M -s /sbin/nologin vsftpd
2). 建立 vsftpd 虚拟账号的宿主用户
新建 guest135 用户,家目录即是FTP主目录
grep ‘guest135’ /etc/passwd
grep ‘guest135’ /etc/group
此用户名既是 vsftpd.conf 中的 guest_username=guest135查看目录
ls -l /home
3). 建立 根目录锁定 的帐户文件
touch /etc/vsftpd/chroot_list
1). 为了服务器安全,必须将用户锁定在自己的目录内
2). vsftpd.conf配置文件中的
chroot_local_user=yes
时,此文件必须存在,有没有内容无所谓
4). 虚拟账户生成
vi /etc/vsftpd/virtusers
单数行用户名,双数行密码
harry
123456
alice
123456alice
admin
123456admin
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
5). 设置PAM验证文件
修改pam文件
vi /etc/pam.d/vsftpd
#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
6). 虚拟用户配置
新建虚拟用户目录
mkdir -p /etc/vsftpd/vhost文件名必须与第 4 步中建立的用户名一致
vi /etc/vsftpd/vhost/harry
local_root=/home/guest135/harryftp
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000
7). 建立测试用户目录
mkdir -p /home/guest135/harryftp
1). 注意:这里新建的目录名应该与配置文件中的 local_root 一致
2). 如果不同虚拟用户使用不同的目录,也应该建立相应目录。否则连接失败
chown -R guest135.guest135/home/guest135
注意:一定要修改目录的用户和用户组,不修改会造成上传文件失败。
8). vsftpd.conf
# 设定支撑 vsftpd 服务的宿主用户【可不设置
nopriv_user=vsftpd
# 锁定用户目录
chroot_local_user=YES
# 禁止用户 列表功能
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
# userlist_file 中的用户将不得使用FTP
userlist_enable=YES
tcp_wrappers=YES
# 启用虚拟用户
guest_enable=YES
# 设定来宾帐户 虚拟用户的宿主用户
guest_username=guest135
pam_service_name=vsftpd
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vhost
# 监听端口,独立运行守护进程
listen=YES
# 禁止匿名
anonymous_enable=NO
# 禁止匿名上传
anon_upload_enable=NO
# 禁止匿名新建目录
anon_mkdir_write_enable=NO
# 启用本机帐户
local_enable=YES
# 允许写操作
write_enable=YES
local_umask=022
# 开启 xferlog 日志
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
# 日志使用标准的记录格式
xferlog_std_format=YES
# 使用主动模式连接,启用20端口
connect_from_port_20=YES
# 设定支持异步传输功能
async_abor_enable=YES
# 禁止上传文件更改宿主
chown_uploads=NO
# 造成服务器开销巨大,关闭
ls_recurse_enable=NO
ascii_upload_enable=NO
ascii_download_enable=NO
9). 测试
启动FTP服务
systemctl start vsftpd.service打开IE浏览器
ftp ://harry:123456@IP地址FileZilla 客户端测试FTP