通过shell脚本将用户添加到sudoers

时间:2012-01-09 06:42:48

标签: linux sh sudo

是否可以通过shell脚本将用户添加到sudoers文件中? 我一直在环顾四周,仍然找不到任何东西。

10 个答案:

答案 0 :(得分:42)

您可以直接将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处理的,到目前为止删除了超级用户权限。但是,如果您运行包含echo ... >> /etc/sudoers的脚本并且脚本本身具有超级用户权限,那么一切都应该正常工作。

答案 1 :(得分:9)

不,直接回声不起作用,你必须在子shell中运行它。试试这个:

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

答案 2 :(得分:6)

还有sudo组,您可以向其添加用户(适用于/etc/sudoers的常见配置)

答案 3 :(得分:1)

基于RedHat的发行版使用:

su - root

然后输入您的密码:

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

在sudoers文件中添加用户。

答案 4 :(得分:0)

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

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

  1. 创建新用户。

    adduser [username]

  2. 为用户添加密码

    passwd [用户名]

  3. 向用户授予root权限 只需输入

    即可编辑visudo文件

    在此输入代码

  4. 找到以下代码行: root ALL =(ALL)ALL

    然后在下面添加以下代码:

    [username] ALL=(ALL) ALL
    

    原帖可在此链接中找到Centos 6 – Creating sudoers user

答案 5 :(得分:0)

其他答案(例如,生成子shell)将起作用,但如果您想使用环境变量,则可能无效。我找到的另一种选择对我来说非常好:

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

答案 6 :(得分:0)

单行创建具有密码并在sudo组中的用户。

useradd -p $(openssl passwd -1 PASSWORD 用户名 -s / bin / bash -G sudo

答案 7 :(得分:0)

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

sudo usermod -aG sudo <userName>

示例:

sudo usermod -aG sudo johnDoe

用于验证::使用组功能(显示组成员身份)并在合适的用户下验证sudo组us。

groups <userName>

示例:

groups johnDoe
#!johnDoe: johnDoe sudo

linux documentation的解释:

  

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

     

-a,-append

     

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

     

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

     

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

答案 8 :(得分:0)

我想继续将用户添加到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

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

答案 9 :(得分:0)

在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文件