![CentOS 7 中的用户权限问题:“权限被拒绝”](https://linux22.com/image/7651/CentOS%207%20%E4%B8%AD%E7%9A%84%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98%EF%BC%9A%E2%80%9C%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D%E2%80%9D.png)
我以为我知道如何在 Linux 中设置权限。我显然不这么认为。
我有一个名为“web3”的用户。该用户由 ISPConfig(类似 CPannel 的服务器管理应用程序)自动创建。
我还在服务器上安装了一个名为“Drush”的应用程序。我以 root 身份登录时安装了“Drush”。该应用程序位于:
/root/.composer/vendor/drush/drush/drush
该文件及其包含的文件夹具有以下权限:
-rwxr-xr-x 1 root root
drwxr-xr-x 9 root root
由于该文件允许每个人读取和执行权限,为什么每次我以“web3”用户身份登录并尝试运行上述应用程序时,我都会收到以下错误消息:
/root/.composer/vendor/drush/drush/drush: Permission denied
我以前遇到过这个问题,但我求助于向遇到问题的用户授予 sudo 完全 root 权限。在本地开发环境中,这并不是什么大问题。我现在正在管理自己的专用服务器,而这个大锤解决方案行不通。
我究竟做错了什么?
我将不胜感激任何帮助!
答案1
/root/
是 root 的主目录。权限/root/
最好是 700,防止除 root 之外的任何人遍历其下面的整个目录树。
目录树上层的权限阻止您以非根用户身份运行二进制文件。
安装任何东西/root/
是不寻常的,您通常会将多个用户使用的可执行代码安装到/opt/
或另一个目录中。
所以这是两个主要的“错误”。您需要找到一个更好的位置来安装代码,并确保您想要使用它的用户可以访问完整路径。
最后,正如其他人指出的那样,虽然您通常需要 root 身份才能完成安装,但只有在绝对必要时,生成的文件才应由 root 拥有。在许多情况下,会创建特定用户(例如 www-data 用户或 oracle 用户),这会在代码遭到泄露时限制暴露。我不知道您的应用程序,但可能值得将其安装为 web3 用户或安装为 root,但稍后将权限更改为专门为该任务创建的非特权用户。
您应该抵制打开权限来/root/
修复问题的冲动,这sudo
是解决问题的权宜之计。问题是您不应该将可执行代码安装到 root 的主目录中。
答案2
仅检查包含文件夹的权限是不够的:您需要检查所有更高级别文件夹的权限,直到根目录。例如,像这样:
# ls -ld /root/.composer/vendor/drush/drush/drush \
/root/.composer/vendor/drush/drush \
/root/.composer/vendor/drush \
/root/.composer/vendor \
/root/.composer \
/root \
/
您可能会发现该/root
目录的权限为 700(或drwx------
),这会阻止web3
用户在该路径上继续操作。让其他用户访问该用户的主目录并不是一个好主意,尽管从技术上讲,如果您认为绝对必要,您root
可以为其授予权限 711 ( )。drwx--x--x
但这也可能对您没有帮助......
您使用的是 CentOS 7,它默认启用 SELinux。
RHEL/CentOS 有一个默认的 SELinux 配置,通常对普通用户帐户的影响可以忽略不计,但它可以对系统服务(例如 Web 服务器)施加一些严格的限制。
在 SELinux 下,可以限制进程及其所有后代的某些操作 - 独立于传统的 Unix 风格的用户/组/权限系统。这些限制可以配置为在执行某些二进制文件时、对于某些系统用户以及多种其他条件自动“锁定”。
Web 服务器的默认 SELinux 限制之一是/var/www
阻止对专门启用的目录之外的任何内容的访问,除非使用专门启用的目录SELinux 布尔值,SELinux 规则集中的一种可切换选项。我认为这可能是阻止 web3 用户访问 Drush 应用程序的另一件事。
如果您希望 Web 服务器(或其任何后代,例如 PHP 解释器)访问不属于/var/www
其他用户且由其他用户创建的任何内容,则需要运行以下命令:
# setsebool -P httpd_read_user_content 1
在 RHEL/CentOS 上,每个系统服务都有一个额外的手册页,名为<service name>_selinux
,其中包含有关 SELinux 限制和该特定服务的布尔值的信息。这些手册页位于名为 的 RPM 包中selinux-policy-doc
:这是有关该包的更多信息。如果您使用的系统启用了 SELinux,您确实应该阅读您计划运行的所有服务的手册页:它们使处理 SELinux 变得简单所以容易多了。
当然,您可能会在互联网上找到很多有关如何禁用 SELinux 的建议,但如果您计划运行安全服务器,那可能不是最佳选择。