Di Ubuntu 12.04, ketika saya sudo -s
variabel $ HOME tidak berubah, jadi jika pengguna reguler saya regularuser
, situasinya seperti ini:
$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser
Saya telah meninggalkan Ubuntu sejak lama, jadi saya tidak yakin, tapi saya pikir ini adalah perilaku default. Jadi, pertanyaan saya adalah:
Q1. Bagaimana ini dilakukan? Di mana konfigurasi?
Q2. Bagaimana cara menonaktifkannya?
Sunting: Terima kasih atas jawabannya, yang sedikit memperjelas beberapa hal, tapi saya rasa saya harus menambahkan beberapa pertanyaan, untuk mendapatkan jawaban yang saya cari.
Q3. Di Debian sudo -s
, ubah variabel $ HOME ke /root
. Dari apa yang saya dapatkan dari jawaban dan man sudo
shell berlari dengan sudo -s
yang diberikan /etc/passwd
, kan?
Q4. Namun, pada Ubuntu dan Debian shell yang diberikan /etc/passwd
untuk root adalah /bin/bash
. Di kedua sistem juga, saya tidak dapat menemukan di mana perbedaan dalam .profile
atau .bashrc
file, sejauh $ HOME yang bersangkutan, sehingga perilaku sudo -s
berbeda. Ada bantuan untuk ini?
sudo
berperilaku berbeda antara Debian dan Ubuntu.sudo
berjalan, saya pikir memang ada perbedaan secara default. Namun, saya tidak bertaruh untuk itu, karena saya berada di kotak yang telah diatur oleh orang lain dan telah berjalan cukup lama. Bagaimanapun, bagi siapa pun yang tertarik, saya menemukan security.stackexchange.com/questions/18369/… dan bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140 .Jawaban:
Sudo memiliki banyak opsi konfigurasi waktu kompilasi. Anda dapat mencantumkan pengaturan dalam versi Anda dengan
sudo -V
. Salah satu perbedaan antara konfigurasi di Wheezy Debian dan di Ubuntu 12,04 adalah bahwaHOME
variabel lingkungan dipertahankan di Ubuntu tetapi tidak di Debian; kedua distribusi menghapus semua variabel lingkungan kecuali untuk beberapa yang secara eksplisit ditandai sebagai aman untuk dilestarikan. Dengan demikiansudo -s
mempertahankanHOME
pada Ubuntu, sedangkan pada DebianHOME
dihapus dansudo
kemudian menetapkannya ke direktori home dari pengguna target.Anda bisa mengganti perilaku ini di
sudoers
file. Jalankanvisudo
untuk mengeditsudoers
file. Ada beberapa opsi yang relevan:env_keep
menentukan variabel lingkungan mana yang dilestarikan. GunakanDefaults env_keep += "HOME"
untuk mempertahankanHOME
variabel lingkungan pemanggil atauDefaults env_keep -= "HOME"
untuk menghapusnya (dan menggantinya dengan direktori home dari pengguna target).env_reset
menentukan apakah variabel lingkungan disetel ulang sama sekali. Mengatur ulang variabel lingkungan sering diperlukan untuk aturan yang memungkinkan menjalankan perintah tertentu, tetapi tidak memiliki manfaat keamanan langsung untuk aturan yang memungkinkan menjalankan perintah sewenang-wenang.always_set_home
, jika disetel, menyebabkanHOME
pengesampingan meskipun dipertahankan karenaenv_reset
dinonaktifkan atauHOME
ada dalamenv_keep
daftar. Opsi ini tidak memiliki efek jikaHOME
tidak dipertahankan.set_home
sepertialways_set_home
, tetapi hanya berlaku untuksudo -s
, bukan saat memanggilsudo
dengan perintah eksplisit.Opsi-opsi ini dapat diatur untuk pengguna sumber tertentu, target pengguna tertentu atau perintah yang diberikan; lihat
sudoers
manual untuk detailnya.Anda selalu dapat memilih untuk mengganti
HOME
panggilan yang diberikansudo
dengan melewati opsi-H
.Shell tidak akan pernah menimpa nilai
HOME
. (Ini akan mengaturHOME
jika tidak disetel, tetapisudo
selalu menetapkanHOME
satu atau lain cara.)Jika Anda menjalankan
sudo -i
,sudo
mensimulasikan login awal. Ini termasuk pengaturanHOME
ke direktori home pengguna target dan menggunakan shell login .sumber
Gunakan
sudo -H -i
alih-alihsudo -s
untuk mendapatkan shell root login interaktif:Dari
man sudo
:sumber
-i
tersirat-H
.Ini tidak ada hubungannya dengan perilaku
sudo
dan banyak hubungannya dengan perbedaan antara "shell login" dan "shell non-login". Perbaikan cepat adalahseperti yang bisa dilihat dengan:
Seperti tercantum dalam manual sudo:
sumber
HOME
atau tidak ada hubungannya dengan bagaimana sudo dikonfigurasi./etc/sudoers
, tidak ada yang berbeda antara Debian dan Ubuntu sejauh $ HOME yang bersangkutan.always_set_home
danset_home
masuksudoers
.Cara yang cukup populer untuk mendapatkan shell root juga menggunakan:
sumber
sudo -i -H
, tetapi gagal dengan menginstal paket global npm dari git. Dengansudo su -
itu berhasil! Terima kasih.Untuk menghilangkan perilaku berbeda
sudo -s
di Ubuntu dan Debian masing-masing, Anda bisa menggunakansudo
pembungkus (jawaban untuk Q4):sumber