1、Proftpd介绍
Proftpd的全称是Professional FTP daemon,是针对Wu-FTP的弱项而开发的,软件在通过多年的发展以后完善了不少功能,ProFTP已经成为继Wu-FTP以后最为流行的FTP服务器软件,愈来愈多的站点选用它构筑安全高效的FTP站点。Proftpd软件和vsftpd同样是一个开放源代码的ftp服务器软件,可是可配置项比vsftpd要多,是目前比较流行的ftp软件,Proftpd的配置和apache的配置类似,所以该软件也十分容易配置和管理。linux
Proftpd和VSftpd两者区别
===== vsftpd =====
全称Very secure FTP daemon。比ProFTPD 具备更高的安全性。vsftpd使用通常身份启动服务,下降了FTP服务的PID权限,使该服务即便被入侵也没法获得有效的系统管理权限。同时vsftpd利用chroot软件来改变登陆者的根目录,使登录者只能在这个目录中活动,限制了登陆者的执行权限。vsftpd经过配置vsftpd.conf文件来完成部署,设定简单,登陆者仅分为anonymous和real user 两种。可使用standalone和super daemon的方式启动。vsftpd没法控制每一个目录的流量、不能控制上传和下载的比例、不能针对不一样的登录者进行不一样的权限设定。web
===== Proftpd=====
因为Proftpd在自身的原始码中已经包含了所须要的执行指令,不须要Linux系统本机的执行程序的支持,因此在系统安全上更为安全。配置简单且灵活,安装后只须要设定proftpd.conf一个配置文件便可,可配置性更强。可使用stand-alone或者super daemon方式来启动ftp服务。Proftpd能够控制上下传比例,实现流量控制,针对不一样的目录设定不一样的权限。登陆者分为anonymous和real user两种。shell
Proftpd比较好用的功能有如下几点:
1)目录访问权限配置灵活,配置简单。
2)可以不依赖系统用户,可使用独立的虚拟用户系统(使用过Serv-U的朋友应该深有体会,配置很是方便,对原有系统环境影响较小)
3)对中文的支持良好,完美解决vsftpd中文引号bug。由于vsftpd在中文支持方面存在bug,对中文中一些字符的支持不是很好(好比对中文的双引号支持不是很好)。apache
FTP部署的背景
公司四个部门分别为运维部、开发部、销售部、行政部:
1)各部门用户访问FTP后能够看到全部目录,仅能够访问本部门的目录;
2)须要FTP日志功能;
3)FTP认证方式基于文件认证方式;
4)共享目录:/var/ftp;vim
2、Proftpd 安装记录缓存
测试机器为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