多年来,我一直试图假装我知道unix权限是如何工作的,但事实上,我什么都不明白。
www-data 是 apache2 用户 我自己的用户是 my_user,它具有 sudo 访问权限 我正在使用 rootsudo su -
www-data 拥有/var/www/html/
(755 www-data:www-data)的所有权限
我无法作为 www-data 连接,并且我想使用 my_user 将 PhpStorm 部署在此服务器上。
因此,默认情况下,所有文件夹都是 rx,所以我允许 www-data 的组具有完全访问权限(作为 root)
chmod -R g+rwx /var/www/html/project/themes
然后我将我的用户添加到该组(作为 root)
usermod -a -G www-data my_user
现在,记录的 my_user 和 phpstorm 部署仍然返回“权限被拒绝”。我断开用户连接,重新连接,现在可以正常工作了...发生了什么事,伙计?因此,我重新启动 PhpStorm,现在可以正常工作了。
我将新文件夹推送到服务器上,现在列出文件
ls -la /var/www/html/project/themes
drwxrwx--- 2 my_user my_user 4096 二月 15 09:51 新文件夹
哇,伙计,我真的需要 www-data 才能读取它,编辑它,然后运行它......我希望新的文件夹和文件归其所有,www-data:www-data
以使其正常工作。但也许我错了......
那么,关于这些权限问题的最佳且明确的解决方案是什么?
答案1
所以 Unix/Linux 权限是根据数字和加法来工作的,好吗?一旦你理解了这一点,事情就非常简单了。就权限而言,您可以拥有三种可能的权限并可以任意组合:读取(表示为 r)、写入(表示为 w)和执行(表示为 x)。这些是您ls -l
在终端中键入内容时出现在左侧列中的字母表。
现在,你给谁这些权限呢?谁拥有这些权限,如何查看这些权限?好吧,你又分为三个分类:
- 用户(即拥有该文件的用户,即创建/接管该文件的用户)
- 组(文件所属的用户组)
- 其他(不属于该文件组的用户)
现在,为了分配和修改这些权限,这些字母也被分配了数字:
r = 4
w = 2
x = 1
在我尝试解释之前目的对此,让我直接解释一下它是如何工作的,是吗?那么,假设您有一个名为 的文件file.sh
,好吗?您想授予它一些权限,并且您是超级用户,并尝试按该顺序定义 ugo 的权限,因为这是惯例。你可以使用 rwx,但是如果你只想给用户读写权限,而不给任何人执行权限怎么办?如果只想授予读取和执行权限,而不授予写入权限(只读可执行文件)怎么办?这就是数字发挥作用的时候。
r = 4
r + w = 6
r + x = 5
r + w + x = 7
所以,如果你想给每个人(ugo)读写权,你就可以$ chmod 666 file.txt
。
你想给每个人阅读和执行的权利,你去吧$ chmod 555 file.txt
。
您想将只读权限授予每个人,但将所有权限授予所有者,您可以$ chmod 744 file.txt
。
你想给每个人所有的权利,你去$ chmod 777 file.txt
数字 666, 555, 744, 777 总是按照 ugo 的顺序:用户-组-其他。
您还可以使用 +r、+w 和 +x 添加个人权限,并使用 -r、-w 和 -x 删除个人权限,尽管这是一个更费力的过程,正如您似乎正在做的那样。
我建议您通过进入目录并执行 a$ chmod 777 *
并将所有权限授予每个人来解决您的问题。这是一个粗略且有些不安全的修复,但它每次都适用于此类问题,并且可以解决您的问题,直到您找出是谁不是授予这些权限,然后追溯删除这些权限。
希望这可以帮助。