> 我急需知道 ftp时将用户限制在自家目录下的方法,
> 我用的是REDHAT5.1,据说chroot可以做到,但我不知道具体做法,

1 创建一个ftp guest组,用groupadd命令,通常就用ftp组(less /etc/group看看是否存在,
  如果装了ftp server的话都有)。
2 把这个用户加入到这个组中
3 修改/etc/ftpaccess文件,加入guestgroup的定义: guestgroup ftp
4 向这个用户的$HOME目录下拷贝必要的文件,主要是与ls有关的。一般的ls要Lib支持,你得
  重新编译ls,或把lib目录copy过去.或者拷贝ftp server带的ls,比如把/home/ftp/下的bin,
  etc,lib三个目录拷贝到这个用户的根目录下,并修改权限(chown username.ftp *)。有些ftp
  无须拷贝这些文件。
相关信息:
man ftpaccess 仔细阅读guestgroup这一项
man chroot
 

发信人: samuel (SAM), 信区: Linux
标 题: ftp限制用户访问目录的问题
发信站: 广州网易BBS站 (Wed Oct 14 16:52:10 1998), 转信

最近有很多人提到需要限制ftp用户的访问目录.
现在我做了一个程序来解决这个问题.

文件 ftp://studio.sinet.net.cn/pub/misc/homewrapper-alpha.tar.gz

使用:
1. 目前只能在RedHat下使用
2. 解开后把homewrapper.so, homewrapper.conf拷到/etc下
3. 如果你想重新编译的话, 用"make clean; make"
4. 修改/etc/homewrapper.conf, 把允许访问但不在限制目录
   (如不在登录目录)下的文件清单加到该文件中
5. 修改inetd.conf,用save.ftpd替代in.ftpd. save.ftpd在压缩包里.

save.ftpd内容:
#!/bin/sh
LD_PRELOAD=/etc/homewrapper.so
HOMEWRAP_PREFIX=\~/public_html
export LD_PRELOAD HOMEWRAP_PREFIX
#HOMEWRAP_DEBUG=1
#HOMEWRAP_LOGFILE=/tmp/homewrapper.log
#HOMEWRAP_ROOT=0
#export HOMEWRAP_DEBUG HOMEWRAP_ROOT HOMEWRAP_LOGFILE
exec /usr/sbin/in.ftpd $*

其中HOMEWRAP_ROOT=1时对root用户也作限制.否则root允许访问所有文件.
 

由于wu-ftpd的bug:
在调用initsetproctitle前错误的使用setproctitle,可能导至homewrapper无法工作.
解决办法:
1. 修改wu-ftpd source,把调用initsetproctitle前的dolog(&addr)掉用移到后面.
2. 也可使用HOMEWRAP_MOVEENV开关来对付此bug.

: : : : 我下载homewrapper 在redhat5.1上安装后,用户ftp登陆后出现
: : : : 错误提示
: : : : can't change directory /home/是不是我的安装有错,或是设置问题。望能详细告之!
: : : 如果使用save.ftpd应该没有问题
: : : 不能chdir到home是因为home在你许可的目录之外:
: : : 1. PREFIX不是以~打头,并设到home以下/以外.
: : : 主要有些shell要在~前加"\"防止赋值时扩展.
: : : 2. 并且没有设REMAP_HOME, 如果使用REMAP_HOME功能,
: : : 系统会把HOME定向到许可目录之下的.
: : :
: : 现在可以限制用户home目录了,但是用户ftp上来后无法看到自己的文件,
: : 望samuel兄指点一下,最好能详细讲述一下安装步骤。万分谢谢!
: 对不起, 有一点我忘了, 你要建一个文件/etc/homewrapper.conf
: 里面时一些允许访问的文件清单(以/结尾允许整个目录访问).
: /bin/sh
: /bin/ls
: /dev/null
: /etc/group
: /etc/localtime
: /etc/nsswitch.conf
: /etc/passwd
: /etc/termcap
: /etc/homewrapper.so
: /etc/homewrapper.conf
: /etc/hosts
: /lib/libnsl.so.1
: /lib/libnss_compat.so.1
: /lib/libnss_dns.so.1
: /lib/libnss_files.so.1
: /lib/libnss_nis.so.1
: /lib/libnss_nisplus.so.1
: /lib/libpam.so.0
: /lib/libpam_misc.so.0
: /usr/lib/terminfo/
:
谢谢SAM兄,现在已经搞定。
 

本文转自中文Linux论坛