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?

e-satis
sumber

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
andol
sumber
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.

Kyle Brandt
sumber
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

cladmi
sumber
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