新接手一台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/glftpd2. 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:
Recent Comments