CentOS 7 中的用户权限问题:“权限被拒绝”

CentOS 7 中的用户权限问题:“权限被拒绝”

我以为我知道如何在 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 的建议,但如果您计划运行安全服务器,那可能不是最佳选择。

相关内容