我找不到有关如何设置共享托管服务器的教程。
我缺少的部分是为网站管理员设置权限的方式,以便他们看不到彼此的目录。
上一篇:
OVH 如何配置其 SSH 服务器来执行此操作?
我正在尝试设置一个多用户 Web 服务器,为此我希望每个用户都可以使用 SSH 和 SFTP 连接,但最重要的是,只能看到自己的目录。 OVH 设法做到了这一点,但经过 6 个小时的搜索和尝试(创建 chroot 监狱),我不明白他们是如何做到的。也许这很微不足道,但我就是看不到。
当我登录 OVH 帐户时,我可以执行以下操作:
pwd
给我我的主目录 (/homez.52/creak
)/homez.52/creak
实际上是一个符号链接/home/creak
- 我可以
cd
进入所有常见的 Linux 目录(/bin
、、、 ..)/usr
,/home
但每次ls
都会出现此错误:ls: cannot open directory .: Permission denied
/homez.52/creak
我可以同时浏览我的所有文件/home/creak
他们是如何做到这一点的? chroot?前交叉韧带?
谢谢
答案1
在共享网络托管环境中,有几个问题需要立即解决。
关于目录权限和只能访问您的文件:您想要做的是设置主目录权限,以便“其他”组没有任何权限。请记住,需要 eXecute 权限才能 cd 进入目录,但该权限本身不允许您读取其内容。因此,/home应该由root拥有并具有rwxr-x--x,因此用户只能“盲目地”转到他们的主文件夹,而无法查看周围并知道系统中有多少用户。它看起来像这样(为了清楚起见,省略了日期、尺寸等):
# ls -la /home
drwxr-x--x root root .
drwxr-xr-x root root ..
drwxr-x--- usr1 usr1 usr1
drwxr-x--- usr2 usr2 usr2
...
如果您确实不希望用户能够读取诸如 等目录的内容/bin
,只需删除“其他”组的“读取”权限位即可。只要他们事先知道完整的路线,就不会影响他们使用其中包含的二进制文件的能力。
对于 SSH 和 FTP 访问,如果您正确配置文件系统权限,那么任何像样的 SSH 或 FTP 实现都已经是安全的。我推荐 vsftpd 用于 FTP,当然推荐 OpenSSH 用于 SSH,但我绝不暗示它们是唯一可用的正确选项。请记住调整这些服务的配置选项(特别是,禁止通过 SSH 进行 root 登录,可能禁止任何具有 sudo 功能的人进行密码登录,等等)
棘手的部分是正确配置您的 Web 服务器,尤其是当您必须为动态网站运行 CGI 脚本时。如今,每个人和他们的祖母都想要 PHP,而您确实不能以/home/dumbuser/public_html/php_shell.php
生成 Apache/Nginx 的同一用户身份运行,对吗?
如果您正在运行 Apache Web 服务器,这里可能的解决方案是使用苏执行模块,这将使您的 CGI 脚本以拥有可执行文件的用户身份运行(想想 setuid 位)。要允许 HTTP 服务器访问实际文件,请考虑将服务器运行的用户(典型值www-data
)添加到系统上的每个用户组(“每个用户组”是指使用共享环境的每个用户,而不是系统上的每个用户帐户)。系统)。
请注意,这是仅仅浅谈正确配置和强化共享服务器必须完成的所有工作。必须完全理解每个正在运行的服务的配置文件,并且您可能必须修改它们以满足您的需要。特别是,您可能需要花一周时间阅读 Web 服务器的配置选项并在开发/测试环境中进行尝试。
答案2
如果您没有r
目录的权限,而只有x
权限,则无法“扫描”该目录,但可以访问其中您知道名称的任何文件。
如果这样做,ls -ld /bin
您可能会看到模式设置为drwxr-x--x
查看“其他”/bin
能够使用其中的程序,例如/bin/ls
,但不能访问(查看)扫描中的目录。
用户之间,即/home/*
目录之间,也可以放弃x
权限,从而完全禁止交叉访问。