Linux下多FTPD的共存,以及突破glftpd的chroot

Linux, 技术心得 Add comments

  新接手一台FTP Server,其上本来的FTPD为vsftpd+ncftpd,vs做前台,仅提供匿名下载,nc做后台,仅给管理员使用。nc很不稳定,效率不高,功能单薄,我准备换成glftpd。但是糟糕的是,ncftpd原来只有一个管理员账号,所有的文件都属于这个用户,而且很多文件权限不是755,甚至只有644。有root当然可以chmod和chown,但是,原来1.5T的数据,且不是高速更新的FTP,如何chown?
  glftpd安装的时候,被我装在了 /jail 下,选择了“封闭环境”安装。但是当我尝试把别处的目录mount到它下面的时候,就遇到权限的问题,不仅不能删除很多来自ncftpd的文件,甚至部分文件根本无法访问。最糟糕的是,glftpd下载的时候会写文件(我后来才知道可以关掉这个功能),每下载一次,它会把该文件的GID加一,以方便计算下载总数。
  于是我们的问题就归结成了,如何让glftpd获得UID不是100(新建用户默认值)的文件的所有权?
  翻看glftpd的文档,发现了一个本来应该不相干的内容:如何突破glftpd的chroot。我们都知道glftpd是用root启动的,但是启动后它会立刻换成较低权限的用户去运行,并且将该用户的root限定在某一个固定的目录下(在我的安装中,默认是“封闭环境”的根目录,即 /jail )有的人需要突破这种限制,比如访问上层目录下的文件。我本来想用mount解决这个问题的,但是它的步骤说明吸引了我:

1. Change all instances of /site to /glftpd/site in your config file
把glftpd.conf配置文件中所有的路径都换成绝对路径,在此,我是 /jail/glftpd

2. Add the pwd_path and grp_path settings to the config file:
pwd_path /glftpd/etc/passwd
grp_path /glftpd/etc/group
修改passwd和group文件的路径,配置文件中默认没有这两行的

3. Change datapath from /ftp-data to /glftpd/ftp-data
还是改路径

4. Edit /glftpd/etc/passwd and change every user’s homedir from /site to /glftpd/site.
修改passwd文件,将家目录改成绝对路径

5. Edit /glftpd/ftp-data/users/default.* and change the HOMEDIR line from /siteto /glftpd/site.
修改新建用户的默认家目录

6. You also need to change paths in some help files in /glftpd/ftp-data/help,possibly some more in /glftpd/ftp-data/text.
我看了所有的这些文件,应该没什么要改的

后面是最关键的:

Make a user, lets say root
site adduser root root *@127.0.0.1
site grpadd wheel root group (or root, depending on the OS you are running)
 
Now go edit /glftpd/etc/passwd, you will see that glftpd has the 0:0 uid and gid
just give it 10:100 or 20:200 and give root 0:0, also change root's homedir -
default is /site, change it to /.
 
Now edit the group file and move the number of glftpd to 100 or 200 and change roots to 0.

  看到了么,我就是在这发现了突破口!原来glftpd的用户也是可以自定义UID和GID的,那么我只要修改passwd文件,让所有的管理员都拥有root(这样不安全)或者原来的数据所有者(ncftpd的管理员帐户)的GID和UID就行了。我就是这么做的

  这样,我既可以访问 /jail 以上的目录(/home/ftp/),不用mount了,也可以继续使用原来的数据,不用chmod和chown了。只要使用相同UID和GID的帐号,两个FTPD完全可以共存。(本来准备把所有文件下载再上传呢……谢天谢地)

  要说明的是,你当然可以使用0:0做你的管理员帐号的UID和GID,但是这样不太安全,加上glftpd一直有chroot泄漏的传言(据说已修复),所以还是设定一个特定的用户为妙。另外,这样不再能使用glftpd的一个特色功能:设定用户的delown和renameown权限,因为所有用户看起来都一样了。但经过实际实验,基于路径的权限分配是没有问题的,基于flag的权限分配也很正常,但是有可能会在site who的时候,看到一个本不属于某个组的成员,显示在这组里(比如我的一个DirAdmin显示成SuperAdmin),但是不会真正拥有权限,放心。

Related posts:

  1. Directory Opus 联网验证被封证书后,清除安装痕迹的方法
  2. 从拖延症说开去——到底谁才是被信息洪流击倒的人?

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">


LilyStudio & WordPress & N.Design Studio
Entries RSS Comments RSS Log in