我有一个公司内部网,最近我将其从 Novell 迁移到 Linux。我正在尝试设置用户权限,但快要疯了。
有几十个部门,每个部门在 Web 根目录中都有一个专用目录。还有用于 css、模板、图像等的共享目录。
我希望所有用户对整个站点都有只读访问权限,并且对其部门的目录只有读写访问权限。
我已经尝试过的:
为每个目录设置一个用户组,并根据需要将用户分配到该组。遇到权限和所有权继承问题。
创建了一个测试用户,然后在测试用户的主目录中创建了一个 htdocs 文件夹。然后创建一个链接,将其重命名为部门名称,并将该链接放入主 htdocs 目录中。读取权限完美,但使用 Dreamweaver 或 FTP 客户端从 htdocs 根目录时,我无法列出该目录的内容。
我觉得我遗漏了一些简单但关键的信息。选择性地设置对 htdocs 子目录的读写权限不可能这么困难。
对于习惯使用 Novell 和 IIS 的非经验用户有什么建议吗?
答案1
假设销售部有 Sue 和 Sam,人力资源部有 Harry 和 Hermione。
- 创建用户 sue、sam、harry、hermione
- 创建人力资源和销售小组。
- 将 sue 和 sam 添加到小组销售。
- 将哈利和赫敏添加到 hr 组。
/var/www/htdocs
在†中创建 hr 和 sales 文件夹- 将文件夹 hr 的组更改为组 hr
- 同上销售
- 设置组位,以便在销售和人力资源中创建的文件继承组
- 设置权限以便组可以写入,其他人只能读取
- 为了方便起见,从赫敏和哈利的主目录创建到 hr 的软链接
- 销售人员也一样。
- 根据需要编辑 Apache 配置(例如 sales.example.com 的基于名称的虚拟服务器)
有用的命令(参见手册页)
- 建立目录
- chown
- 组
- 群组添加
- 用户添加
- 群组模式
- 在
† 或者 Apache 的文档根目录
答案2
Linux 中的文件权限可以追溯到 Linux 所起源的旧 Unix 根源。也许可以参考以下指南TuxFiles.org 上的这个或者本材料来自 TLDP可以帮助您了解基本的权限结构。
答案3
与传统的 UNIX 权限模型相比,ACL 可能更能满足您的需求。
为所有文件夹创建一个只读访问权限组,然后为每个部门创建一个组。然后使用setfacl
(“设置文件 ACL”)为只读组授予对所有文件夹的读取权限,并为每个组授予对其部门文件夹的写入权限。
不幸的是,您需要查找 的语法setfacl
。我不太熟悉它。为了帮助您入门,下面是我的 cronjob,它使服务器上的 apache 用户能够完全访问每个用户主目录中的 public_html 目录:
#!/bin/sh
HOME_DIR="/home"
WWW_DIRNAME="public_html"
WWW_USER="www-data"
setfacl -Rm "u:${WWW_USER}:rwX,d:u:${WWW_USER}:rwX" "$HOME_DIR/*/$WWW_DIRNAME"
我将其放入 cron 作业中,以便我放入 public_html 目录的任何文件都很快可供 apache 访问。
答案4
按照群组的想法,为所有群组创建所需的所有目录。
使 Web 根目录下的所有内容归 www-data 或 apache 所有,或者您的 Web 服务器以任何用户身份运行,以便它具有访问权限。这将使所有内容归 Web 服务器所有,并成为 Web 服务器组的一部分:
前任:chown -R www-data:www-data /var/www
然后更改每个组文件夹的组:
前任:chown -R www-data:group1 /var/www/group1
一旦所有文件夹都有正确的组,您就可以为它们添加组读/写访问权限:
前任:chmod -R g+rw /var/www/*