我以为我知道如何在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完全根权限。在当地的开发环境中,这不是什么大事。我现在正在管理我自己的专用服务器,而这个大锤解决方案是行不通的。
我做错了什么?
我很感谢你的帮助!
发布于 2016-05-25 17:23:00
/root/
是根目录的主目录。希望/root/
上的权限为700,防止除根之外的任何人遍历它下面的整个目录树。
目录树上的权限阻止您以非根用户的身份运行二进制文件。
将任何东西安装到/root/
中是不寻常的,您通常会将多个用户使用的可执行代码安装到/opt/
或其他目录中。
因此,这是两个主要的‘错误’的事情。您需要找到一个更好的位置来安装代码,并确保要使用它的用户可以访问完整的路径。
最后,正如其他人所指出的,虽然您通常需要成为root用户才能完成安装,但是如果绝对必要的话,生成的文件只能由root拥有。在许多情况下,创建特定的用户(例如www-data用户或oracle用户),这限制了代码被破坏时的暴露。我不知道您的应用程序,但可能值得将其安装为web3用户或将其安装为root用户,但稍后将权限更改为专门为该任务创建的非特权用户。
您应该抵制打开/root/
上的权限来解决这个问题的冲动,而sudo
是解决这个问题的挡箭牌。问题是不应该将可执行代码安装到根目录的主目录中。
发布于 2018-12-01 03:21:37
仅仅检查包含文件夹的权限是不够的:您需要检查所有较高级别文件夹的权限,直到根目录。例如,如下所示:
# 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风格的用户/组/权限系统。这些限制可以配置为在执行某些二进制文件时,对某些系统用户,以及在多种其他条件下自动“锁定”。
One服务器的默认SELinux限制之一是阻止对任何特定启用的目录(如/var/www
)的访问,除非使用SELinux布尔值( SELinux规则集中的一种可切换选项)专门启用。我认为这可能是阻止web3用户访问Drush应用程序的另一件事。
如果您希望web服务器(或它的任何后代,如PHP解释器)访问任何不是在/var/www
下并由其他用户创建的内容,则需要运行以下命令:
# setsebool -P httpd_read_user_content 1
在RHEL/CentOS上,每个系统服务都有一个额外的手册页,名为<service name>_selinux
,其中包含关于该特定服务的SELinux限制和布尔值的信息。这些手册页包含在一个名为selinux-policy-doc
:这是关于那个包裹的更多信息。的RPM包中--如果您使用的是启用了SELinux的系统,那么您确实应该为您计划运行的所有服务阅读这些手册页:它们使得处理SELinux变得非常容易。
当然,您可能会在互联网上发现许多关于如何禁用SELinux的建议,但是如果您计划运行一个安全的服务器,这可能不是最好的选择。
https://unix.stackexchange.com/questions/285461
复制相似问题