为用户授予 Root 权限的 Shell 脚本
sudo命令是 Linux 中最强大的命令。它提供了一种授予管理员权限的机制,使用管理员权限,普通用户可以对已安装的 Linux 系统的文件系统做任何他想做的事情。使用sudo我们可以修改我们的系统。
方法1:使用usermod添加到根组
Linux 中的usermod命令用于修改用户帐户。使用usermod命令,我们可以将组、权限分配给特定用户。 Linux文件系统主要有7组,如下:
- 根
- 斌
- 守护进程
- 系统
- 管理员
- 磁盘
- 车轮
要使用 usermod 将用户添加到 root,我们必须在终端中运行以下命令。
usermod -G root user
这里, -G标志代表组,根是新用户 1 的组。
要将现有用户添加到根组,请执行以下命令:
usermod -g 0 -o user
这里, -g标志代表 Group id, 0代表根组 id, -of lag 代表现有用户。
方法二:使用 useradd 命令添加到根组
useradd命令可用于创建新用户或更新默认的新用户信息。它是用于添加用户的低级实用程序。要使用useradd命令将用户添加到组,只需在终端中运行以下命令。
useradd -m -G root user
这里, -m标志用于创建用户的主目录(如果不存在),- G标志代表组。
方法 3:编辑 /etc/passwd 文件
使用任何文本编辑器打开passwd文件,并将组用户 ID 更改为0 ,代表 root 权限。
在终端中运行以下命令:
nano /etc/passwd
然后为您要授予 root 访问权限的用户修改以下权限。
在授予root权限之前:
root:x:0:0:root:/root:/bin/bash
user:128:128:user
授予root权限后
root:x:0:0:root:/root:/bin/bash
user:0:0:user
在这里,如果您清楚地看到,我们已经修改了第 2 行,其中包含我们想要授予 root 访问权限的用户,之前它的值是 128,这不是 root 的组 ID。所以我们修改了那行并将值替换为 0,它代表根组。之后,保存文件并重新启动系统。
方法四:设置为 Sudo 用户
要将用户添加到sudo用户,我们可以修改位于/etc/sudoers的sudoers文件。使用任何文本编辑器打开sudoers文件,并在文件末尾添加以下行以将用户添加到 sudo 用户。
user ALL=(ALL) ALL
在这里,ALL 表示我们将所有(完全权限)授予用户,即用户可以运行任何命令并且用户只需进行身份验证。
- 第一个ALL是所有主机。即,如果您已将此 sudoers 文件共享到多台计算机
- 第二个ALL是您运行命令时的用户
- 第三个ALL是用户可以运行该命令。
方法5:使用脚本给用户root权限
要在执行 shell 脚本时为用户授予 root 权限,我们可以使用带有 shebang 的sudo bash命令。这将以 root 用户身份运行 shell 脚本。
例子:
#!/usr/bin/sudo bash
....
The rest of the shell script goes here
....
使用 root 权限创建目录的 Shell 脚本:
#!/usr/bin/sudo bash
echo "Enter a directory name"
read newdir
`mkdir $newdir`
将上述脚本另存为geeks.sh,在终端中运行脚本,输入以下命令:
sh geeks.sh
输出:
方法 6:使用交互式对话框
我们可以使用一个叫做whiptail的工具来创建一个交互式对话框。要安装此工具,请在终端中运行以下命令:
sudo apt install whiptail
脚本:
#!/usr/bin/bash
# saving user's name in me variable
me="$(whoami)"
# Checking that the script is running as root.
# entering in if case
if [ "$(id -nu)" != "root" ]; then
# resetting cached credentials
sudo --reset-timestamp
# creating a dialog box to enter user password
pswd=$(whiptail --title "GeeksforGeeks Authentication Script" \
--passwordbox "To run this script, administrative privilege is \
required. \n[sudo] Password for user $me:" 14 52 3>&2 2>&1 1>&3-)
# executing the script with the password entered by user
exec sudo --stdin --prompt '' "$0" "$@" <<< "$pswd"
# if password is wrong it will return the status code 1
exit 1
# exiting from if condition
fi
# Here, we will do the stuff that only sudo user can do
# creating a folder under the user's directory
path="/home/amninder/new_folder_Geeks"
mkdir $path
echo "Folder Created!!"
输出:
在这个脚本中,我们首先创建了一个交互式对话框提示框,让用户输入 sudo 密码,然后以 sudo 权限运行脚本。首先,我们将用户名保存在 me 变量中,以便在交互式对话框中显示名称。然后使用带有 if 语句的id命令,我们正在检查正在运行的脚本是否使用 root 权限,如果不是,我们正在输入 if 语句。使用 sudo –reset-timestamp 将清除先前保存的凭据并再次询问 root 密码。然后我们使用whiptail命令在交互对话框中添加了一个标题、一个密码框。这里 14 和 52 分别是对话框的高度和宽度。
“ 3>&2 2>&1 1>&3-”,我们正在交换标准输出和标准错误。
这里,
0 – 标准输入
1 – 标准输出
2 – 标准错误
3 – 标准输出
脚本中的 3>&2 将创建一个新的文件描述符并将其重定向到 2 即stderr 。现在 2>&1 会将文件描述符 2 重定向到stdout , 1>&3 会将文件描述符 1 重定向到 3 ,即stdout 。并将密码保存到pswd变量中。
如果用户输入错误的密码 3 次,我们将退出脚本并显示退出代码 1。在完成 if 块后,我们可以做需要 root 权限的事情。在这个脚本中,我们在获得 root 权限后创建一个文件夹。