Bash

su 選項 - 以另一個使用者身份執行命令

  • June 17, 2019

我想知道如何從腳本中以另一個使用者身份執行命令。

我將腳本的所有者設置為 root。我還在腳本中執行以下命令,以 hudson 使用者身份執行命令:

su -c command hudson

這是正確的語法嗎?

是的。這是--help

$ su --help
Usage: su [options] [LOGIN]

Options:
 -c, --command COMMAND         pass COMMAND to the invoked shell
 -h, --help                    display this help message and exit
 -, -l, --login                make the shell a login shell
 -m, -p,
 --preserve-environment        do not reset environment variables, and
                               keep the same shell
 -s, --shell SHELL             use SHELL instead of the default in passwd

和一些測試(我用過sudo,因為我不知道nobody帳戶的密碼)

$ sudo su -c whoami nobody
[sudo] password for oli: 
nobody

當您的命令接受參數時,您需要引用它。如果你不這樣做,就會發生奇怪的事情。在這裡,我以 root 身份嘗試在 /home/oli(作為 oli)中創建一個目錄,而不引用完整的命令:

# su -c mkdir /home/oli/java oli
No passwd entry for user '/home/oli/java'

它僅被讀取mkdir-c標誌的值,並試圖用作用/home/oli/java戶名。如果我們引用它,它就會起作用:

# su -c "mkdir /home/oli/java" oli
# stat /home/oli/java
 File: ‘/home/oli/java’
 Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 811h/2065d  Inode: 5817025     Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/     oli)   Gid: ( 1000/     oli)
Access: 2016-02-16 10:49:15.467375905 +0000
Modify: 2016-02-16 10:49:15.467375905 +0000
Change: 2016-02-16 10:49:15.467375905 +0000
Birth: -

引用自:https://unix.stackexchange.com/questions/1087