【问题标题】:Regex pattern to edit /etc/sudoers file用于编辑 /etc/sudoers 文件的正则表达式模式
【发布时间】:2012-05-12 08:07:24
【问题描述】:

我想删除 /etc/sudoers 文件中的 (uncommnet #) 轮组,那么我应该使用什么正则表达式模式?

#cat /etc/sudoers
....
....
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL

## Same thing without a password
# %wheel  ALL=(ALL)       NOPASSWD: ALL

....
....

我想从下一行删除#。

...
# %wheel  ALL=(ALL)       NOPASSWD: ALL
...

【问题讨论】:

标签: regex linux bash sed awk


【解决方案1】:

您不应使用任何类型的脚本编辑/etc/sudoers 文件。 visudo 命令是有原因的。对sudoers 文件的编辑应该很少且受到良好控制。

话虽如此,如果您的visudo 命令编辑器是vi,您可以运行:%s/^# %wheel/%wheel/ 之类的命令来取消注释所有以%wheel 开头的行。

或者,如果您认为有必要:

sudo sed --in-place 's/^#\s*\(%wheel\s\+ALL=(ALL)\s\+NOPASSWD:\s\+ALL\)/\1/' /etc/sudoers

在没有--in-place 的情况下运行它以检查输出。使用它需要您自担风险。

【讨论】:

  • 我知道!但我们有批量安装,我不能手动安装。它只是单行编辑,这就是我不担心的原因。
  • 是的 \s* 表示“零个或多个空格”。\s\+ 表示“一个或多个空格”
【解决方案2】:

以下应该有效:

sed -i 's/^#\s*\(%wheel\s*ALL=(ALL)\s*NOPASSWD:\s*ALL\)/\1/' /etc/sudoers

【讨论】:

    【解决方案3】:

    无需使用 sed。在 centos 上,您可以简单地在 /etc/sudoers.d/ 创建文件

    echo 'myuser ALL=(ALL) NOPASSWD: ALL' >> ./myuser
    sudo chown root:root ./myuser
    sudo mv ./myuser /etc/sudoers.d/
    

    这将为myuser 启用无密码的sudo。查看更多信息:https://unix.stackexchange.com/questions/375433/etc-sudoers-vs-etc-sudoers-d-file-for-enabling-sudo-for-a-user

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 1970-01-01
      • 2020-09-29
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 2015-10-28
      相关资源
      最近更新 更多