我在 OS X 10.8.3 上遇到了 root 权限问题。此问题以多种形式表现出来。
在尝试执行 MacPorts 的自我更新后,这个问题变得清晰起来。以下问题https://stackoverflow.com/questions/15780321/macport-selfupdate-fails-code-23-xcode-command-line-tools-are-installed突出显示所看到的错误。
XCode 和 XCode 命令行实用程序已安装,并且已启用 root 用户。
关键是我无法以 root 身份进行更改,因为 root 似乎没有正确的权限。我尝试过对 /etc 和 /etc/local 中的任何内容进行 chown 和 chmod 操作,但总是出现“操作不允许”
我已遵循所有常规解决方案。磁盘实用程序 -> 修复权限,启用/禁用 root 用户,更改 root 用户密码,关闭机器电源。
bash-3.2$ chmod 775 base.tar
chmod: Unable to change file mode on base.tar: Operation not permitted
bash-3.2$ ls -la
total 129744
drwxr-xr-x 10 root admin 340 8 Apr 15:17 .
drwxr-xr-x 3 root admin 102 8 Apr 12:38 ..
-rw-r--r-- 1 root admin 9453803 8 Apr 12:30 PortIndex
-rw-r--r-- 1 root admin 512 8 Apr 12:31 PortIndex.rmd160
drwxr-xr-x 24 root wheel 816 31 Jan 17:30 base
-rw-r--r-- 1 root admin 3594240 8 Apr 15:01 base.tar
-rw-r--r-- 1 root admin 512 8 Apr 15:01 base.tar.rmd160
drwxr-xr-x 51 root wheel 1734 8 Apr 15:17 ports
-rw-r--r-- 1 root admin 53360640 8 Apr 15:01 ports.tar
-rw-r--r-- 1 root admin 512 8 Apr 15:01 ports.tar.rmd160
bash-3.2$ whoami
root
bash-3.2$
在此阶段,我正在考虑重新安装,但更愿意修复此问题而不是重新开始。
id 的输出是:
uid=504(root)
gid=0(wheel)
groups=0(wheel),
402(com.apple.sharepoint.group.1),
401(com.apple.access_screensharing),
1(daemon),
2(kmem),
3(sys),
4(tty),
5(operator),
8(procview),
9(procmod),
12(everyone),
20(staff),
29(certusers),
33(_appstore),
61(localaccounts),
504(admin),
98(_lpadmin),
100(_lpoperator),
204(_developer),
403(com.apple.sharepoint.group.2)
dscl 的输出。读取'/Users/root'
bash-3.2$ dscl . read '/Users/root'
AppleMetaNodeLocation: /Local/Default
GeneratedUID: FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000
NFSHomeDirectory: /Users/root
Password: ********
PasswordPolicyOptions:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>failedLoginCount</key>
<integer>0</integer>
<key>failedLoginTimestamp</key>
<date>2001-01-01T00:00:00Z</date>
<key>lastLoginTimestamp</key>
<date>2001-01-01T00:00:00Z</date>
<key>passwordLastSetTime</key>
<date>2013-05-27T07:39:18Z</date>
</dict>
</plist>
PrimaryGroupID: 0
RealName: root
RecordName:
root
BUILTIN\Local System
RecordType: dsRecTypeStandard:Users
SMBSID: S-1-5-18
UniqueID: 504
UserShell: /bin/bash
答案1
你以某种方式创建了另一个名为根没有 root 权限(可能覆盖了默认root
账户)或更改了 root 用户 ID 的用户。root
应该有 UID 0。也许启用/禁用 root 用户,更改 root 用户密码您所关注的是错误的。
您可以尝试通过sudo
如下运行明确指定 UID 0:
sudo -u '#0' <command>
dscl
是用于管理用户帐户(以及其他操作)的命令行实用程序。dscl . read '/Users/root'
默认情况下,输出应类似于以下内容:
AppleMetaNodeLocation: /Local/Default
GeneratedUID: FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000
NFSHomeDirectory: /var/root
Password: *
PrimaryGroupID: 0
RealName:
System Administrator
RecordName: root
RecordType: dsRecTypeStandard:Users
SMBSID: S-1-5-18
UniqueID: 0
UserShell: /bin/sh
你可以尝试通过运行 来重置所有内容dscl . change '/Users/root' 'UniqueID' '504' '0'
,希望这sudo
能解决这个问题。但这可能会造成更多问题 – 我只用钥匙测试过UserShell
。