在Cent OS上搭建ftp服务

本文整理在Cent OS上通过vsftpd快速搭建ftp服务!

1. yum安装vsftpd

1
yum -y install vsftpd

check

1
systemctl start vsftpd.service

2 SELinux与防火墙

设置SELinux对ftp的限制

1
2
getsebool -a | grep ftp
setsebool -P ftpd_full_access on

将ftp加入防火墙白名单

1
2
3
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
firewall-cmd --list-all

3. 修改配置文件

1
2
cd /etc/vsftpd/
vim vsftpd.conf

4. 创建宿主用户ftpuser

1
2
3
4
5
6
7
8
9
10
cd /home
mkdir vsftpd
# 创建用户 ftpuser 指定 `/home/vsftpd` 目录
# -s /sbin/nologin ftpuser 表示不允许该用户通过命令行方式登录
useradd -g root -M -d /home/vsftpd -s /sbin/nologin ftpuser

passwd ftpuser
chown -R ftpuser.root /home/vsftpd

cd /etc/vsftpd/vuser_conf

5. 生成虚拟用户数据文件

1
2
3
vim vuser_passwd
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
chmod 600 /etc/vsftpd/vuser_passwd.db

查看系统位数

1
getconf LONG_BIT

编辑pam认证文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vim /etc/pam.d/vsftpd
# 将其他都注释掉,添加下面两行;
# vuser_passwd 是你生成的虚拟用户的db文件,这里不要加扩展名。
# 系统为32位:
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd account
required pam_userdb.so db=/etc/vsftpd/vuser_passwd

# 系统为64位:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

mkdir /home/vsftpd/ftp-user1
chown -R ftpuser.root /home/vsftpd/ftp-user1
chmod 777 /home/vsftpd/ftp-user1
mkdir /home/vsftpd/ftp-user2
chown -R ftpuser.root /home/vsftpd/ftp-user2
chmod 777 /home/vsftpd/ftp-user2

6. 创建虚拟用户配置目录

1
2
3
4
5
6
7
8
9
10
11
cd /etc/vsftpd/vuser_conf
CREATE_USER=ftp-user1
echo "local_root=/home/vsftpd/${CREATE_USER}
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES" >> /etc/vsftpd/vuser_conf/${CREATE_USER}
# 写入虚拟用户名
echo "${CREATE_USER}" >> /etc/vsftpd/chroot_list

7. 重启VSFTP服务

1
systemctl restart vsftpd.service

PS 配置文件

贴出部分关键的配置文件

vsftpd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
anonymous_enable=NO
# 允许ascii文件上传和下载
ascii_upload_enable=YES
ascii_download_enable=YES
# 将用户限制在为其配置的主目录
chroot_local_user=YES
chroot_list_enable=YES
#允许写
allow_writeable_chroot=YES
# 如果启用了限定用户在其主目录下需要添加这个配置。
allow_writeable_chroot=YES

#设置启用虚拟用户功能
guest_enable=YES
#制定宿主用户名(我们后续需要为我们的系统增加该用户)
guest_username=ftpuser
#制定虚拟用户配置文件放置文件夹(需要我们自己建立)
user_config_dir=/etc/vsftpd/vuser_conf
chroot_list_file=/etc/vsftpd/chroot_list
vuser_passwd
1
2
3
4
ftp-user1
123456
ftp-user2
123456

添加用户的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash
ORG_ID=$1
PASSWORD=$2
# chroot_list 所在
CHROOT_LIST=/opt/zbbai/file_watch/chroot_list
# 虚拟用户配置文件放置文件夹
user_config_dir=/opt/zbbai/file_watch/user_config_dir
# 宿主home目录
HOME=/home/vsftpd
# 宿主用户名
ftpuser=ftpuser
# ftp用户命名格式
CREATE_USER="ftp-user${ORG_ID}"

if [ ! $PASSWORD ]; then
# 默认密码
PASSWORD=123456
fi

function create_ftp_user(){
if [ -z "`grep "${CREATE_USER}$" $CHROOT_LIST`" ]
then
echo "${CREATE_USER} 将被建立"
else
echo "${CREATE_USER} 已存在"
exit 1
fi
echo "${CREATE_USER}" >> $CHROOT_LIST
echo "local_root=${HOME}/${CREATE_USER}
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES" >> ${user_config_dir}/${CREATE_USER}
echo "${CREATE_USER}" >> ${user_config_dir}/vuser_passwd
echo "${PASSWORD}" >> ${user_config_dir}/vuser_passwd
db_load -T -t hash -f ${user_config_dir}/vuser_passwd ${user_config_dir}/vuser_passwd.db
chmod 600 ${user_config_dir}/vuser_passwd.db
}

function create_ftp_dir(){
cd $HOME
mkdir ${CREATE_USER}
chown -R $ftpuser $HOME/${CREATE_USER}/
chmod 777 $HOME/${CREATE_USER}/
}

function restart_ftp_server(){
systemctl restart vsftpd.service
}

echo "机构ID: ${ORG_ID}"
create_ftp_user
echo "用户: ${CREATE_USER}"
echo "密码: ${PASSWORD}"
create_ftp_dir
echo "目录: $HOME/${CREATE_USER}"
restart_ftp_server
echo "添加完成"