章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • linux

  • windows

  • 中间件

  • 网络

  • 安全

  • 存储

  • 防火墙

  • 数据库

  • 系统

    • vmware

    • ftp

      • proftpd环境部署
        • proftpd介绍
        • proftp安装记录
      • vsftpd部署
    • nexus

    • harbor

    • confluence&jira

    • loki

    • sonarqube

    • svn

    • other

    • openldap

    • influxdb

    • wordpress

    • kvm

    • argocd

    • jfrog

    • nextcloud

    • RustDesk

    • mail

    • ghost

  • docker

  • other

  • 监控

  • 运维
  • 系统
  • ftp
章工运维
2022-12-21
目录

proftpd环境部署

# proftpd介绍

Proftpd的全称是Professional FTP daemon,是针对Wu-FTP的弱项而开发的,软件在经过多年的发展之后完善了很多功能,ProFTP已经成为继Wu-FTP之后最为流行的FTP服务器软件,越来越多的站点选用它构筑安全高效的FTP站点。Proftpd软件和vsftpd一样是一个开放源代码的ftp服务器软件,但是可配置项比vsftpd要多,是目前比较流行的ftp软件,Proftpd的配置和apache的配置相似,因此该软件也十分容易配置和管理。

Proftpd和VSftpd二者区别
===== vsftpd =====
全称Very secure FTP daemon。比ProFTPD 具有更高的安全性。vsftpd使用一般身份启动服务,降低了FTP服务的PID权限,使该服务即使被入侵也无法得到有效的系统管理权限。同时vsftpd利用chroot软件来改变登录者的根目录,使登陆者只能在这个目录中活动,限制了登录者的执行权限。vsftpd通过配置vsftpd.conf文件来完成部署,设定简单,登录者仅分为anonymous和real user 两种。可以使用standalone和super daemon的方式启动。vsftpd无法控制每个目录的流量、不能控制上传和下载的比例、不能针对不同的登陆者进行不同的权限设定。

===== Proftpd=====
由于Proftpd在自身的原始码中已经包含了所需要的执行指令,不需要Linux系统本机的执行程序的支持,所以在系统安全上更为安全。配置简单且灵活,安装后只需要设定proftpd.conf一个配置文件即可,可配置性更强。可以使用stand-alone或者super daemon方式来启动ftp服务。Proftpd可以控制上下传比例,实现流量控制,针对不同的目录设定不同的权限。登录者分为anonymous和real user两种。

Proftpd比较好用的功能有以下几点:
1)目录访问权限配置灵活,配置简单。
2)能够不依赖系统用户,可以使用独立的虚拟用户系统(使用过Serv-U的朋友应该深有体会,配置非常方便,对原有系统环境影响较小)
3)对中文的支持良好,完美解决vsftpd中文引号bug。因为vsftpd在中文支持方面存在bug,对中文中一些字符的支持不是很好(比如对中文的双引号支持不是很好)。

FTP部署的背景
公司四个部门分别为运维部、开发部、销售部、行政部:
1)各部门用户访问FTP后可以看到所有目录,仅可以访问本部门的目录;
2)需要FTP日志功能;
3)FTP认证方式基于文件认证方式;
4)共享目录:/var/ftp;

# proftp安装记录

测试机器为Centos7.5,iptables和selinux均关闭

1)下载ProFTP
[root@localhost ~]# wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.6.tar.gz
[root@localhost ~]# tar -zvxf proftpd-1.3.6.tar.gz -C /usr/src/
[root@localhost ~]# cd  /usr/src/proftpd-1.3.6/
[root@localhost proftpd-1.3.6]# ./configure  --prefix=/usr/local/proftpd  --sysconfdir=/etc/  --enable-nls  --enable-openssl  --enable-shadow

==================================================================================================================
编译参数说明(可通过"./configure --help" 查看帮助选项):
--prefix=PREFIX         指定安装路径(--prefix=/usr/local/)              
--sysconfdir=DIR        指定FTP服务配置文件路径(--sysconfdir=/etc)                  
--localstatedir=DIR     指定运行状态的文件存放位置(默认/var/proftpd)                 
--with-modules=mod_ldap 指定加载功能模块                        
--enable-memcache       支持缓存功能                          
--enable-nls            支持多语言环境(如中文),安装完成后在主配置文件中需要指定字符编码(UseEncoding UTF-8 CP936) 
--enable-openssl        支持TLS加密FTP服务                        
--enable-shadow         支持使用/etc/shadow验证用户密码

==================================================================================================================

注意需要GCC编译器 
[root@localhost proftpd-1.3.6]# make
[root@localhost proftpd-1.3.6]# make install


2)添加环境变量
[root@localhost proftpd-1.3.6]# vim /etc/profile
........
PATH=$PATH:/usr/local/proftpd/bin

[root@localhost proftpd-1.3.6]# source /etc/profile

3)创建启动用户及组(该用户无法登录系统,没有宿主目录)
[root@localhost ~]# useradd proftp -s /sbin/nologin -M

4)建立共享目录
[root@localhost ~]# mkdir -p /var/ftp/运维部
[root@localhost ~]# mkdir -p /var/ftp/开发部
[root@localhost ~]# mkdir -p /var/ftp/销售部
[root@localhost ~]# mkdir -p /var/ftp/行政部
[root@localhost ~]# useradd -M -s /sbin/nologin  yunwei
[root@localhost ~]# useradd -M -s /sbin/nologin  kaifa
[root@localhost ~]# useradd -M -s /sbin/nologin  xiaoshou
[root@localhost ~]# useradd -M -s /sbin/nologin  xingzheng
[root@localhost ~]# chmod 777  /var/ftp/运维部
[root@localhost ~]# chmod 777  /var/ftp/开发部
[root@localhost ~]# chmod 777  /var/ftp/销售部
[root@localhost ~]# chmod 777  /var/ftp/行政部

================proftpd配置原文件解释==============
[root@localhost ~]# cat /etc/proftpd.conf|grep -v "#"|grep -v "^$"
ServerName                      "ProFTPD Default Installation"     #客户端连接后显示的字符
ServerType                      standalone                         #服务启动模式
DefaultServer                   on                                
Port                            21          #端口
UseIPv6                         off         #禁用IPv6
Umask                           022         #权限掩码
MaxInstances                    30          #并发进程30个(防DoS攻击)
User                            nobody      #启动服务的用户
Group                           nogroup     #启动服务的组
#DefaultRoot ~                              #共享根目录(默认为用户家目录)
AllowOverwrite          on                  #是否允许使用文件覆写权限
<Limit SITE_CHMOD>                          #权限设置
  DenyAll
</Limit>
<Anonymous ~ftp>
  User                          ftp
  Group                         ftp
  UserAlias                     anonymous ftp     #用户别名
  MaxClients                    10                #最大客户端连接数
  DisplayLogin                  welcome.msg       #显示登录信息
  DisplayChdir                  .message
  <Limit WRITE>                                   #权限设置
    DenyAll
  </Limit>
</Anonymous>

=================该文件格式===================
##########################################################################
#   全局设置  参数值                                                                                                  
#                                                                       
#   <Directory  "路径"> 指定路径相关设置,可以使用Limit语法限制目录权限 
#         ... ...                                                       
#   ... ...                                                       
#   </Directory>                                                        
#                             
#                                                                       
#                 
#   <anonymouse "路径">   匿名共享路径相关设置(包括权限设置)    
#   </anonymouse>                   
#########################################################################

==============Limit权限说明================
#########################################################################
#  CWD:改变所在目录 (即Change Working Directory   表示进入该目录)
#  MKD/XMKD:新建目录
#  RNFR/RNTO:重命名目录的(一起使用) ,即更名
#  DELE:删除文件
#  RMD/XRMD:删除目录 (即Remove Directory)
#  RETR:下载
#  STOR:上传
#  LOGIN:允许登陆
#  READ: 可读,包括了RETR,SITE,SIZE,STAT
#  WRITE: 可写,包括包括了APPE, DELE, MKD, RMD, RNTO, STOR, XMKD, XRMD
#  DIRS: 允许列出目录,包括了DUP, CWD, LIST, MDTM, NLST, PWD, RNFR, XCUP, XCWD, XPWD
#  ALL:包括了READ WRITE DIRS
#######################以上权限结合动作一起使用#####################
#  AllowUser:允许某个用户
#  DenyUser:禁止某个用户
#  AllowGroup:允许某个用户组
#  DenyGroup:禁止某个用户组
#  AllowAll:允许所有用户
#  DenyAll:禁止所有用户
#########################################################################

5)修改/etc/proftpd.conf文件,部分内容为添加内容
[root@localhost ~]# cat /etc/proftpd.conf
ServerName                      "ProFTPD Default Installation"
ServerType                      standalone
DefaultServer                   on
UseEncoding UTF-8 CP936                    #支持的编码格式(中文)
Port                            21
AllowRetrieveRestart            on         #允许断点继传(上传) 
AllowStoreRestart               on         #允许断点继传(下载) 
UseIPv6                         off
Umask                           022
RootLogin                       off        #禁止root登录ftp
MaxInstances                    30
SystemLog                       /var/log/proftp.log   #产生独立的日志文件. (如果想指定自己的日志格式可以结合(ExtendLog,LogFormat)两个选项设置)
TransferLog                     /var/log/proftp.log   #记录用户下载的日志信息
User                            proftp     #设置启动用户为proftp
Group                           proftp     #设置启动组为proftp
DefaultRoot /var/ftp                       #指定共享根目录为/var/ftp
AllowOverwrite                  on

#<Anonymous ~ftp>                          #该部分全部#注释,取消匿名访问功能
#  User       ftp
#  Group      ftp
#  UserAlias      anonymous ftp        
#  MaxClients     10           
#  DisplayLogin     welcome.msg        
#  DisplayChdir     .message
#  <Limit WRITE>                 
#    DenyAll
#  </Limit>
#</Anonymous>

#以下内容为设置权限,为手动添加内容     
#所有用户可以看到所有部门的文件夹,仅可以访问自己部门的目录
RequireValidShell off                            #用户登录是否需要shell(对虚拟用户很重要)
AuthUserFile /usr/local/proftpd/ftpd.passwd      #通过文件认证用户登录,需要ftpasswd命令创建该文件
<Directory "/var/ftp/*">
<Limit CWD READ>                                 #允许所有人可以查看根目录
    AllowAll
</Limit>
</Directory>
<Directory "/var/ftp/运维部">
<Limit CWD MKD RNFR READ WRITE STOR RETR>
    DenyAll                                      #拒绝所有人往该目录下执行Limit后的操作指令
</Limit>
<Limit DELE>
    DenyAll                                      #禁止任何人在该目录下删除文件
</Limit>
<Limit CWD MKD RNFR READ WRITE STOR RETR>
    AllowUser yunwei                             #仅允许yunwei用户可以执行Limit后的所有指令
</Limit>
</Directory>
 <Directory "/var/ftp/开发部">
 <Limit CWD MKD RNFR READ WRITE STOR RETR>
    DenyAll
</Limit>
<Limit DELE>
    DenyAll
</Limit>
<Limit CWD MKD RNFR READ WRITE STOR RETR>
    AllowUser kaifa
</Limit>
</Directory>
<Directory "/var/ftp/行政部">
<Limit CWD MKD RNFR READ WRITE STOR RETR>
    DenyAll
</Limit>
<Limit DELE>
   DenyAll
</Limit>
<Limit CWD MKD RNFR READ WRITE STOR RETR>
   AllowUser xingzheng
</Limit>
</Directory>
<Directory "/var/ftp/销售部">
<Limit CWD MKD RNFR READ WRITE STOR RETR>
   DenyAll
</Limit>
<Limit DELE>
   DenyAll
</Limit>
<Limit CWD MKD RNFR READ WRITE STOR RETR>
   AllowUser xiaoshou
</Limit>
</Directory>

6)用ftpasswd命令建立虚拟账号(下面命令也可以直接用于修改用户密码)
ftpasswd命令格式说明 (该命令可以创建用户文件、组文件,默认创建的用户文件为ftpd.passwd):
--passwd  创建密码文件,即AuthUserFile指定的文件
--group   创建组文件
--name    指定创建的用户名
--uid     指定用户虚拟UID
--gid     指定虚拟GID
--home    指定用户家目录
--shell   指定用户Shell
--file    指定创建的文件名

[root@localhost ~]# ftpasswd  --passwd --file=/usr/local/proftpd/ftpd.passwd --name=yunwei  --uid=1000  --home=/home/nohome  --shell=/bin/false
ftpasswd: using alternate file: /usr/local/proftpd/ftpd.passwd
ftpasswd: --passwd: missing --gid argument: default gid set to uid
ftpasswd: creating passwd entry for user yunwei

ftpasswd: /bin/false is not among the valid system shells.  Use of
ftpasswd: "RequireValidShell off" may be required, and the PAM
ftpasswd: module configuration may need to be adjusted.


Password:
Re-type password:

ftpasswd: entry created

用户认证文件创建后的权限是440
[root@localhost ~]# ll /usr/local/proftpd/ftpd.passwd
-r--r-----. 1 root root 77 Jul 12 10:59 /usr/local/proftpd/ftpd.passwd
[root@localhost ~]# cat /usr/local/proftpd/ftpd.passwd
yunwei:$1$UEKjLwfY$FXV4SHlLeAOGEc2wrZa.M/:1000:1000::/home/nohome:/bin/false

7)启动FTP服务
检查配置文件是否正常
[root@localhost ~]# /usr/local/proftpd/sbin/proftpd -t6
Checking syntax of configuration file
Syntax check complete.

[root@localhost ~]# /usr/local/proftpd/sbin/proftpd

[root@localhost ~]# ps -ef|grep proftpd
proftp   13438     1  0 11:01 ?        00:00:00 proftpd: (accepting connections)
root     13440 13349  0 11:01 pts/2    00:00:00 grep --color=auto proftpd

[root@localhost ~]# lsof -i:21
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
proftpd 13438 proftp    0u  IPv4 2066796      0t0  TCP *:ftp (LISTEN)

这里仅以用户为实验环境,还可以实现组功能,这里就不做过多介绍了!
=====================================================================================
如果配置组功能,则创建虚拟账号组的命令如下
# ftpasswd --group --file=/usr/local/proftpd/ftpd.group --name=admin --gid=99
# ftpasswd --group --name=admin --gid=99 --member=ftpadmin
=====================================================================================

8)ProFtpd启动脚本
[root@localhost ~]# mkdir /usr/local/proftpd/etc
[root@localhost ~]# ln -s /etc/proftpd.conf /usr/local/proftpd/etc/
[root@localhost ~]# ll /usr/local/proftpd/etc/
total 0
lrwxrwxrwx. 1 root root 17 Jul 12 11:21 proftpd.conf -> /etc/proftpd.conf

[root@localhost ~]# cat /etc/rc.d/init.d/proftpd
#!/bin/bash 
# 
# chkconfig: 2345 85 15 
# description: ProFTPd is an FTP server 
# processname: proftpd 

# Author:   jingyihome 
# E-mail:   webmaster@zhanghaijun.com 
# Website:  https://www.zhanghaijun.com 

# ProFTPd Settings 
PROFTPD="/usr/local/proftpd/sbin/proftpd" 
PROCONF="/usr/local/proftpd/etc/proftpd.conf" 
PROPID="/usr/local/proftpd/var/proftpd.pid" 
RETVAL=0 
prog="ProFTPd" 

start() { 
    echo -n $"Starting $prog... " 
    $PROFTPD -c $PROCONF 
    if [ "$?" = 0 ] ; then 
        echo " done" 
    else 
        echo " failed" 
    fi 
} 

stop() { 
    echo -n $"Stopping $prog...  " 
    if [ ! -e $PROPID ]; then 
        echo -n $"$prog is not running." 
        exit 1 
    fi 
    kill `cat $PROPID` 
    if [ "$?" = 0 ] ; then 
        echo " done" 
    else 
        echo " failed" 
    fi 
} 

restart(){ 
    echo $"Restarting $prog..." 
    $0 stop 
    sleep 2 
    $0 start 
} 

status(){ 
    if [ -e $PROPID ]; then 
        echo $"$prog is running." 
    else 
        echo $"$prog is not running." 
    fi 
} 

case "$1" in 
    start) 
        start 
        ;; 
    stop) 
        stop 
        ;; 
    restart) 
        restart 
        ;; 
    status) 
        status 
        ;; 
  *) 
        echo $"Usage: $0 {start|stop|restart|status}" 
esac 

授予执行权限
[root@localhost ~]# chmod 755 /etc/rc.d/init.d/proftpd
[root@localhost ~]# ll /etc/rc.d/init.d/proftpd
-rwxr-xr-x. 1 root root 1370 Jul 12 11:20 /etc/rc.d/init.d/proftpd
[root@localhost ~]# ll /etc/init.d/proftpd
-rwxr-xr-x. 1 root root 1370 Jul 12 11:20 /etc/init.d/proftpd

测试proftpd脚本启停
[root@localhost ~]# /etc/init.d/proftpd stop
Stopping ProFTPd...   done
[root@localhost ~]# lsof -i:21
[root@localhost ~]#

[root@localhost ~]# /etc/init.d/proftpd start
Starting ProFTPd...  done
[root@localhost ~]# lsof -i:21              
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
proftpd 13503 proftp    0u  IPv4 2066913      0t0  TCP *:ftp (LISTEN)


9)如果连接FTP时速度慢,可以在proftpd配置文件proftpd.conf中加入以下内容:
# Slow logins
# This is probably caused by a firewall or DNS timeout. By default ProFTPD will try to do both DNS and ident lookups against the
# incoming connection. If these are blocked or excessively delayed a slower than normal login will result. To turn off DNS and ident
# use:
UseReverseDNS off
IdentLookups off
##########################################################
参考配置
ServerName                      "ProFTPD Default Installation"
ServerType                      standalone
DefaultServer                   on
Port                            21000
UseIPv6                         off
Umask                           022
MaxInstances                    30
User                            root
Group                           root
PassivePorts 60000 60002
DefaultRoot /data/wordpress/workspace
AllowOverwrite          on
AuthUserFile /usr/local/proftpd/ftpd.passwd
<Directory "/data/wordpress/workspace/app">
<Limit CWD MKD RNFR READ WRITE STOR RETR>
</Limit>
</Directory>
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384

参考链接

CentOS下Proftpd环境部署并使用虚拟用户登录 - 运维笔记 - 散尽浮华 - 博客园 (opens new window)

微信 支付宝
上次更新: 2023/06/09, 19:14:23

← 服务器虚拟化VMware ESXI搭建集群 vsftpd部署→

最近更新
01
不花一分钱从0到1建站教程
04-22
02
批量拿取多台服务器的日志文件
04-21
03
高德MCP智能体搞定旅游计划
04-19
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式