我对 有一些理解上的困难sudo
。我以非管理员/非 root 用户身份登录终端。这个“普通”用户不在 sudoers 文件中(我认为也不应该在)。
现在我尝试执行一个需要管理员/root 权限的命令,并且还需要访问我的普通用户的目录 - 因此我无法简单地su
进入管理员或root 用户。
在我看来sudo -u root
应该可以解决问题 – 但是它不接受root
(或管理员,如果我尝试使用我的普通管理员用户)。它只接受“普通”用户的密码,这似乎表明该-u username
选项没有按我期望的方式工作。
我的期望是 使用 root 权限sudo -u root some_command
执行,因此它还会要求输入 root 密码。显然不是。some_command
总结:如何执行任何需要管理员权限并且有权访问“登录(普通)用户”文件的命令,而无需将普通用户添加到 sudoers 文件?
我已经在Mac OS X 10.7下启用了root用户。
答案1
sudo
始终需要执行用户的密码(并且要求您具有执行此操作的特定权限,即其中之一sudoers
)。
su
需要目标账户的密码(root
默认情况下,但默认情况下 OS X 上的 root 账户没有密码)。如果您使用su
,则可以输入目标账户的密码并使用该用户的权限执行命令。
su -c some_cmd # as root
su username -c some_cmd # as username
通过将用户名后的所有参数传递给目标帐户的登录 shell 来实现此目的。shell 通常支持-c <commands>
参数。在 GNU coreutils 中su
,有一个实际的-c command
参数su
可以放在用户名之前。
您可以su
转到另一个用户帐户(使用其他用户帐户的密码),然后sudo
从那里访问,前提是其他帐户是sudoer
。
如果您既不想输入其他帐户的密码,也不想授予常规帐户sudoers
权限,那么您几乎没有选择,除非您考虑使用带有密钥验证的 SSH 或类似的东西。
答案2
除非你真的“需要”在 Mac OS X 上维护一个单独的 root 用户,否则使用以下命令获取 root shell 通常要容易得多sudo -s
在您的情况下,非管理员用户不包含在 /etc/sudoers 中 - 因此您必须手动添加您希望 sudo 接受的用户/组。
# User privilege specification
root ALL=(ALL) ALL
%admin ALL=(ALL) ALL
完成此操作后,sudo 将继承 shell 中的几乎所有有用内容,如 PATH 和其他变量,但会立即将非管理员用户提升为 root。启用 root 的缺点是时间,以及有人实际以 root 身份在本地或远程登录的安全风险。
请记住,sudo
正在询问登录到登录窗口屏幕的用户的密码。su -
想要 root 帐户的密码,sudo -s
使用特权升级来使用当前用户的密码成为 root,而无需任何密码(或者在你的情况下,实际上) 根密码。
答案3
如果您使用的是标准帐户(通常是出于安全原因),并且您知道管理员用户名和密码,则可以执行su -l admin_user
。输入密码后,您现在实际上就是该管理员。然后您可以sudo
随心所欲。现在,只需logout
返回到您原来的普通帐户即可。
答案4
我的终端可执行文件无法实现它本身想要的功能,而是通过执行那个烦人的操作:
打开应用程序>实用程序>Terminal.app;
~ 用户 $ sudo /PATH_TO_TERMINAL_EXEC
获取管理员权限;
完毕。
...这就是 terminal_executable 里面的内容
#!/bin/bash
echo PATCHING HOSTS FILE...!
echo >> /etc/hosts
echo \# IsPatched >> /etc/hosts
echo 127.0.0.1 somewebsite.com >> /etc/hosts
...我已经尝试过的是
#!/bin/bash
tmpvar=$(whoami)
echo TRYING!
su $tmpvar echo 127.0.0.1 somesite.com >> /etc/hosts
或者
su cuskus -c sudo -s echo 127.0.0.1 somesite.com >> /etc/hosts
要求输入密码后才出现#!/bin/bash 窗口,但由于权限问题无法执行任何代码。