Linux下FTP环境部署梳理(vsftpd和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;
二、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
Linux下FTP环境部署梳理(vsftpd和proftpd)的更多相关文章
- linux下Ftp环境的搭建
Ftp环境的搭建 1.ftp软件的安装 使用ssh远程连接linux系统,上传和下载一些文件,Ftp是不可少的 Ftp的安装很简单,远程登录系统后使用命令 yum list vsftpd 通过提示 ...
- Linux下的环境部署和项目发布
1.查看系统版本 sudo uname --m i686 //表示是32位 x86_64 // 表示是64位 2.下载对应版本软件,jdk和Tomcat(切记注意版本) jdk: 下载地址:http: ...
- Linux下ftp和ssh详解
学习了几天Linux下ftp和ssh的搭建和使用,故记录一下.学习ftp和ssh的主要目的是为了连接远程主机,并且进行文件传输.废话不多说,直接开讲! ftp服务器 1. 环境搭建 本人的系统是Arc ...
- linux下ftp如何使用
linux下ftp可以上传.下载文件 centos7环境: 1.检查是否安装过ftp服务 rpm -qa|grep vsftpd 如果没有输出则表示没有安装过 安装ftp yum -y install ...
- 在linux下用tomcat部署java web项目的过程与注意事项
在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...
- 记一次Linux下JavaWeb环境的搭建
今天重装了腾讯云VPS的系统,那么几乎所有运行环境都要重新部署了.过程不难懂,但是也比较繁琐,这次就写下来,方便他人也方便自己日后参考参考. 我采用的是JDK+Tomcat的形式来进行JavaWeb初 ...
- 《Linux下FTP服务器搭建及FTP使用》
.LOGAndy:mxtd114 <Linux下FTP服务器搭建> 0.root登录 1.安装ftp # yum -y install ftp 2.安装vsftpd # yum -y in ...
- Linux 下 ftp的使用
最近需要在Linux上搭建FTP服务,通过网上的一些大神学习了一些新知识,在这个做一个总结: Linux 下FTP 为 vsftp (linux red hat)1.FTP配置路径:/etc/vsft ...
- linux下LAMP环境搭建
++++++++++++++++++++++++++++++++++++++++++++++ linux下LAMP环境搭建 ++++++++++++++++++++++++++++++++++++++ ...
随机推荐
- 在Java中动态传参调用Python脚本
最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...
- [Mac] How do I move a window whose title bar is off-screen?
有时窗口一不小心拖出视野外了,此时无法移动窗口.如何还原? 有人遇到相似问题,已有解决方法: 方法就是,菜单 Windows - Zoom 这时窗口会还原.
- C#项目实践之一——WPF多媒体通讯录
1.Window.Resources 是一种Window级的资源定义. Window.Resources它的作用范围就是在Window容器里的所有子控件,也只有这些子控件才能引用/调用这些资源 Gr ...
- bash的内置字符串处理工具
bash内置字符串处理工具: 1.字符串切片: ${var:offset:number} 取字符串的子串: ${var: -length} 取字符串的最右侧的length个字符.注意:冒号右侧必须有 ...
- Spring MVC中自定义拦截器的简单示例
1. 引言 拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似于Servlet的Filter. 我们可以让普通的Bean实现HandlerIntercpetor接口或继承 ...
- [bug]android monkey命令在Android N和Android O上的一点差异发现
最近再调试这个统计FPS的代码,发现代码在android N上可以正常运行,但在android O上却运行不了,拼了命的报错,给出的提示就是 ZeroDivisionError: division b ...
- 捕获海康威视IPCamera图像,转成OpenCV能够处理的图像(二)
海康威视IPCamera图像捕获 捕获海康威视IPCamera图像.转成OpenCV能够处理的IplImage图像(一) 捕获海康威视IPCamera图像.转成OpenCV能够处理的IplImage图 ...
- 【转】这五种方法前四种方法只支持IE浏览器,最后一个方法支持当前主流的浏览器(火狐,IE,Chrome,Opera,Safari)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 1 C++ 线程
#include "iostream" //#include "thread" //头文件一般不加入,复制到别的文件,导致命名冲突 //总增加 //using ...
- leetcode 199. Binary Tree Right Side View 、leetcode 116. Populating Next Right Pointers in Each Node 、117. Populating Next Right Pointers in Each Node II
leetcode 199. Binary Tree Right Side View 这个题实际上就是把每一行最右侧的树打印出来,所以实际上还是一个层次遍历. 依旧利用之前层次遍历的代码,每次大的循环存 ...