3

我在Homebrew中遇到权限问题,这导致我对 RubyPathname.writable?Pathname.writable_real?.

机一

在这台机器上我没有权限问题。Dir/usr/local可由组成员写入admin

$ ls -ld /usr/local/
drwxrwxr-x  18 root  admin  612 25 Jun 09:24 /usr/local/

我在admin群里:

$ whoami
martin
$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root martin

并且无论我使用 Ruby 还是 Ruby 都会writable?报告writable_real?

$ irb
>> require "Pathname"
=> true
>> Pathname('/usr/local').writable?
=> true
>> Pathname('/usr/local').writable_real?
=> true

机器二

然而,在这台机器上,我有一个问题,即使/usr/local该组的成员可以写admin

$ ls -ld /usr/local/
drwxrwxr-x  18 root  admin  612 24 Jun 23:12 /usr/local/

我在admin小组中:

$ whoami
mgd
$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root mgd sgd

Ruby 的Pathname.writable?报告/usr/local不可写的:

$ irb
>> require "Pathname"
=> true
>> Pathname('/usr/local').writable?
=> false
>> Pathname('/usr/local').writable_real?
=> true

为什么?

任何人都可以解释其中的区别吗?

根据文档,这两个功能之间的区别是:

  • writable?: 调用进程的有效用户id可以写路径吗?
  • writable_real?: 调用进程的真实用户id可以写路径吗?

我仍然不明白为什么Pathname.writable?在(显然)相同的条件下表现不同。

4

0 回答 0