热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ProFTPd的安装和配置过程详解

1.安装由其官方网站中下载其源码软件包proftpd-1.2.10.tar.gz。接下来我将对安装过程的一些重要步骤,给出其解释:[root@localhostroot]#tarxzvfproftpd-1.2.10.tar.gz[root@localhostroot]#cdbind-9.3.1[root@localho

    1.安装

    由其官方网站中下载其源码软件包proftpd-1.2.10. tar.gz。接下来我将对安装过程的一些重要步骤,给出其解释:

    [root@localhost root]

    #tar xzvf proftpd-1.2.10. tar.gz

    [root@localhost root]

    #cd bind-9.3.1

    [root@localhost bind-9.3.1]

    #./configure

    [root@localhost bind-9.3.1]

    #make

    [root@localhost bind-9.3.1]

    #make install

    tar xzvf bind-9.3.1.tar.gz 解压缩软件包。

    ./configure 针对机器作安装的检查和设置,大部分的工作是由机器自动完成的,但是用户可以通过一些参数来完成一定的设置,其常用选项有:

    ./configure --help 察看参数设置帮助。

    --enable-ipv6 支持ipv6。

    --enable-shadow 支持shadow口令

    可以设置的参数很多,可以通过 -help察看需要的,一般情况下,默认设置就可以了。

    默认情况下,安装过程应该建立了:

    proftpd的deamon为/usr/local/sbin/proftpd

    proftpd的配置文件,/usr/local/etc/proftpd.conf。

    2.启动:

    [root@localhost root]

    # /usr/local/sbin/proftpd -c

    /usr/local/etc/proftpd.conf

    -c选项用来指定配置文件的位置,不指定的话默认位置是 /usr/local/etc/proftpd.conf 。

    正常情况下proftpd应该启动了,ps aux 应该可以查到proftpd的进程,或netstat -an 也可以看到21端口的服务已经起来了。(ftp默认端口)

    如果要设置开机自启动ftp server,只需在/etc/rc.d/rc.local中加入一行

    /usr/local/sbin/proftpd

    #!/bin/sh

    #

    # This script will be executed

    *after* all the other init scripts.

    # You can put your own

    initialization stuff in here if you don't

    # want to do the full Sys V style init stuff.

    touch /var/lock/subsys/local

    /usr/local/sbin/proftpd

    四.软件的配置。

    1.初始配置文件

    默认配置文件的位置为:

    /usr/local/etc/proftpd.conf (如果文件不存在可以从压缩包中把配置文件样例拷贝过来即可)下面逐项分析其中一些常选项:(#后面的部分是注释)

    # This is a basic ProFTPD

    configuration file

    (rename it to

    # 'proftpd.conf' for actual use.

    It establishes a single server

    # and a single anonymous login.

    It assumes that you have a user/group

    # "nobody" and "ftp" for normal

    operation and anon.

    ServerName "

    ServerType

    standalone

    DefaultServer

    on

    # Port 21 is the standard FTP port.

    Port 21

    ServerType 指定FTP Server 的启动类型,一般使用standalone方式比较简单,如果访问量不大,为节省资源考虑用xinetd侦听启动,必须在这里指定。Port 指定FTP的侦听端口,一般使用21端口

    # Umask 022 is a good standard

    umask to prevent new dirs and files

    # from being group and world writable.

    Umask 022

    # To prevent DoS attacks, set the

    maximum number of child processes

    # to 30. If you need to allow

    more than 30 concurrent connections

    # at once, simply increase this value.

    Note that this ONLY works

    # in standalone mode, in inetd mode

    you should use an inetd server

    # that allows you to limit maximum

    number of processes per service

    # (such as xinetd).

    MaxInstances 30

    Umask 指定FTP server 进程的Umask 值,022与Linux系统得默认值一致。

    MaxInstances 指定 FTP server 的最大连接数。

    # Set the user and group under

    which the server will run.

    User nobody

    Group nogroup

    # To cause every FTP user to be

    "jailed" (chrooted) into their home

    # directory, uncomment this line.

    #DefaultRoot ~

    DefaultRoot

    User 和Group 指定proftpd 进程启动时的有效用户ID,处于安全考虑默认的身份是nobody,有一点要指出的是,一般Red Linux 9.0 中默认是没有nogroup 这个组的,把Group指定为nobody 即可。

    DefaultRoot 选项限制Linux 系统用户通过FTP方式登录时将被限制在其home 目录下。

    # Set the maximum number of seconds

    a data connection is allowed

    # to "stall" before being aborted.

    #TimeoutStalled 300

    AllowRetrieveRestart on

    AllowStoreRestart on

    # Normally, we want files to be overwriteable.

     AllowOverwrite on

    TimeoutStalled 指定一个连接的超时时间。

    AllowRetriveRestart 和AllowStroeRestart 指定允许断点续传。

     User ftp

     Group ftp

     # We want clients to be able to

     login with "anonymous"

     as well as "ftp"

     UserAlias anonymous ftp

    # Limit the maximum number of anonymous logins

     MaxClients 10

    # We want 'welcome.msg' displayed

    at login, and '.message' displayed

     # in each newly chdired directory.

     DisplayLogin welcome.msg

     DisplayFirstChdir .message

    # Limit WRITE everywhere

    in the anonymous chroot

     DenyAll

    这一部分,将在后面详细介绍。

    2.配置文件结构分析

    #全局设置

    设置项目1 参数1

    设置项目2 参数2

    #某个目录的设置

    ...

    ...

    #关于匿名登陆的设置

    ...

    ...

    ...

    ...

    常用全局设置

    DefaultRoot ~ # 限制每个FTP用户在自己的目录下,不可查看上一级目录

    AllowRetrieveRestart on #下载时,允许断点续传

    AllowStoreRestart on #上传时,允许断点续传

    ServerIdent off #屏蔽服务器版本信息

    TransferRate STOR|RETR 速度(Kbytes/s) user 使用者 #设定用户传输速率

    MaxHostsPerUser 1 #每个帐户最多允许来源ip为1个, 对防止ftp帐号还是比较有用的。

    MaxClientsPerUser 1 #每个帐户在每个客户端最多可以同时登陆1次,可以防止多线程软件下载对服务器的破坏

    MaxClientsPerHost 1 #同一个客户端只能最多1个帐号可以登陆

    WtmpLog on #是否要把ftp记录在日志中,如果不想可以设置成off屏蔽掉log日志。

    TimeoutIdle 600 #客户端idle时间设置,默认就是600秒

    DisplayLogin welcome.msg #设置ftp登陆欢迎信息文件

    RootLogin on #允许root用户登录,默认是不允许的,安全起见不推荐此选项。

    IdentLookups off #查找客户的远程用户名,关掉节省连接时间

    欢迎词设置

    关于欢迎文件的设置包含如下参数:

    %T 目前的时间

    %F 所在硬盘剩下的容量

    %C 目前所在的目录

    %R Client 端的主机名称

    %L Server 端的主机名称

    %U 使用者帐户名称

    %M 最大允许连接人数

    %N 目前的服务器连接人数

    %E FTP服务器管理员的 email

    %i 本次上传的文件数量

    %o 本次下载的文件数量

    %t 本次上传+下载的文件数量

    知道这些参数,可以写出一个友好的欢迎语文件,例如:

    欢迎您%U, 这是T-force的测试FTP服务器;

    目前时间是:%T;

    本服务器最多允许%M个用户连接数;

    目前服务器上已有%N个用户连接数;

    目前你所在的目录是%C;

    目录所在的硬盘还剩下%F字节。

    anonymous 配置块

    在配置文件中anonymous配置块是非常重要的一部分,全局帐户的权限配置一般都由它来控制,下面分析一个比较常见的例子

    # A basic anonymous configuration,

    no upload directories.

    If you do not

    # want anonymous users,

    simply delete this entire

     section.

    #指定匿名用户登录目录

    User ftp

    #指定本块设置的用户

    Group ftp

    #指定本块设置的用户属组

    # We want clients to be able to login

    with "anonymous" as well as "ftp"

    UserAlias anonymous ftp

    #设定用户的别名

    AnonRequirePassword on

    #登陆需要密码

    # Limit the maximum number

    of anonymous logins

    MaxClients 10

    # We want 'welcome.msg' displayed

    at login, and '.message' displayed

    # in each newly chdired directory.

     DisplayLogin welcome.msg

     DisplayFirstChdir .message

    # Limit WRITE everywhere

    in the anonymous chroot

     DenyAll

     AllowAll

    anonymous配置块中的重点是通过Limit对指定目录进行比较详尽的权限管理,Limit的权限控制比较完整,通过不同的组合基本上可以做到各种复杂的权限控制,其控制项如下:

    CMD:Change Working Directory 改变目录

    MKD:MaKe Directory 建立目录的权限

    RNFR: ReName FRom 更改目录名的权限

    DELE:DELEte 删除文件的权限

    RMD:ReMove Directory 删除目录的权限

    RETR:RETRieve 从服务端下载到客户端的权限

    STOR:STORe 从客户端上传到服务端的权限

    READ:可读的权限,不包括列目录的权限,

    相当于RETR,STAT等

    WRITE:写文件或者目录的权限,包括MKD和RMD

    DIRS:是否允许列目录,相当于LIST,

    NLST等权限,还是比较实用的

    注:在测试是否可以下载时,不能用长度为0的空文件去测试,要用一个有内容的文件(文件大小不能为0k)。

    针对上面这个Limit所应用的对象,又包括以下范围

    AllowUser 针对某个用户允许的Limit

    DenyUser 针对某个用户禁止的Limit

    AllowGroup 针对某个用户组允许的Limit

    DenyGroup 针对某个用户组禁止的Limit

    AllowAll 针对所有用户组允许的Limit

    DenyAll 针对所有用户禁止的Limit

    五.一种简单实用的配置管理方式:

    proftpd和mysql组合可以完成比较庞大而且完备的权限控制,但是也同样增加了管理和维护的复杂性,在这里我介绍一种简单易行的配置方法,适用于100个用户以下的应用。这种方法的核心在于巧妙的运用了设置gid位,读者最好找资料了解一下相关的知识。这种方法的配置管理工作相当少,也相当的简单,同时还可以保持一个清晰的权限系统结构。

    1.思路

    首先需要明确的概念是proftpd的用户与linux系统的用户的关系:linux系统的用户即为proftpd的用户。proftpd的权限控制是基于Linux系统得权限控制之上的,即用户对于某个文件或目录,必须先有Linux系统的权限,在此基础上proftpd才能设置其特有的一些权限。其实一般来说Linux自有的权限系统就是一个比较完善的权限系统了,我们完全可以只利用这个权限系统,就足可以满足我们的要求了。

    我们设置一个ftp管理员ftpadmin属于ftpadmin组,ftp的根目录/ftp是ftpadmin的个人根目录,这样ftpadmin可以完成日常的管理。通过设置/ftp的gid可以保证新上传的文件是属于ftpadmin用户,加上再设置umask值002保证上传文件的组读写权限,这样管理员就可以对其管理下的文件进行管理,而同时保证了不改变该文件的属主。

    ftp的用户,我们只需新建一个Linux用户,而把他的用户目录制定在/ftp之下就可以。操作起来很简单。

    2.建立ftp管理员:ftpadmin

    [root@localhost root]groupadd ftpadmin #ftpadmin为新添加的组的名字

    [root@localhost root]useradd -d

    /ftp -g ftpadmin -s /sbin/nologin admin

    [root@localhost root]chmod 2775 /ftp

    同时保证ftpadmin 是 /ftp的属主,ftpadmin 是/ftp的组属主。这样就保证了ftpadmin对要管理的/ftp目录有全部的权限。

    -s /sbin/nologin 指定用户不能从shell登录,就是说只能从ftp方式登录,这样是出于安全的考虑。

    修改/usr/local/etc/proftpd.conf

    nobody ftpadmin

    nogroup ftpadmin

    Umask 002

    #允许所有者,组用户对ftp进行管理。

    掩码Umask改为 002 。即组成员和所有者都可对文件夹进行增删,改等操作。其他用户可读可执行,但不可写。这样,ftpadmin用户可以通过同组的身份对所有的文件进行读写,同时也不改变其内容的原有权限。也就说,不改变这个文件夹下的文件的所有者身份,但同时又可以管理这些文件。

    chmod 2775 /ftp,通过设置了文件夹的gid,以后在这个文件夹下写的所有文件,不管其所有者是谁,文件的组必定是ftpadmin(因为/ftp的组属于ftpadmin),都合理的被纳于ftpadmin的管理之下。

    3.添加用户:user1

    useradd -d /ftp/user1 -g ftpadmin -s

    /sbin/nologin user1

    这样user1就对/ftp/user1的目录有完整的权限,而作为管理员也可以通过组权限对目录进行管理。

    每当需要添加用户的时候,只需方便的简单的添加一个Linux的用户就可以了。

    4.对应的配置文件:proftpd.conf中的重要条目

    Umask 002

    DefaultRoot

    Umask 002 保证了新建的文件有组读写权限。

    DefaultRoot ~ 保证 每个用户登录后被锁定在自己的目录里,看不到其他用户的目录

    带宽控制:

    RateReadBPS 81920

    RateReadFreeBytes 5120

    RateReadHardBPS on

    这样用户的带宽就用公式: "RateReadBPS x MaxClients = Total Bandwidth allocation."


推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
author-avatar
hfdljflkd_863
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有