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环境搭建 ++++++++++++++++++++++++++++++++++++++ ...
随机推荐
- Excel的快速录入
数据有效性: 1.选择要限制数据有效性的区域: 2.点开[数据]选项卡选择”数据验证“: 3.[设置]中选择”序列": 4.若手动输入则需要将内容使用英文符号分割开来(比如:A级,B级): ...
- EF 更新部分字段写法
EF 更新部分字段写法 1.EF默认是查询出来,修改后保存: 2.设置不修改字段的IsModified为false,此方法不需要先从数据库查询出实体来(最优方法): db.Set<T>() ...
- Stanford机器学习---第十一讲.异常检测
之前一直在看Standford公开课machine learning中Andrew老师的视频讲解https://class.coursera.org/ml/class/index 同时配合csdn知名 ...
- Lua基础之MetaTable(6)
Lua基础之MetaTable(6) 转载地址:http://nova-fusion.com/2011/06/30/lua-metatables-tutorial/ 关于MetaTable的补充:ht ...
- 学生与部门管理app-产品功能与界面的简单设计
学生与部门管理app-产品功能与界面的简单设计 1. 结对成员学号 我:********* 大佬:*******10 2. 需求分析(NABCD模型) 2.1 N-需求 各个部门在开学初占据学校青春广 ...
- Linux下Sublime Text 3的安装
1.下载 官网下载 或者直接 #wget http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_3059_x32.tar.bz2 (linux ...
- [国家集训队] calc
嘟嘟嘟 这道题dp虽然不难,但是我还是没推出来,感觉最近脑子不太好用啊. 于是就跑去问神仙gjx(全国前三!)了.(外出集训真是好) 神仙不愧是神仙,一会儿就想出来了,而且方法还比网上的题解好懂. d ...
- [国家集训队]JZPFAR
嘟嘟嘟 k-d tree模板之二:查询第k大距离.(所以是怎么上黑的) 因为k-d tree的查询就是暴力嘛,所以我就想到了一个很暴力的做法:每一次查询用一个长度为k的优先队列维护.按距离递增,编号递 ...
- LCA转换成RMQ
LCA(Lowest Common Ancestor 最近公共祖先)定义如下:在一棵树中两个节点的LCA为这两个节点所有的公共祖先中深度最大的节点. 比如这棵树 结点5和6的LCA是2,12和7的LC ...
- 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(五)数据库安装(双节点)
一.方案选择 通过Lvs+keepalived+mysql(主主同步)实现数据库层面的高可用方案,需要两台服务器作为数据库提供业务数据的存储,应用服务器通过vip访问数据库,允许同一时间内一台数据库服 ...