因此,对于在我的服务器上托管网站的客户,我创建了用户帐户,并在 /home 内设有标准主文件夹。
我为所有用户设置了一个 SSH jail collective
,因为我真的反对使用单独的 FTP 服务器。然后,我安装了 ACL 并将 acl 添加到我的/etc/fstab
— 一切顺利。
- 我 cd 到
/home
和chmod 700 ./*
。- 此时,用户无法看到其他用户的主目录(耶),但 apache 也看不到它们(嘘)
- 。我跑了
setfacl u:www-data:rx ./*
。我也尝试了单独的目录。 - 现在 apache 可以再次看到这些站点,但所有用户也都可以。ACL 将主文件夹的权限更改为
750
。
我如何设置 ACL 以便 Apache 可以看到用户主文件夹中托管的站点,并且 2. 用户无法看到自己主文件夹之外的内容和其他人的文件。
编辑:更多详细信息:
输出结果chmod -R 700 ./*
sh-3.2# chmod 700 ./*
sh-3.2# ls -l
total 72
drwx------+ 24 austin austin 4096 Jul 31 06:13 austin
drwx------+ 8 jeremy collective 4096 Aug 3 03:22 jeremy
drwx------+ 12 josh collective 4096 Jul 26 02:40 josh
drwx------+ 8 joyce collective 4096 Jun 30 06:32 joyce
(其他用户或 Apache 无法访问)
setfacl -m u:www-data:rx jeremy
(现在成员 apache 和 collective 也可以访问 —— 为什么 collective 也可以访问?)
sh-3.2# getfacl jeremy
# file: jeremy
# owner: jeremy
# group: collective
user::rwx
user:www-data:r-x
group::r-x
mask::r-x
other::---
解决方案
最终我所做的是:
chmod 755 *
setfacl -R -m g::--- *
setfacl -R -m u:www-data:rx *
答案1
尝试将面具改成“---”?
或者用 setfacl 撤销组权限。chmod 和 setfacl 不起作用太好一起。
答案2
嗯,如果没有完全 chroot,您就无法阻止用户查看“主目录之外的内容”,因为他们始终能够查看系统目录/usr/bin
(因为程序就是这样运行的)。我不明白setfacl
您给出的命令将如何产生所示的结果;您能否在问题中给出用户主目录的getfacl
输出?ls -l
答案3
对于 jailing,较新版本的 ssh 支持 ChrootDirectory 选项。对于仅限 scp 的连接,我使用了scponly过去曾成功过。
至于 apache 是否看到这些文件,您没有完全正确地设置 chmod。请尝试以下操作(假设 apache 使用 apache 组):
cd /主页
chmod -750 * # 所有者可以执行所有操作,组成员可以读取,其他人则无权执行任何操作
chgrp -R apache * # 通过将组更改为 apache,apache 现在可以读取文件。
请记住,您不想将普通用户添加到 apache 组。
答案4
hayalci 的评论
chmod 和 setfacl 不能很好地协同工作。
帮助很大。我没有使用 CHMOD 来阻止其他组访问数据,而是使用了:
cd /home
setfacl -m g::0 joeuser # Removes permissions for the owning group.
setfacl -m g:www-data:r joeuser # Adds read permissions for Apache
cd joeuser/joeuser.com/static/
setfacl -m g:www-data:rwx uploads # So apache can write to the uploads directory.