[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 命令选项
- -l user_login_name :使 shell 成为登录 shell,使用 runuser -l PAM 文件而不是默认的。
- -g group :指定主要组。
- -G group :指定一个补充组。
- -c 命令:使用 -c 将单个命令传递给 shell。
- –session-command=COMMAND :使用 -c 将单个 COMMAND 传递给 shell,并且不创建新会话。
- -m :不重置环境变量。
- -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 用户的帐户密码时:
可以直接运行命令如下:
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 框如下:
总结: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]