proftpd 安装和配置

权限这块很难搞,搞到凌晨4点,累死了

ubuntu 安装配置 proftpd

安装 proftpd 和 ldap 的 mod

apt-get -y install proftpd-basic proftpd-mod-ldap

创建 ftp 存储目录

mkdir -p /data/ftp
chown proftpd:nogroup /data/ftp
chmod 750 /data/ftp

修改基本配置文件 /etc/proftpd/proftpd.conf

# 第 36 行,指定通过 nogroup 连接的用户根为 /data/ftp
DefaultRoot     /data/ftp   nogroup
# 使用户登录进入的目录,默认为 ~
DefaultChdir    /data/ftp

# 第 40 行去掉注释,不强制使用 /etc/shell 登录
RequireValidShell             off

# 注释第80行,LDAP 登录需要
# PersistentPasswd              off

# 第 134 行去掉注释加载 ldap配置文
Include /etc/proftpd/ldap.conf

修改 modules 配置文件 modules /etc/proftpd/modules.conf

# 去掉注释, 第25行
LoadModule mod_ldap.c

# 去掉注释, 第58行
LoadModule mod_quotatab_ldap.c

修改 ldap 配置文件 /etc/proftpd/ldap.conf

# 修改 ldap 连接属性
LDAPServer 192.168.10.10:389
LDAPBindDN "cn=admin,dc=huali-tec,dc=com" "admin"
# LDAPUsers dc=huali-tec,dc=com (&(uid=%u)(objectclass=posixAccount))
LDAPUsers dc=huali-tec,dc=com (&(cn=%u)(objectclass=posixAccount))
LDAPAuthBinds on

# 强制用户登录 ftp 时,在 `/data/ftp/user`  下创建自己的目录,权限为自己所有,其他人无法访问
CreateHome on
LDAPGenerateHomedir on
LDAPGenerateHomedirPrefix /data/ftp/user
LDAPForceGeneratedHomedir on

# 为目录列表中的用户组成员身份和GID启用LDAP查找
LDAPGroups "ou=group,dc=huali-tec,dc=com" group-name-filter-template: "(cn=%u)(objectclass=posixGroup))", gid-number-filter-template: "(gidNumber=%u)(objectclass=posixGroup))", member-user-filter-template: "(memberUid=%u)(objectclass=posixGroup))"

至此启动 proftpd 服务即可通过 ldap 访问 ftp
权限控制是系统账户的级别,ldap 的用户需要配置成于系统中用户相应的 UID GID

假设需求:

  • ldap 中有两个用户 guojing huangrong 分别为市场部和财务部 技术部 市场部
  • 用户 guojinghuangrong 能访问公共目录 public 和自己部门的目录
  • 无法访问其它目录

实现:

# 1. 在 ldap 中创建两个组,gidNumber 分别为 10001 和 10002,注意尽量不和系统中原有的用户冲突
# 2. 在 ldap 中创建两个用户,uidNumber 分别为 20001 和 20002,并加入到先创建的两个组中
# 3. 创建三个目录,分别为 jishubu caiwubu public
mkdir -p /data/ftp/jishubu
mkdir -p /data/ftp/shichangbu
mkdir -p /data/ftp/public
# 4. 分别配置三个目录的权限
chmod 770 /data/ftp/*           # 组内成员可读写,其它用户无法访问 
chmod 777 /data/ftp/public      # public 所有用户可读写
chown :10001 /data/ftp/jishubu
chown :10002 /data/ftp/shichangbu

# 如果需要对用户对自己的目录可读写,其他人无法查看,可以给用户目录设置成 700
# 再将目的的属主设置成自己
# chmod 700 /data/ftp/user/guojing
# chown guojing /data/ftp/user/guojing

特别说明: 所有通过 ldap 连接 ftp 都默认有 nogroup 组的权限,GID 为 65534

proftpd 对 ldap 账户权限的控制

通过系统账户和目录的权限去控制不够精细,我们配置更细致的权限,这也是我们选用 proftpd 的初衷。

参考官方配置文档:http://proftpd.org/docs/directives/linked/configuration.html

假设需求:

  • ldap 中有两个用户 guojing huangrong 分别为市场部和财务部 技术部 市场部
  • 用户对自己的家目录有所有权,其它用户无法访问
  • 用户 guojinghuangrong 能访问公共目录 public 和自己部门的目录
  • 无法访问其它目录

创建相关目录

mkdir -p /data/ftp/jishubu
mkdir -p /data/ftp/shichangbu
mkdir -p /data/ftp/public
mkdir -p /data/ftp/user
chmod 770 /data/ftp/*
chown proftpd:nogroup /data/ftp/*

针对不同目录设置权限,编辑 /etc/proftpd/ldap_user.conf ,写入以下内容:

<Directory /data/ftp>
    <Limit READ DIRS>
        AllowAll
    </Limit>
</Directory>

<Directory /data/ftp/public>
    <Limit READ WRITE DIRS>
        AllowAll
    </Limit>
</Directory>

<Directory ~>
    <Limit READ WRITE DIRS>
        AllowALL
    </Limit>
</Directory>

<Directory /data/ftp/shichangbu>
    <Limit ALL>
        DenyAll
        AllowGroup shichanbu
        AllowUser huangrong
    </Limit>
</Directory>

<Directory /data/ftp/jishubu>
    <Limit ALL>
        DenyAll
        AllowUser guojing
    </Limit>
    <Limit READ DIRS>
        AllowGroup jishubu
    </Limit>
</Directory>

关于 Limit 的一些说明:

限制要控制的命令或操作
限制流从上至下
CWD 更改工作目录
MKD/XMKD  创建目录
DELE 删除文件
READ  * 所有处理读取的命令(不包括目录列表)
WRITE * 处理文件或目录写入/创建/删除的命令
DIRS  * 处理目录列表的所有命令
ALL * 相当于(READ WRITE DIRS)优先级最低,不会覆盖另一个命令组的限制