Linux中以其它用戶身份執(zhí)行腳本或命令的全總結(jié)
在Linux中以其他用戶身份執(zhí)行命令或腳本是一個(gè)常見(jiàn)的需求,最近工作中碰到了這個(gè)需求,在這里簡(jiǎn)單總結(jié)一下.假如我們?cè)趓oot用戶下想以其它用戶(例如oracle,mysql)身份執(zhí)行一些腳本或命令,那么有哪一些方法呢?
su命令(switch user)
su命令的使用方式有兩種, 如下所示:
- 切換用戶只執(zhí)行一條命令的可以用:
su - oracle -c shell_command
-c "<命令>": -c 參數(shù)告訴 su執(zhí)行完后面的命令后就退出,而不是啟動(dòng)一個(gè)新的交互式shell。
- 切換用戶執(zhí)行一個(gè)shell腳本
su - oracle -s /bin/bash oracle_start.sh
需要注意的是, 這里使用su切換用戶有兩種方式,即帶"-"與不帶"-"的方式, 如下所示:
su oracle -c <shell_command> 或 su - oracle -c <shell_command>
兩者的區(qū)別
su <用戶名> (不帶橫杠)
這是非登錄式切換。
- 行為:它會(huì)切換當(dāng)前的用戶身份(UID 和 GID),但不會(huì)改變當(dāng)前的shell環(huán)境。
- 環(huán)境變量:大部分環(huán)境變量(如 PATH, HOME, USER, PS1 等)仍然保持為切換之前的用戶的環(huán)境變量。
- 工作目錄:當(dāng)前的工作目錄(PWD)也不會(huì)改變。
- 本質(zhì):你只是 “穿上了另一個(gè)用戶的馬甲”,但所處的 “房間”(環(huán)境)還是原來(lái)的。
適用場(chǎng)景:當(dāng)你需要臨時(shí)以另一個(gè)用戶身份執(zhí)行一個(gè)或幾個(gè)命令,并且希望利用當(dāng)前的環(huán)境(比如當(dāng)前目錄、已經(jīng)設(shè)置好的變量)時(shí)。
缺點(diǎn): 如果是非root用戶,需要知道目標(biāo)用戶的密碼. 不適合自動(dòng)化腳本.
su - <用戶名> (帶橫杠)
這是登錄式切換。
- 行為:它會(huì)模擬一個(gè)完整的、全新的用戶登錄流程。
- 環(huán)境變量:它會(huì)加載目標(biāo)用戶(例如oracle)的所有環(huán)境變量配置文件(如 /etc/profile, ~/.bash_profile, ~/.bashrc 等),并使用這些變量來(lái)構(gòu)建一個(gè)全新的環(huán)境。
- 工作目錄:工作目錄會(huì)自動(dòng)切換到目標(biāo)用戶的主目錄(/home/oracle)。
- 本質(zhì):你完全"進(jìn)入了另一個(gè)用戶的房間",使用的是它的所有配置和環(huán)境。
適用場(chǎng)景:當(dāng)你需要完全進(jìn)入另一個(gè)用戶的角色,執(zhí)行一系列操作,或者運(yùn)行依賴于該用戶特定環(huán)境變量的腳本時(shí)。這是更常見(jiàn)和推薦的用法。
sudo 命令
sudo命令,它的作用是“excute a command as another user",默認(rèn)為root用戶,可以用 -u 指定用戶名
你有目標(biāo)用戶的 sudo 權(quán)限,且只想臨時(shí)以該用戶身份運(yùn)行腳本。
sudo -u <用戶名> <命令或腳本>
與 su 類似,sudo 也可以用來(lái)獲取一個(gè)目標(biāo)用戶的交互式 shell。命令格式:
sudo -u <用戶名> -i # 或者 sudo -u <用戶名> -s
-i (模擬初始登錄,--login):行為與 su - <用戶名> 非常相似,會(huì)加載目標(biāo)用戶的環(huán)境變量并切換到其主目錄。
-s (啟動(dòng) shell, --shell):?jiǎn)?dòng)一個(gè) shell,但不一定會(huì)完全加載登錄環(huán)境,行為可能略有不同。通常推薦使用 -i。
不會(huì)加載目標(biāo)用戶的完整環(huán)境(如 .bashrc),但會(huì)加載其基本環(huán)境變量(如 $HOME)。
優(yōu)點(diǎn):
- 安全性高:執(zhí)行命令時(shí)驗(yàn)證的是執(zhí)行者自己的密碼,而不是目標(biāo)用戶的密碼。
- 權(quán)限控制精細(xì):通過(guò) /etc/sudoers 可以精確控制哪個(gè)用戶能以哪個(gè)身份執(zhí)行哪些命令。
- 易于審計(jì):所有 sudo 操作都會(huì)被記錄在系統(tǒng)日志中(通常在 /var/log/auth.log 或 /var/log/secure)。
缺點(diǎn):
- 需要管理員預(yù)先配置 /etc/sudoers 文件,對(duì)于臨時(shí)一次性操作可能略顯繁瑣。
- 這些方式也不適合在腳本中使用.
runuser 命令
runuser 是一個(gè)相對(duì)小眾但非常有用的命令,它與 su 類似,但設(shè)計(jì)初衷是讓 root 用戶在切換到其他用戶身份時(shí)無(wú)需輸入密碼,并且不通過(guò)PAM(Pluggable Authentication Modules)進(jìn)行認(rèn)證。這使得它比su更快,并且更適合在腳本中使用。
runuser -u <用戶名> -- <命令或腳本路徑>
優(yōu)點(diǎn):
- root 用戶使用時(shí)無(wú)需密碼,非常適合在自動(dòng)化腳本(如 cron, systemd service)中使用。
- 性能比 su 稍好。
缺點(diǎn):
- 功能不如 sudo 強(qiáng)大和靈活。
- 通常只有 root 用戶可以使用 runuser 切換到其他用戶。
到此這篇關(guān)于Linux中以其它用戶身份執(zhí)行腳本或命令總結(jié)的文章就介紹到這了,更多相關(guān)Linux中以其它用戶身份執(zhí)行腳本或命令總結(jié)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux命令創(chuàng)建日期文件夾或者文件的實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家介紹了Linux命令創(chuàng)建日期文件夾或者文件的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
Shell腳本實(shí)現(xiàn)環(huán)境變量與配置文件應(yīng)用指南
在Shell腳本編程的世界里,環(huán)境變量與配置文件是實(shí)現(xiàn)腳本靈活性、可移植性的核心組件,下面就跟隨小編一起全面拆解環(huán)境變量與配置文件的應(yīng)用邏輯吧2025-09-09
編寫(xiě)shell腳本實(shí)現(xiàn)tomcat定時(shí)重啟的方法
這篇文章主要介紹了編寫(xiě)shell腳本實(shí)現(xiàn)tomcat定時(shí)重啟的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Shell腳本實(shí)現(xiàn)自動(dòng)發(fā)送郵件的例子
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)自動(dòng)發(fā)送郵件的例子,使用.muttrc文件配合shell腳本實(shí)現(xiàn),需要的朋友可以參考下2014-08-08
linux下監(jiān)視進(jìn)程 崩潰掛掉后自動(dòng)重啟的shell腳本
如何保證服務(wù)一直運(yùn)行?如何保證即使服務(wù)掛掉了也能自動(dòng)重啟?在寫(xiě)服務(wù)程序時(shí)經(jīng)常會(huì)碰到這樣的問(wèn)題。在Linux系統(tǒng)中,強(qiáng)大的shell就可以很靈活的處理這樣的事務(wù)2013-06-06
Shell腳本實(shí)現(xiàn)一鍵快速搞定系統(tǒng)集成異常文件(附全部源碼)
這篇文章主要為大家詳細(xì)介紹了Shell腳本實(shí)現(xiàn)一鍵快速搞定系統(tǒng)集成異常文件,本文會(huì)附上全部源碼,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-02-02

