在Linux中runuser命令简介
1. 简介
有时在 Linux 上编写脚本时,需要以另一个用户身份运行命令。
在本文中,我们将讨论如何使用命令runuser 来实现。此外,我们将了解如何自动化,以便我们不需要用户身份验证,以及如何管理用户权限。
2. 使用 runuser
命令runuser更改运行命令的用户。runuser类似于su命令 ,但略有不同。
例如,只有root用户可以调用runuser。因此,它不会提示输入密码。这种行为非常适合编写脚本,在本文后面,我们将研究将其与sudo 一起使用,以向非特权用户授予对特定命令的访问权限。
*要指定运行命令的用户,我们可以在-u*标志之后提供名称。**让我们尝试使用 runuser运行命令 *whoami * :
# runuser -u blogdemo whoami
blogdemo
在这里,我们可以看到whoami以用户blogdemo的身份运行。
3. 在脚本中使用runuser
让我们在*/home/blogdemo/script.sh*中编写一个脚本,它简单地输出有关当前用户的信息。
#!/usr/bin/bash
echo "this script was run by $(whoami)"
echo "this script is running this command as $(runuser -u blogdemo whoami)"
如果我们以root身份运行此脚本,我们可以看到以下输出:
# /home/blogdemo/script.sh
this script was run by root
this script is running this command as blogdemo
这表明用户root运行了脚本,并且在输出的第二行中运行了命令whoami as blogdemo。
4. 权限管理
让我们看一个用例,其中结合 runuser和 sudo 可以提供对用户权限的更精细控制。
在这个例子中,我们想让用户blogdemo执行一个以用户身份运行whoami的脚本。但是,我们不想让blogdemo作为脚本外的user自由使用whoami 。为此,我们可以使用sudo让blogdemo以root身份运行脚本。在脚本中,我们可以以user身份运行whoami。
我们先来看看如何设置脚本。与前一个的唯一区别是我们给runuser 的目标用户:
#!/usr/bin/bash
echo "this script was run by $(whoami)"
echo "this script is running this command as $(runuser -u user whoami)"
为避免允许用户更改脚本并以root身份运行任意命令,我们将让脚本归root所有。让我们使用chown 将文件的所有者更改为root:
# chown root script.sh
接下来,让blogdemo以root身份运行脚本。我们将使用sudo,但我们也可以使用su 。让我们通过使用visudo命令 将这一行添加到sudoers文件中来添加权限:
blogdemo ALL=(root) NOPASSWD: /home/blogdemo/script.sh
为了打破这一行,它允许所有主机上的用户blogdemo以用户root身份,无需密码,运行脚本*/home/blogdemo/script.sh*。
现在让我们尝试运行脚本。我们将从用户blogdemo运行它 并使用sudo以root身份运行它:
$ sudo /home/blogdemo/script.sh
this script was run as root
this script is running this command as user
该脚本以root身份运行,然后使用runuser切换到 user并运行whoami。由于我们设置的权限, sudo没有要求输入密码。当然,runuser运行是因为脚本是作为root执行的。