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

31

是否可以通过Shell脚本将用户添加到sudoers文件中?我已经找了一些资料,但仍然找不到答案。


将单个组条目添加到/etc/sudoers,并将用户添加到该组,而不是反复更新sudoers文件,这样做是否更有意义? - Keith Thompson
可能是重复的问题:如何从脚本编辑/etc/sudoers? - Amir Ali Akbari
10个回答

56
你可以直接使用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.sh,执行chmod 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 正确指出,你不能直接调用sudo echo ... >> /etc/sudoers,因为>>重定向由Shell处理,在那一点上已经丢弃了超级用户权限。然而,如果运行一个包含echo ... >> /etc/sudoers的脚本,并且这个脚本本身拥有超级用户权限,那么一切都将正常工作。


8
或者,你可以像这样使用 tee 命令:echo "$MY_USER ALL=(ALL:ALL) ALL" | sudo tee --append /etc/sudoers - Programster
这个方法可以用于在GCP/GCE上使用串行控制台恢复一个没有运行OpenSSH服务器的机器。唯一的限制是必须有一个带密码的账户才能开始操作。 - Ray Foss
我们能否为用户是否已经添加了一个检查机制? - alper
这应该检查用户是否已经被添加。如果!grep -qF“$MY_USER ALL=(ALL:ALL) ALL”/etc/sudoers; 然后 # 将条目追加到sudoers文件中 echo“$MY_USER ALL=(ALL:ALL) ALL”| sudo tee --append /etc/sudoers 如果grep -qF“$MY_USER ALL=(ALL:ALL) ALL”/etc/sudoers; 然后 echo“Sudoers条目已成功添加。” 结束 否则 echo“Sudoers条目已存在。未进行任何更改。” - undefined

10

不,直接的echo命令是行不通的,你必须在子shell中运行它。请尝试使用以下命令:

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


sudoers 文件的 0440 权限阻止了这样做。 - pylover

6

还有一个sudo组,您可以将用户添加到其中(对于/etc/sudoers的常见配置)

adduser [用户名] sudo


2

对于基于RedHat的发行版,请使用以下命令:

su - root

输入您的密码,然后:

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

将用户添加到sudoers文件中。


https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/2/html/Getting_Started_Guide/ch02s03.html - zeros-and-ones

1

为了在Unix/Linux的shell脚本中授予用户sudo权限,使用usermod函数

sudo usermod -aG sudo <userName>

例子:

sudo usermod -aG sudo johnDoe

验证:使用组函数(显示组成员资格),并验证sudo组是否在正确的用户下。

groups <userName>

例子:

groups johnDoe
#!johnDoe: johnDoe sudo

来自Linux文档的解释:

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

-a,--append

将用户添加到附加组中。只能与-G选项一起使用。

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

用户也是成员的附加组列表。每个组之间用逗号分隔,没有空格。这些组受到-g选项给出的组相同的限制。如果用户当前是未列出的组的成员,则用户将从该组中删除。可以通过-a选项更改此行为,该选项将用户附加到当前附加组列表中。


0

一行代码创建带密码并加入sudo组的用户。

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


0

其他答案比如生成子shell会起作用,但是可能无法使用环境变量。我发现另一种替代方案对我非常有用:

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

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

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


-1

以root用户身份登录您的计算机。只有root用户才有添加新用户的特权。

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

  1. 创建新用户。

    adduser [用户名]

  2. 为用户添加密码

    passwd [用户名]

  3. 授予用户root权限 通过简单地输入以下命令编辑visudo文件

    enter code here

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

然后在下面添加此代码:

[username] ALL=(ALL) ALL

原始文章链接 Centos 6 - 创建sudo用户


-1

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

如何检查或验证用户是否已存在,以便无需再次添加? 谢谢所有大师 需要您的建议

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接