it-swarm-id.com

Opsi su - menjalankan perintah sebagai pengguna lain

Saya ingin tahu bagaimana menjalankan perintah sebagai pengguna lain dari skrip.

Saya memiliki pemilik skrip yang ditetapkan sebagai root. Saya juga menjalankan perintah berikut dalam skrip untuk menjalankan perintah sebagai pengguna hudson:

su -c command hudson

Apakah ini sintaks yang benar?

86
garbagecollector

Iya. Inilah --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

Dan beberapa pengujian (saya menggunakan Sudo karena saya tidak tahu kata sandi untuk akun nobody)

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

Ketika perintah Anda mengambil argumen, Anda perlu mengutipnya. Jika tidak, hal-hal aneh akan terjadi. Inilah saya - sebagai root - mencoba membuat direktori di/home/oli (as oli) tanpa mengutip perintah lengkap:

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

Ini hanya membaca mkdir sebagai nilai untuk -c menandai dan ia mencoba menggunakan /home/oli/Java sebagai nama pengguna. Jika kami mengutipnya, itu berfungsi:

# 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: -
89
Oli

Catatan: "Saya memiliki pemilik skrip yang ditetapkan sebagai root" tidak melakukan apa-apa; bahkan jika Anda memiliki bit setuid set --- masih tidak berfungsi


Dengan asumsi Anda benar-benar menjalankan skrip sebagai root, Anda dapat menggunakan Sudo. su terutama untuk mengalihkan pengguna, sedangkan Sudo untuk mengeksekusi perintah seperti pengguna lain. -u flag memungkinkan Anda menentukan pengguna mana yang akan menjalankan perintah sebagai:

Sudo -u hudson command
58
Michael Mrozek