Linux 以其他用户身份运行命令

[ad_1]

尼克斯工艺,
我只想知道如何以另一个用户或 root 用户身份运行 Linux 命令?
-真挚地,
对 Linux 命令感到困惑。

使困惑,
您可以使用以下命令在 Linux 上以其他用户或 root 用户身份运行。

1. 以另一个用户身份使用 Linux runuser 命令

runuser 命令使用替代用户和组 ID 运行 shell。 这个命令是 仅在以 root 用户身份运行时有用

仅运行会话 PAM 挂钩,并且没有密码提示。 如果以没有权限设置用户 ID 的非 root 用户身份运行,该命令将失败,因为二进制文件不是 setuid。 由于 runuser 不运行 auth 和 account PAM 挂钩,因此它的运行开销低于 su。

语法是:

runuser -l  userNameHere -c 'command'
runuser -l  userNameHere -c '/path/to/command arg1 arg2'
runuser -u user -- command1 arg1 arg2

例如,作为 root 用户,您可能想要检查 oracle 用户的 shell 资源限制,请输入:
# runuser -l oracle -c 'ulimit -SHa'

检查 nginx 或 lighttpd 网络服务器限制:
# runuser -l nginx -c 'ulimit -SHa'
# runuser -l lighttpd -c 'ulimit -SHa'

有时,由于权限(安全)问题,root 用户无法浏览 NFS 挂载的共享:
# ls -l /nfs/wwwroot/cyberciti.biz/http

或者
# cd /nfs/wwwroot/cyberciti.biz/http

示例输出:

-bash: cd: /nfs/wwwroot/cyberciti.biz/http/: Permission denied

但是,允许 apache 用户浏览或访问位于 /nfs/wwwroot/cyberciti.biz/http/ 的基于 nfs 的系统:
# runuser -l apache -c 'ls -l /nfs/wwwroot/cyberciti.biz/http/'
# runuser -l apache -c 'cd /nfs/wwwroot/cyberciti.biz/http/; vi index.php'

使用 runuser 命令不需要密码,只能由 root 用户运行。 有时 sudo 或 su 将给出以下错误:

$ su - www-data
This account is currently not available.

要解决此问题,请尝试以下语法:
# runuser -u www-data -- command
## Run commands as www-data user ##
# runuser -u www-data -- composer update --no-dev
# runuser -u www-data -- php7 /app/maintenance/update.php

runuser 命令选项

  1. -l user_login_name :使 shell 成为登录 shell,使用 runuser -l PAM 文件而不是默认的。
  2. -g group :指定主要组。
  3. -G group :指定一个补充组。
  4. -c 命令:使用 -c 将单个命令传递给 shell。
  5. –session-command=COMMAND :使用 -c 将单个 COMMAND 传递给 shell,并且不创建新会话。
  6. -m :不重置环境变量。
  7. -u 用户名:以给定的用户名运行命令以绕过“su -”或“sudo’ 限制。

2. 使用“su 命令”运行具有替代用户和组 ID 的 Linux 命令

su 命令允许您成为超级用户或替代用户、欺骗用户、设置用户或切换用户。 它允许 Linux 用户更改与正在运行的控制台或 shell 关联的当前用户帐户,前提是 你知道目标用户的密码. 语法如下:

su -
su - username

切换到root用户

su 命令询问目标用户的密码。 键入 su – 在您的 shell 提示符下切换到 root 用户帐户(您必须知道 root 用户帐户密码):
[email protected]:~$ su -

或者,我们可以输入:
[email protected]:~$ su - root

这是它的外观:

Password: 
[email protected]:/root# logout
[email protected]:~$

如果提供了正确的 root 密码,会话的所有权将更改为 root 帐户。 键入 logout 退出 root 登录 shell。 类型 我是谁 或者 id 命令 验证会话的所有者:
whoami

或者
id

以 root 用户身份运行命令

语法是:

su - root -c "command"
OR
su - -c "command arg1"

要查看普通用户无法访问的 /root 目录的内容,请运行:

su - root -c "ls -l /root"

请注意,Linux 和一些类 Unix 系统有一个 wheel 组用户,并且只允许这些用户 su 到 root。

使用 su 命令以另一个用户身份运行命令

以下命令切换到用户 oracle 的帐户并显示限制列表:
$ su - oracle -c 'ulimit -aHS'

同样,如果提供了正确的 oracle 密码,会话的所有权将更改为 oracle 帐户。 su 命令的日志保存在系统日志中,通常在 /var/log/auth.log (Debian/Ubuntu) 或 /var/log/secure (RHEL/CentOS) 中。
在此示例中,使用 nginx 用户和 /bin/sh 作为 shell 运行命令:

su {userNameHere} -s /bin/sh -c "command1 arg1 arg2"
su nginx -s /bin/sh -c "chown nginx:nginx /var/www/html/static/logo.jpg"
su wwwjobs -s /bin/bash -c "/apps/scripts/pdfreports.py --config /apps/.config/pdf.conf"

3. sudo 适用于 Linux 用户的命令

这 sudo command 以另一个用户身份执行命令,但遵循一组关于哪些用户可以以其他用户身份执行哪些命令的规则。 这是在名为 /etc/sudoers 的文件中配置的。 不像苏, sudo 验证用户 针对他们自己的密码而不是目标用户的密码. Sudo 允许系统管理员授予某些用户(或用户组)以 root 或其他用户身份运行某些(或全部)命令的能力,同时提供命令及其参数的审计跟踪。 这允许将特定命令委托给特定主机上的特定用户,而无需在他们之间共享密码。 语法如下:

sudo command
## Run command as 'vivek' user ##
sudo -u vivek command arg1
sudo -u www-data /path/to/task arg1 arg2
## Want to gain the root shell? Try ##
sudo -i
sudo -s

有关更多信息,请参阅以下链接:

  • 如何配置和使用 sudo Linux操作系统下的工具。
  • sudo 项目主页。

4. 关于 GUI 工具的说明(su 和 GUI 前端) sudo )

gksu 命令是 su 的前端,而 gksudo 是 sudo. heir 的主要目的是运行需要 root 的图形命令,而无需运行 X 终端仿真器并直接使用 su。 语法如下:

gksu [-u <user>] [options] <command>
gksudo [-u <user>] [options] <command>

直接输入gksu,会提示如下:

当提示输入 root 用户的帐户密码时:

Gnome gksu Command

可以直接运行命令如下:

gksu -u root 'ls /root'

让我们以 oracle 用户的身份运行命令:

gksu -u oracle 'ulimit -aHS'

以 root 用户身份登录:

gksu -u root -l

pkexec 命令

不幸的是,gksu 和其他 GUI 前端已从某些 Linux 发行版中删除,而 pkexec 充当替代品,以在这些发行版上以其他用户身份执行命令。 语法非常简单:
pkexec command
pkexec --user {userNameHere} /path/to/command arg1

以 root 用户身份运行命令:
$ pkexec id
$ pkexec bash

如果未指定用户名,则程序将以管理超级用户 root 身份执行

默认情况下,以 root 用户身份执行程序是特权操作,需要授权。 因此,我们将看到 GUI 框如下:

pkexec running on Ubuntu Linux desktop

总结:runuser vs su vs sudo 与 pkexec

命令 根用户 用户到root 任何用户 认证类型 日志文件 评论
运行用户 ñ ñ 没有任何 不适用 由于 runuser 不运行 auth 和 account PAM 挂钩,因此它的运行开销低于 su。
他的 目标用户密码 /var/log/auth.log 或 /var/log/secure 您必须与其他用户共享您的密码或 root 密码。
sudo 根据用户自己的密码而不是目标用户的密码对用户进行身份验证。 /var/log/auth.log 或 /var/log/secure 允许系统管理员授予某些用户(或用户组)以 root 或其他用户身份运行某些(或全部)命令的能力,同时提供命令的审计跟踪。
pkexec 根据 root 密码或其目标密码对用户进行身份验证。 /var/log/auth.log 或 /var/log/secure 在现代 Linux 发行版上充当 gksu 或 gksudo 等 GUI 工具的替代品。

查看 sudo/pkexec 日志文件

使用tail命令/grep命令或cat命令如下:
$ sudo tail -f /var/log/auth.log
$ sudo tail -f /var/log/secure
$ sudo cat /var/log/auth.log

示例输出:

Dec 10 16:20:02 nixcraft-wks01 pkexec: pam_unix(polkit-1:session): session opened for user vivek by (uid=0)
Dec 10 16:20:02 nixcraft-wks01 pkexec[70876]: vivek: Executing command [USER=vivek] [TTY=/dev/pts/2] [CWD=/tmp] [COMMAND=/usr/bin/id]
Dec 10 16:20:04 nixcraft-wks01 CRON[70880]: pam_unix(cron:session): session closed for user vivek
Dec 10 16:20:08 nixcraft-wks01 sudo: pam_unix(sudo:auth): Couldn't open /etc/securetty: No such file or directory
Dec 10 16:20:10 nixcraft-wks01 sudo: pam_unix(sudo:auth): Couldn't open /etc/securetty: No such file or directory
Dec 10 16:20:10 nixcraft-wks01 sudo:    vivek : TTY=pts/2 ; PWD=/tmp ; USER=root ; COMMAND=/bin/bash
Dec 10 16:20:10 nixcraft-wks01 sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Dec 10 16:20:14 nixcraft-wks01 pkexec: pam_unix(polkit-1:session): session opened for user vivek by (uid=0)
Dec 10 16:20:14 nixcraft-wks01 pkexec[70908]: root: Executing command [USER=vivek] [TTY=/dev/pts/2] [CWD=/root] [COMMAND=/usr/bin/id]

加起来

我们看到并讨论了在 Linux 上以其他用户身份运行命令的各种命令行和 GUI 方法。 我强烈建议使用 sudo CLI 和 pkexec GUI 方法。 有关 su 的更多信息,请参见手册页, sudo、gksu、gksudo 和 pkexec 命令,输入以下命令 人命令
man sudo
man pkexec

真挚地,
尼克斯工艺

[ad_2]

Related Posts