Bagaimana cara mendapatkan sudo -u $ pengguna untuk menggunakan pengguna env?

19

Tampaknya ketika sudomenggunakan sudo -u $useritu menggunakan bahwa lingkungan root masih digunakan. Bagaimana saya bisa sudomemanfaatkan lingkungan pengguna? sebagai catatan khusus tidak semua pengguna yang akan saya gunakan di ini memiliki shell login.

xenoterracide
sumber
Tentukan 'lingkungan'. # whoami => root # sudo -u user whoami => user
alex
1
@ alex I figur sudo -u useranalog dengan su useruntuk mengganti env in su yang harus Anda gunakansu - user
xenoterracide
Tapi apa yang Anda maksud dengan "lingkungan pengguna" jika pengguna tidak memiliki shell login?
Thomas Themel
@ Thomas pengguna dapat menjalankan program bahkan jika mereka tidak bisa masuk ... Saya percaya -ujuga mengabaikan kelompok ... Saya mencoba sesuatu dari root (menggunakan sudo -u bawah) dan itu berhasil, ternyata itu bukan untuk pengguna. .. jadi saya harus memastikan saya menjalankan perintah dengan cara yang akan memiliki semua keterbatasan dan masalah lingkungan.
xenoterracide

Jawaban:

21

Mencoba sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu
Gerald Schneider
sumber
sayangnya tidak berfungsi jika mereka tidak memiliki shell di /etc/passwd:( tapi saya kira ...
xenoterracide
Melihat halaman manual, tampaknya itu -Eadalah yang menjaga lingkungan, yaitu semua variabel lingkungan dll ada di sana, meskipun masih belum disetel PATHdan LD_LIBRARY_PATHke pengguna pemanggil.
Shahbaz
1
$SUDO_USERdapat digunakan
Rahul Patil
4

man sudoerspada Debian menyebutkan kemungkinan lain. Tidak yakin ke arah mana Anda inginkan, tetapi pertanyaan Anda terdengar seperti Anda ingin memiliki env_resetopsi dari /etc/sudoers- yang sebaliknya pada dasarnya adalah env_keepdaftar. Untuk mengatur yang tepat, HOMEAnda dapat menggunakan -Hopsi untuk sudosecara langsung atau, sekali lagi sudoers, dengan always_set_homeopsi.

Atau Anda dapat menggunakan env_fileuntuk menentukan lingkungan yang tepat yang ingin Anda lewati. Namun, saya pikir yang terbaik adalah jika Anda memeriksa env_*opsi dari man sudoers, karena /etc/sudoersmengontrol semuanya dan itulah titik untuk beralih ke.

Inilah bagian dari konteks yang saya gunakan env_resetdi dalam sudoersfile saya :

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year
0xC0000022L
sumber
1

Ketika sudo ing variabel lingkungan tidak dipertahankan.

Dalam kasus saya, saya menggunakan dokumen-sini .

Anda memasukkan tindakan Anda seperti my_script.shdi dalam DOKUMEN DI SINI:

su -u some_user <<EOF
./my_script.sh
EOF

Anda tidak boleh meletakkan variabel langsung di sini, karena mereka akan ditafsirkan dari pengguna Anda saat ini.

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

Jika $MY_VARtidak disetel untuk pengguna yang menjalankan skrip, skrip tidak akan ditetapkan.

Variabel Anda harus dipanggil di dalam skrip Anda, atau Anda harus menghindarinya \.

Misalnya.

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

Di sini, $MY_VARakan memiliki some_usernilai kontekstual.

Juaniyyoo
sumber
Jawaban yang bagus. Satu koreksi kecil: Seharusnya su - some_userbukan su -u some_user.
rudolfbyker