【问题标题】:Adding users to sudoers through shell script通过 shell 脚本将用户添加到 sudoers
【发布时间】:2012-02-05 18:31:29
【问题描述】:

是否可以通过 shell 脚本将用户添加到 sudoers 文件? 找了一圈,还是没找到。

【问题讨论】:

标签: linux sh sudo


【解决方案1】:

您可以简单地将echo(当然,具有提升的权限)直接访问/etc/sudoers 文件:

sudo -i
echo 'nickw444  ALL=(ALL:ALL) ALL' >> /etc/sudoers
#             ^^
#             tab

(注意用户名和第一个ALL之间的制表符)

或者,对于脚本:

#!/bin/bash
# Run me with superuser privileges
echo 'nickw444  ALL=(ALL:ALL) ALL' >> /etc/sudoers

然后保存到somefile.shchmod a+rx,然后从终端窗口运行sudo ./somefile.sh

要添加多个用户,把脚本改成这个;

#!/bin/bash

while [[ -n $1 ]]; do
    echo "$1    ALL=(ALL:ALL) ALL" >> /etc/sudoers;
    shift # shift all parameters;
done

然后,像这样运行脚本(假设您将其保存为addsudousers.sh):

sudo ./addsudousers.sh bob joe jeff

即用空格隔开。

从文件中读取名称:

nickw444@laptop ~ $ sudo ./addsudousers.sh `cat listofusers.txt`

listofusers.txt 也应该用空格分隔。

编辑: Jappie Kirk rightly points out,您不能直接调用 sudo echo ... >> /etc/sudoers,因为 >> 重定向是由 shell 处理的,此时 shell 已经放弃了超级用户权限。但是,如果您运行一个包含 echo ... >> /etc/sudoers 的脚本并且该脚本本身具有超级用户权限,那么一切都应该正常工作。

【讨论】:

  • 或者,像这样使用 tee:echo "$MY_USER ALL=(ALL:ALL) ALL" | sudo tee --append /etc/sudoers
  • 这可以使用串行控制台在 GCP/GCE 上恢复具有死机 OpenSSH 服务器的机器。唯一的问题是必须有一个带有密码的帐户才能开始。
  • 我们能否有一个检查机制来检查用户是否已添加
【解决方案2】:

不,直接回显不起作用,您必须在子外壳中运行它。试试这个:

sudo sh -c "echo \"group ALL=(user) NOPASSWD: ALL\" >> /etc/sudoers"

【讨论】:

  • 就是这样,sudoers 文件的 0440 权限不允许这样做
【解决方案3】:

还有sudo组,可以添加用户(/etc/sudoers的常用配置)

adduser [用户名] sudo

【讨论】:

    【解决方案4】:

    关于 基于 RedHat 的发行版使用:

    su - root
    

    并输入您的密码,然后:

    echo 'YOURUSERNAME ALL=(ALL:ALL) ALL' >> /etc/sudoers
    

    在 sudoers 文件中添加用户。

    【解决方案5】:

    要在 shell 脚本中授予用户 sudo 权限(Unix/Linux),请使用 usermod 函数

    sudo usermod -aG sudo <userName>
    

    示例:

    sudo usermod -aG sudo johnDoe
    

    验证:使用组功能(显示组成员身份)并在正确的用户下验证 sudo 组。

    groups <userName>
    

    示例:

    groups johnDoe
    #!johnDoe: johnDoe sudo
    

    来自linux documentation的解释:

    usermod 命令修改系统帐户文件以反映命令行上指定的更改。

    -a, --append

    将用户添加到补充组。仅与 -G 选项一起使用。

    -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]

    用户也是其成员的补充组列表。每个组是 ?> 分开的 从下一个逗号开始,中间没有空格。团体 受到与 -g 给出的组相同的限制 选项。如果用户当前是不是 列出,用户将从组中删除。这种行为可以 通过 -a 选项更改,该选项将用户附加到当前 补充组列表。

    【讨论】:

      【解决方案6】:

      其他答案(例如生成子外壳)将起作用,但如果您想使用环境变量,则可能不起作用。我发现另一种选择非常适合我:

      echo "%<user>      ALL=(ALL) ALL" | sudo tee -a /etc/sudoers > /dev/null
      

      话虽如此,事后看来是 20/20...如果通过脚本而不是通过 visudo 修改 sudoers,我强烈建议首先创建具有正确文件权限和内容的备份,因为您可能会失去对任何 sudo 权限的访问权限pkexec、物理访问或重启等。

      sudo cp /etc/sudoers /etc/sudoers.bak
      

      【讨论】:

        【解决方案7】:

        在 sudo 组中创建带密码的用户的单行。

        useradd -p $(openssl passwd -1 PASSWORD) USERNAME -s /bin/bash -G sudo

        【讨论】:

          【解决方案8】:

          在 Debian 和 Ubuntu 中,您可以将用户添加到 /etc/sudoers.d 目录。该目录有一个 README 文件。创建一个名为99_sudo_include_file 的文件并将其放到/etc/sudoers.d/ 目录中。删除用户或添加用户很容易,只需创建一个新文件并覆盖旧文件即可。您可以简单地回显您的新文件并在每次要更改旧文件时覆盖旧文件。

          echo '#== Visudo Users - All Permissions
          #== ==============================
          usersam      ALL=(ALL) ALL
          userlam      ALL=(ALL) ALL
          userfam      ALL=(ALL) ALL
          
          #== Visudo Users - Certain Scripts
          #== ==============================
          userkam      ALL=NOPASSWD: /path/to/script.sh, /path/to/script2.sh
          useroam      ALL=NOPASSWD: /path/to/script.sh, /path/to/script2.sh
          userpam      ALL=NOPASSWD: /path/to/script.sh, /path/to/script2.sh
          
          #== Visudo Users - Certain Commands
          #== ===============================
          userpam      ALL=NOPASSWD: /sbin/reboot, /usr/bin/apt-get
          userwam      ALL=NOPASSWD: /sbin/reboot, /usr/bin/apt-get' > /etc/sudoers.d/99_sudo_include_file
          

          这样你就不会碰你原来的/etc/sudoers文件

          【讨论】:

            【解决方案9】:

            以 root 身份登录到您的计算机。 root 用户是唯一有权添加新用户的用户。

            登录后,您现在可以尝试以下命令:

            1. 创建一个新用户。

              adduser [用户名]

            2. 为用户添加密码

              密码[用户名]

            3. 授予用户root权限 只需键入即可编辑 visudo 文件

              在此处输入代码

            找到以下代码行: 根 ALL=(ALL) ALL

            然后在下面添加这段代码:

            [username] ALL=(ALL) ALL
            

            原帖可以在这个链接上找到Centos 6 – Creating sudoers user

            【讨论】:

              【解决方案10】:

              我想继续添加用户到 sudoers。 我已经创建了,但问题是当我运行两次 shell 脚本时,它会再次添加。

              请看下面我的脚本

              for i in $(cat users); do
              
              useradd $i
              
              chsh $i /usr/bin/ksh93
              
              echo "user $i added successfully!"
              
              echo $i 'ALL=(ALL)    NOPASSWD: ALL' >> /HAapps/sudoers
              
              echo $i:$i"123" | chpasswd
              
              echo "Password for user $i changed successfully"
              
              done
              

              =============

              这是结果

              ario1 ALL=(ALL)    NOPASSWD: ALL
              ario2 ALL=(ALL)    NOPASSWD: ALL
              

              如何检查或验证用户是否已经存在,不需要再次添加? 谢谢各位大师 需要你的建议

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-07-26
                • 2013-02-11
                • 1970-01-01
                • 2017-08-11
                • 1970-01-01
                • 1970-01-01
                • 2020-05-23
                相关资源
                最近更新 更多