如何以管理员权限执行命令并访问登录用户的文件?

如何以管理员权限执行命令并访问登录用户的文件?

我对 有一些理解上的困难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 窗口,但由于权限问题无法执行任何代码。

相关内容