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

问题描述 投票:0回答:11

是否可以通过shell脚本将用户添加到sudoers文件中? 我环顾四周,还是没有发现任何东西。

linux sh sudo
11个回答
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 处理的,此时 shell 已经放弃了超级用户权限。但是,如果您运行包含
echo ... >> /etc/sudoers
的脚本并且该脚本本身具有超级用户权限,则一切都应该正常工作。


11
投票

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

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


6
投票

还有

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

adduser [用户名] sudo


2
投票

基于 RedHat 发行版使用:

su - root

并输入您的密码,然后:

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

在 sudoers 文件中添加用户。


1
投票

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

sudo usermod -aG sudo <userName>

示例:

sudo usermod -aG sudo johnDoe

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

groups <userName>

示例:

groups johnDoe
#!johnDoe: johnDoe sudo

来自 linux 文档的解释

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

-a,--追加

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

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

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


0
投票

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

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

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

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

0
投票

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

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


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


0
投票

在不更改 /etc/sudoers 文件的情况下,您还可以通过将用户添加到wheel组(在Fedora,Centos ..上)和sudo组(在Ubuntu ecc上..)来授予sudoer权限。 以下是用户 jdoe 的 Centos 示例: $ sudo usermod jdoe -G 轮


-1
投票

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

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

  1. 创建一个新用户。

    adduser [用户名]

  2. 为用户添加密码

    passwd [用户名]

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

    在此输入代码

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

然后添加以下代码:

[username] ALL=(ALL) ALL

原始帖子可以在此链接中找到Centos 6 – 创建 sudoers 用户


-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

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.