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 分别为市场部和财务部 技术部 市场部
用户 guojing 和 huangrong 能访问公共目录 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 分别为市场部和财务部 技术部 市场部
用户对自己的家目录有所有权, 其它用户无法访问
用户 guojing 和 huangrong 能访问公共目录 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) 优先级最低, 不会覆盖另一个命令组的限制
来源: http://blog.51cto.com/maoxian/2153866