文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>[原]ProFTPD的复杂权限控制

[原]ProFTPD的复杂权限控制

时间:2009-08-14  来源:hoole

     ProFTPD的配置和安装在鸟哥的私房菜中讲的非常详细了,这里就不再赘述。不过在安装时需要注意,如果以后有支持LDAP的要求,那么最好在运行configure时加上—with-modules=mod_ldap参数。本文主要讲下ProFTPD的访问控制。ProFTPD的访问控制主要通过Allow、Deny、Order、Limit四个指令来实现。其中Allow和Deny就是允许或不允许用户或主机进行操作,Order确定规则的运用顺序,即是先运用Allow规则还是Deny规则。Limit就是限制用户或主机能够执行哪些操作,下面就来详细的说明。

1、 Allow
     Allow指令位于<Limit></Limit>标记之间,明确的指明哪些用户、主机或网络能够执行Limit指令指定的命令或操作。Allow一般和Order、Deny一起实现精确的访问控制。Allow后面可以使用关键字ALL或NONE来指定所有主机或用户的权限,默认是ALL。如果对单独的用户或主机进行控制,那么必须指定用户名或主机名,出于安全和性能考虑主机名最好使用IP地址标识。当然也可以使用掩码来指定一个网段的访问控制权限。下面是一个简单的例子:
<Limit LOGIN>
     Order allow,deny
     Allow from 192.168.1.96,trusted-domain.com
     Deny from all
</Limit>
这个例子的意思就是只允许主机192.168.1.96、trusted-domain.com和10.1.1.网段的主机登录。

2、 Deny
     Deny指令的用法和Allow的意思相反,用法相似,这里就不详细说明了。

3、 Order
     Order用来控制访问控制指令的优先权,在上面的例子中,Order allow,deny就表示先运用Allow规则然后再运用Deny规则。

4、 Limit
     在ProFTPD的访问控制中我们用的比较多的应该就是Limit了,Limit也是这四个指令中最复杂的。Limit指令是用来控制命令和行为的,它有三种参数类型:原始FTP命令、FTP命令组和ALL关键字。FTP命令组是多个原始FTP命令组合起来的,可以实现一定功能的命令集合。FTP命令组主要包括DIRS(列出目录)、LOGIN(登录)、READ(可读)、WRITE(可写)。这三种参数是有优先级的:原始FTP命令  > FTP命令组 >  ALL关键字。也就是说,如果Limit指令的参数中既有原始FTP命令也有FTP命令组,那么就只有原始FTP命令起作用而FTP命令组就会被忽视掉。
     Limit指令一般用在<Directory></Directory>标记间。在ProFTPD下子目录会继承父目录的属性,这就意味着用在<Directory></Directory>标记间的Limit指令不仅会控制指定目录的访问权限而且会控制该目录下的所有子目录及文件的访问权限。Limit可以用来限制某个目录下的命令,但是不可以覆盖目录的系统权限。也就是说Linux系统权限仍然起作用。如果设置了目录test的<Limit>允许写,但是该用户对test目录只有读权限,这时该用户就不能向test目录写入。
     在<Limit></Limit>标记块中,除了可以使用Allow、Deny、Order指令外,还可以使用AllowUser、AllowGroup、AllowAll、AllowClass、DenyUser、DenyGroup、DenyAll和DenyClass等指令。

5、实例
1、 指定某个目录只能由管理员删除,其他用户只能上传下载
  <Directory /path/to/dir>
    <Limit DELE>
      AllowUser ftpadm
      DenyAll
    </Limit>
  </Directory>

2、 指定某台主机对某个目录的访问权限
<Directory  "/path/to/dir ">
        <Limit WRITE>
                DenyAll
        </Limit>
        <Limit WRITE>
                Order allow,deny
                Allow from 192.168.1.93
                Deny from all
        </Limit>
        <Limit READ>
                Order allow,deny
                Allow from 192.168.1.96
                Allow from 192.168.1.93
                Deny from all
        </Limit>
</Directory>
      这里实现了主机192.168.1.93对目录/path/to/dir有读写权限,而主机192.168.1.96只有只读权限。在这里需要说明的是,在<Directoryt></Directory>块中所有的命令默认都是允许的。上面的例子中首先对所有用户关闭WRITE,READ命令,然后再对指定的主机打开相应的命令。这里注意<Limit READ>下的Allow from 192.168.1.93语句,如果删除这条语句那么主机192.168.1.93就不可以下载,也就是说主机192.168.1.93就会没有READ权限。即使你在<Limit WRITE>里加上READ(<Limit READ WRITE>)也不行。

3、 只允许匿名用户登录
  <Limit LOGIN>
         DenyAll
  </Limit>

  <Anonymous ~ftp>
         <Limit LOGIN>
                AllowAll
         </Limit>
  </Anonymous>
LOGIN命令用来限制登录,该命令对于<Directory>块是无效的。像下面这种使用方式是无法工作的:
  <Directory /some/path>
         <Limit LOGIN>
                enyUser foo
         </Limit>
  </Directory>

6、总结
继承性
    子目录会继承其父目录的属性。
优先级
    优先级由大到小的顺序:
    原始FTP命令(LIST  DELE等)  >  命令组(DIRS  READ  WRITE)  >  ALL关键字
访问控制的应用顺序
    不论出现顺序如何,先应用拒绝(Deny),后应用允许(Allow)
系统权限
    Linux系统权限仍然起作用。如果设置了目录test的<Limit>允许写,但是该用户对test目录只有读权限,这是该用户就不能向test目录写入。
默认值
在<Directory></Directory>块中,默认是允许所有的命令和操作。
相关阅读 更多 +
排行榜 更多 +
Event Horizon

Event Horizon

飞行射击 下载
Counter Terrorist Sniper Shoot

Counter Terrorist Sniper Shoot

飞行射击 下载
Special Agent

Special Agent

飞行射击 下载