Nama pengguna sebelum sudo


8

Saya mendapat skrip yang membutuhkan sudo, tetapi skrip harus mengatur parameter sesuai dengan pengguna asli, seperti:

chown "${USER}:${USER}" dir

Jika saya mengaturnya di bawah sudo, saya hanya berakhir dengan chmod root:root, yang tidak membantu.

Jadi bagaimana saya bisa mendapatkan nama pengguna sebelum sudo?

Jawaban:


11

Variabel lingkungan SUDO_USER harus berfungsi sebagai pengganti untuk USER.

Karena Anda menetapkan kepemilikan ke USER: USER Saya berasumsi selalu ada grup dengan nama yang sama dengan pengguna? Solusi yang lebih ketat mungkin menggunakan SUDO_UID dan SUDO_GID.

Dua kemungkinan solusi akan menjadi:

chown "${SUDO_USER}:${SUDO_USER}" dir

atau

chown "${SUDO_UID}:${SUDO_GID}" dir

Anwser bagus, dengan solusi DAN beberapa info tambahan.
e-satis

Menggunakan UID / GID adalah solusi terbaik, karena dimungkinkan untuk memiliki beberapa UID dengan nama pengguna yang sama.
duffbeer703

4

Anda dapat menggunakan SUDO_USERvariabel:

sudo bash -c 'echo $SUDO_USER'

Dari halaman manual sudo :

sudo menggunakan variabel lingkungan berikut. Kebijakan keamanan memiliki kontrol atas konten aktual dari lingkungan perintah. [...]

SUDO_UID Setel ke ID pengguna pengguna yang memanggil sudo.

SUDO_USER Setel ke nama login pengguna yang memanggil sudo.


Tetapi mengapa sudo echo $SUDO_USERtidak menghasilkan apa-apa?
Robert

1

SUDO_USER dapat ditimpa oleh pengguna.

 $ SUDO_USER='lala' sudo SUDO_USER='test' printenv | grep USER
 USER=root
 SUDO_USER=test
 USERNAME=root

Anda harus menggunakan 'siapa saya' atau 'nama log' untuk mendapatkan nama pengguna asli

toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' logname             
toto
toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' who am i
toto   pts/4        Jan 23 15:13 (:0.0)

Datang dari /programming/4598001/how-do-you-find-the-original-user-through-multiple-sudo-and-su-comm-commands


Setelah menjalankan 'sudo su -' lingkungan variabel yang tidak tersedia, tetapi lognamedan who am ipekerjaan.
RickMeasham

Anda benar, tidak mungkin untuk bergantung pada variabel lingkungan.
cladmi

Ditemukan pada beberapa host yang SUDO_USER tidak dapat ditimpa: sudo: sorry, you are not allowed to set the following environment variables: SUDO_USER Jadi mungkin masih aman, masih harus memverifikasi ini.
cladmi

Itu karena perintah saya ditetapkan sebagai "NOPASSWD", jadi itu tergantung pada konfigurasi sudoers Anda melalui "NOSETENV".
cladmi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.