![ubuntu 12.04 上的 vsftpd chroot opps](https://linux22.com/image/1114274/ubuntu%2012.04%20%E4%B8%8A%E7%9A%84%20vsftpd%20chroot%20opps.png)
我不熟悉基于 deb 的系统,因此如果解决方案很简单,我深表歉意。
我正在尝试设置 vsftpd 以将用户限制在他们的主目录中。我收到 500 OOPS:vsftpd:拒绝在 chroot() 内以可写 root 身份运行
我研究了这个问题,发现常见的解决方案是使用 thefrontiergroup 提供的反向移植,如下所示:
sudo add-apt-repository ppa:thefrontiergroup/vsftpd
当我这样做时,我收到一个 python 错误:
You are about to add the following PPA to your system:
vsftpd 2.3.5 with the allow_writeable_chroot feature backported from vsftpd 3.
More info: https://launchpad.net/~thefrontiergroup/+archive/vsftpd
Press [ENTER] to continue or ctrl-c to cancel adding it
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/dist-packages/softwareproperties/ppa.py", line 99, in run
self.add_ppa_signing_key(self.ppa_path)
File "/usr/lib/python2.7/dist-packages/softwareproperties/ppa.py", line 132, in add_ppa_signing_key
tmp_keyring_dir = tempfile.mkdtemp()
File "/usr/lib/python2.7/tempfile.py", line 322, in mkdtemp
name = names.next()
File "/usr/lib/python2.7/tempfile.py", line 141, in next
letters = [choose(c) for dummy in "123456"]
File "/usr/lib/python2.7/random.py", line 274, in choice
return seq[int(self.random() * len(seq))] # raises IndexError if seq is empty
ValueError: cannot convert float NaN to integer
尝试寻找另一种解决方案,我发现建议更改主目录的权限,如本文中所述vsftpd-将用户限制在主目录但是,这样做会导致大量的手动权限重置,因为我希望每个用户的子目录都可以通过 apache 访问,就像 UserDir apache 配置中描述的那样http://httpd.apache.org/docs/2.2/howto/public_html.html
最后,我希望能够添加用户 foo,并神奇地让 foo 拥有 /home/foo 的完全 R/W 权限,而不能看到文件系统的任何其他部分,http://xxxx/~foo/任何人都可以访问,如果我将他们的 shell 从 nologin 更改为 bash,他们也可以访问 shell。
Ubuntu 12.04 LTS,vsftpd 2.3.5
请提供任何建议...我很困惑!
答案1
我只是在这里猜测,因为你的情况并不完全相同,但是......
apt-get install python-software-properties
(也许apt-get update python-software-properties
)?
这是我设置的 12.04 系统上的先决条件步骤,但我也遇到了“add-apt-repository:未找到命令”错误,而不是 python 错误。正是这些错误让我认为你的问题出在 python 上,因为在我安装了 python-software-properties 后,该命令就成功执行了。
我能想到的唯一替代方案(尝试/修复我自己的设置已经太晚了)不是添加外部存储库,而是将每个人的主目录设为 /home/,然后修改所有其他目录的权限,以便他们在读取 /home/ 时只能看到“foo”目录。他们仍然必须导航到该目录,否则您必须在登录后以某种方式编写脚本更改他们的 CWD,但是当初始屏幕只显示“foo”并且不可写时,如果使用 GUI,则只需“cd foo”或单击 foo 文件夹,影响应该很小。显然这并不像我想象的那么简单,当我想到具有 NTFS 权限的 IIS 时,我想到了一个确定是否可以看到目录的权限设置。我确实发现 vsftpd.conf 中有一个名为“hide_files”的选项,它可能能够通过精心选择的术语来实现这一点(它允许您指定正则表达式,但我不知道您是否可以执行诸如根据当前用户的登录扩展变量以使其对每个用户都不同...)