📌  相关文章
📜  为用户授予 Root 权限的 Shell 脚本

📅  最后修改于: 2022-05-13 01:57:26.613000             🧑  作者: Mango

为用户授予 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/sudoerssudoers文件。使用任何文本编辑器打开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 权限后创建一个文件夹。