可能重复:
vim 以 root 身份重新编辑
我可以发誓我看到了这个问题。但是在查看了“vi”的每个搜索结果后,我感到难倒/懒惰。
我打开了一个文件,进行了编辑,现在我意识到它是只读的,我以非 root 身份打开它。
我正在编辑我的/etc/sudoers文件并保存它,但它在那里有一个语法错误。现在我不能,sudo vim /etc/sudoers因为 sudo 认为 sudoers 文件无效。
我怎样才能解决这个问题?
我有一个本地 shell 脚本,它在提供有效负载之前在远程主机上执行许多测试;其中一项测试是用户是否具有 sudo 权限,只需检查一下,sudo -v但这需要用户输入密码。此外,远程主机似乎有即时 sudo 超时,因此每个新连接都需要输入密码,这是我无权更改的(作为策略)。
我当然可以测试用户是否属于某些组,但是这与远程主机配置无关,所以我希望有一种方法可以检查不需要假设用户的组,以及因为不需要用户输入?
谢谢!
更新:为了回应我的评论,我只想测试用户是否可以使用 sudo,而不需要用户交互进行该测试。
我需要允许单个用户在 Debian Linux 机器上使用特定命令。我在/etc/sudoers文件中试过这个:
# User privilege specification
zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
这不会按预期工作。如果我使用 sudo 作为用户 zabbix 运行命令,它会要求输入密码(尽管我已经指定了该NOPASSWD选项)。
但是,这有效:
# User privilege specification
zabbix ALL=NOPASSWD: /usr/bin/apt-get
Run Code Online (Sandbox Code Playgroud)
但有一个缺点,即apt-get允许所有的子命令。有没有办法解决这个问题,只允许一个特定的命令?
我在 /etc/init.d/ 中创建了一个脚本,它必须从其他(非 root 特权)用户的主目录运行其他几个脚本,就好像他们启动了它们一样。
我使用以下命令启动这些脚本: sudo -b -u <username> <script_of_a_particular_user>
它有效。但是对于继续运行的每个用户脚本(例如一些看门狗),我看到一个相应的父 sudo 进程,仍然活着并以 root 身份运行。这会在活动进程列表中造成混乱。
所以我的问题是:如何从现有的 bash 脚本中以另一个用户身份启动(fork)另一个脚本并将其保留为孤立(独立)进程?
更详细的解释:
我基本上是想为机器上的其他用户提供一种在系统启动或系统关闭时运行东西的方法,方法是运行在其主目录中的各个子目录中找到的可执行文件,名为 .startUp 和 .shutDown。由于我没有找到任何其他方法来做到这一点,因此我编写了完全执行此操作的 bash 脚本,并且已将其配置为 /etc/init.d/ 中的服务脚本(按照框架示例),因此当它运行时使用 start 参数启动 .startUp 目录中的所有内容,当使用 stop 参数运行时,它启动所有用户的 .shutDown 目录中的所有内容。
或者,如果我可以使用一些现有的解决方案来解决这个问题,我也很感兴趣。
更新
我环顾了一下,发现了这个问题:https :
//unix.stackexchange.com/questions/22478/detach-a-daemon-using-sudo
那里接受的答案,使用:sudo -u user sh -c "daemon & disown %1",对我有用。但我也试过没有拒绝 %1,结果是一样的。所以这就是我所期望的:
sudo -u <username> bash -c "<script_of_a_particular_user> &"
Run Code Online (Sandbox Code Playgroud)
我现在的另一个问题是,为什么它可以在没有拒绝的情况下工作?无论如何,对于某些潜在的特殊情况,我是否仍然应该离开拒绝电话?
更新 2
显然这也有效:
su <username> -c "<script_of_a_particular_user> &"
Run Code Online (Sandbox Code Playgroud)
这个调用和 sudo 调用有什么区别吗?我知道这可能是一个完全不同的问题。但由于我自己在这里找到答案,也许为了这个话题,有人可以在这里澄清这一点。
更新 3 …
添加用户到/etc/sudoers和 有usermod -a -G sudo什么区别?应该使用哪种方法授予 sudo?
背景
我知道其中的差别之间su -,sudo su -以及sudo <command>:
su - - 将用户切换到 root,需要 root 密码sudo su - - 将用户切换到 root,只需要当前用户的密码sudo <command>- 仅授予特定命令的 root 访问权限;只需要当前用户的密码我的问题是sudo su -在生产环境中使用是否是一种安全的做法。
一些想法:
sudo su -通过根据个人用户密码访问 root 帐户,似乎允许会带来安全风险。当然,这可以通过执行严格的密码策略来缓解。我认为su -没有更好的办法,因为它需要管理员共享实际的 root 密码。
允许用户完全切换到 root 帐户使得跟踪谁对系统进行了更改变得更加困难。我在日常工作中看到过多个用户被授予sudo su -访问权限的情况。用户登录系统后做的第一件事是运行sudo su -,然后再开始工作。然后,有一天发生了一些事情,并且无法追踪谁跑到rm -rf *了错误的目录中。
问题
鉴于上述问题,允许用户使用sudo su -甚至su -根本不使用是否是一个好主意?
管理员是否有任何理由为sudo su -或su -代替 …
我想为我机器上的非 root 用户授予非 sudo 访问权限,有一个用户 dns-manager,他的唯一作用是运行所有 BIND 命令(rndc、dnssec-keygen)等。
现在每次他必须运行命令时,他都会打字,
sudo rndc reload
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱这个 sudo,但只能在一组特定的命令上(并且仅适用于 dns-manager)?
我很难把头放在 FreeIPA 的模型上。FreeIPA手册指出:
FreeIPA 为 sudo 命令组添加了一个额外的控制措施,它允许定义一组命令,然后将其作为一个应用到 sudo 配置中。
但他们的例子基本上谈创建sudo命令组,并添加特定的sudo的命令,就像vim和less一个“文件” sudo命令组。
例如从命令行:
ipa sudocmdgroup-add --desc 'File editing commands' files
ipa sudocmd-add --desc 'For editing files' '/usr/bin/vim'
ipa sudocmdgroup-add-member --sudocmds '/usr/bin/vim' files
Run Code Online (Sandbox Code Playgroud)
但是您如何ALL像在 /etc/sudoers 中那样指定?这可以通配符(例如*)吗?