是否可以通过Shell脚本将用户添加到sudoers文件中?我已经找了一些资料,但仍然找不到答案。
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
的脚本,并且这个脚本本身拥有超级用户权限,那么一切都将正常工作。
echo "$MY_USER ALL=(ALL:ALL) ALL" | sudo tee --append /etc/sudoers
。 - Programster如果!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不,直接的echo命令是行不通的,你必须在子shell中运行它。请尝试使用以下命令:
sudo sh -c "echo \"group ALL=(user) NOPASSWD: ALL\" >> /etc/sudoers"
还有一个sudo
组,您可以将用户添加到其中(对于/etc/sudoers
的常见配置)
adduser [用户名] sudo
对于基于RedHat的发行版,请使用以下命令:
su - root
输入您的密码,然后:
echo 'YOURUSERNAME ALL=(ALL:ALL) ALL' >> /etc/sudoers
将用户添加到sudoers文件中。
为了在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选项更改此行为,该选项将用户附加到当前附加组列表中。
一行代码创建带密码并加入sudo组的用户。
useradd -p $(openssl passwd -1 PASSWORD) USERNAME -s /bin/bash -G sudo
其他答案比如生成子shell会起作用,但是可能无法使用环境变量。我发现另一种替代方案对我非常有用:
echo "%<user> ALL=(ALL) ALL" | sudo tee -a /etc/sudoers > /dev/null
sudo cp /etc/sudoers /etc/sudoers.bak
/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
文件
以root用户身份登录您的计算机。只有root用户才有添加新用户的特权。
一旦您登录,现在可以尝试以下命令:
创建新用户。
adduser [用户名]
为用户添加密码
passwd [用户名]
授予用户root权限 通过简单地输入以下命令编辑visudo文件
enter code here
找到以下代码行: root ALL=(ALL) ALL
然后在下面添加此代码:
[username] ALL=(ALL) ALL
原始文章链接 Centos 6 - 创建sudo用户
我想继续关于将用户添加到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
/etc/sudoers
,并将用户添加到该组,而不是反复更新sudoers
文件,这样做是否更有意义? - Keith Thompson