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.


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

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

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.


Jawaban yang bagus. Satu koreksi kecil: Seharusnya su - some_userbukan su -u some_user.
rudolfbyker
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.