尼克斯工藝,
只是想知道如何以另一個用戶或 root 身份運行 Linux 命令?
– 真摯地,
我對Linux命令感到困惑。

來迷惑,
您可以使用以下命令在 Linux 上以其他用戶或 root 身份運行它:

1. 以其他用戶身份使用 Linux runuser 命令。

runuser 命令使用備用用戶和組 ID 運行 shell。這個命令 僅在以 root 身份運行時有用

僅執行會話 PAM 掛鉤,並且不顯示密碼提示。如果以無權設置用戶 ID 的非 root 用戶身份運行,該命令將失敗,因為二進製文件不是 setuid。 runuser 的運行成本低於 su,因為它不運行 auth 和 account PAM 掛鉤。

語法是:

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 將單個命令傳遞給 shell,不要創建新會話。
  6. -m :不重置環境變量。
  7. -u 用戶名:以指定的用戶名運行命令以繞過“su -”或“sudo”限制。

2. 使用“su 命令”以不同的用戶 ID 和組 ID 運行 Linux 命令。

su 命令允許您成為超級用戶或代理用戶、模擬用戶、設置用戶或切換用戶。 Linux 用戶可以更改與正在運行的控制台或 shell 關聯的當前用戶帳戶。 我知道目標用戶的密碼語法是:

su -
su - username

切換到root用戶

su 命令提示目標用戶輸入密碼。 在 shell 提示符下鍵入 su 以切換到 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. Linux 用戶的 sudo 命令

sudo 命令以另一個用戶身份運行命令,但它遵循一組關於哪些用戶可以以其他用戶身份運行哪些命令的規則。這由一個名為 /etc/sudoers 的文件組成。 與 sudo 不同,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

欲了解更多信息,請參閱以下鏈接。

  • 如何在 Linux 操作系統上配置和使用 sudo 工具。
  • 須藤 項目主頁。

4. GUI 工具注意事項(su 和 GUI 前端 sudo )

gksu 命令是 su 的前端,gksudo 是 sudo。繼承人的主要目的是運行需要 root 的圖形命令,無需運行 X 終端模擬器,也無需直接使用 su。語法是:

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

如果你直接輸入 gksu,它會這樣提示你:

當提示輸入 root 用戶帳戶的密碼時,請執行以下操作:

侏儒 gksu 命令

您可以像這樣直接運行命令:

gksu -u root 'ls /root'

讓我們以 oracle 用戶身份運行該命令。

gksu -u oracle 'ulimit -aHS'

以 root 用戶身份登錄。

gksu -u root -l

pkexec 命令

不幸的是,一些 Linux 發行版已經刪除了 gksu 和其他 GUI 前端,而 pkexec 作為在這些發行版上以其他用戶身份運行命令的替代方案。語法非常簡單。
pkexec command
pkexec --user {userNameHere} /path/to/command arg1

以 root 用戶身份運行命令。
$ pkexec id
$ pkexec bash

如果沒有指定用戶名,程序將以管理超級用戶 root 運行

默認情況下,以 root 身份運行程序是一項特權操作,需要授權。所以你會看到一個這樣的 GUI 框:

pkexec 在 Ubuntu Linux 桌面上運行

摘要:runuser vs su vs sudo vs pkexec

命令根用戶用戶到root任何用戶認證類型日誌文件評論
運行用戶是的nn沒有什麼不適用runuser 的運行成本低於 su,因為它不運行 auth 和 account PAM 掛鉤。
他的是的是的是的目標用戶密碼/var/log/auth.log 或 /var/log/secure您必須與其他用戶共享您的密碼或 root 密碼。
須藤是的是的是的用戶根據自己的密碼進行身份驗證,而不是目標用戶的密碼。/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

真摯地,
尼克斯工藝