首页
首页
文章目录
  1. 简介
  2. 安装VSFTP
  3. 配置VSFTP
  4. vsftpd目录结构
  5. 一键增加账户脚本

Centos7以上vsftp部署与配置虚拟用户登录

简介

今天,搞一个静态文件部署,我发现居然没有写过linux机器下如何部署FTP,并配置虚拟用户登陆。所以就有了今天这篇文章。

安装VSFTP

1
yum install -y vsftpd

配置VSFTP

1、创建虚拟用户的数据文件

1
2
3
# cd /etc/vsftpd/
# vim users
# 内容如下

配置ftp虚拟用户 配置ftp虚拟用户
奇数行是用户名、偶数行是密码

2、将文件hash转换

1
# db_load -T -t hash -f users users.db

返回信息:

1
2
# ls
ftpusers user_list users users.db vsftpd.conf vsftpd_conf_migrate.sh

会自动生成users.db文件

3、修改pam.d中的配置文件

1
# vim /etc/pam.d/vsftpd

修改前
修改pam.d文件01 修改pam.d文件01
注释3-6行,新增

1
2
auth    required        pam_userdb.so db=/etc/vsftpd/users
account required pam_userdb.so db=/etc/vsftpd/users

修改后
修改pam.d文件02 修改pam.d文件02

4、修改vsftpd.conf配置文件

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
# vim /etc/vsftpd/vsftpd.conf
具体内容如下:

#服务器独立运行
listen=YES
listen_port=34001
#设定不允许匿名访问
anonymous_enable=NO
#设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
local_enable=YES
#开启写权限
write_enable=YES
#使用户不能离开主目录
chroot_list_enable=YES
# vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。
allow_writeable_chroot=YES
#设定支持ASCII模式的上传和下载功能
ascii_upload_enable=YES
ascii_download_enable=YES
#PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证
pam_service_name=vsftpd
#设定启用虚拟用户功能
guest_enable=YES
#指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
guest_username=ftp
#设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)
user_config_dir=/etc/vsftpd/vuser_conf
#配置vsftpd日志(可选)
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log

5、配置虚拟用户权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# mkdir /etc/vsftpd/vuser_conf
# vim /etc/vsftpd/vuser_conf/ftp_test_user
# echo '' > /etc/vsftpd/chroot_list
内容如下:

#虚拟用户上传目录
local_root=/data/ftpdata/ftp_test_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

创建ftp目录并赋权

1
2
# mkdir -p /data/ftpdata/ftp_test_user
# chown -R ftp:ftp /data/ftpdata/ftp_test_user

vsftpd目录结构

vsftpd目录结构 vsftpd目录结构

一键增加账户脚本

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
61
62
63
64
65
66
67
68
# coding:utf-8
import os
import subprocess # 用来执行命令
import random, string # 生成18个字符串当做ftp密码

def random_str(slen=18):
seed = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+=-"
sa = []
for i in range(slen):
sa.append(random.choice(seed))
return ''.join(sa)

def handle_ftp_add(ftpuser,path):
pd = open('/etc/vsftpd/users','r')
ftp_user = ftpuser
if ftp_user in pd.read():
pd = open('/etc/vsftpd/users','r')
context = pd.readlines()
lines = len(context)
i = 0
n = 0
while i < lines:
if ftp_user in context[i]:
password = context[i+1]
i+=2
else:
i+=1
pd.close()
else:
password = random_str() # 随机生成18个字符,用做ftp密码
f = open('/etc/vsftpd/users', 'a')
f.write(ftp_user+'\n'+password+'\n')
f.close()
cmd = 'db_load -T -t hash -f /etc/vsftpd/users /etc/vsftpd/users.db'
out = subprocess.check_output([cmd], shell=True, stderr=subprocess.STDOUT) #shell=True表示将代码当成字符串执行
print out
#path = '/root/mlc/mtest/web/peizhi/'+name #用户上传的配置文件目录
nr = 'local_root='+path+'\nwrite_enable=YES\nanon_umask=022\nanon_world_readable_only=NO\nanon_upload_enable=YES\nanon_mkdir_write_enable=YES\nanon_other_write_enable=YES'
path1 = '/etc/vsftpd/vuser_conf/'+ftp_user # ftp以ftp用户命名的配置文件
xr = open(path1,'w')
xr.write(nr)
xr.close()
return ftp_user,password

def handle_ftp_del(name):
print name
lists = []
#matchstring = re.compile(name)
f = open('/etc/vsftpd/users','r')
context = f.readlines()
lines = len(context)
i = 0
while i < lines:
if name in context[i]:
i+=2
else:
lists.append(context[i])
i+=1
f.close()
new_f = open('/etc/vsftpd/users','w')
for i in lists:
new_f.write(i)
new_f.close()
os.remove('/etc/vsftpd/vuser_conf/'+name)
return True

if __name__ == '__main__':
print handle_ftp_add('用户名','/data/ftpdata/用户名/')

以上 End!

支持一下
扫一扫,我会更有动力更新
  • 微信扫一扫
  • 支付宝扫一扫