sumber profil bash untuk pengguna root

17

Permintaan maaf sebelumnya jika pertanyaan ini akan mengganggu semua orang seperti yang saya hargai, sudah diajukan dengan berbagai cara sebelumnya. Yakinlah, saya telah membaca arsip dan telah mencoba setidaknya beberapa saran tetapi masih tidak dapat menyelesaikan masalah (sederhana). Semoga seseorang dapat memberikan jawaban dan saya bisa merasa direndahkan. FYI, untuk menghindari ambiguitas, saya akan menggunakan jalur absolut dan bukan relatif.

Ketika saya masuk, saya melakukannya sebagai pengguna adam. Alias ​​di dalam /Users/adam/.bash_profiledimuat dan saya dapat menggunakannya segera setelah menarik terminal. Saya tidak menggunakan .bashrcfile dan itu bagus.

Sesekali, saya beralih ke root dengan mengetik suke terminal dan kemudian memasukkan kata sandi saya. Perubahan cepat dan saya sekarang menjadi pengguna root. Pertanyaan saya adalah ini: segera setelah menjadi root, bisakah profil root bash saya dimuat tanpa saya harus secara manual mencari file profil? Alasan saya tahu itu tidak terjadi secara otomatis adalah karena saya memiliki alias yang sama di file profil root saya dan saya /Users/adam/.bash_profile. Setelah menjadi pengguna root, kecuali saya mengetik source [root_profile_file], mereka tidak berfungsi. Saya telah mencoba mengatur permutasi berikut dan kemudian beralih ke root melalui terminal tetapi tidak satupun dari mereka secara otomatis sumber profil / alias (catatan, saya tidak punya opsi di bawah ini mengatur secara bersamaan jadi saya tidak berpikir saya ' m membingungkan sistem):

Opsi 1: masukkan alias saya/etc/profile

Pilihan 2:

  • di /etc/profile, masukkan[ -r /etc/bashrc ] && . /etc/bashrc
  • masukkan alias saya /etc/bashrc

Opsi 3:

  • di /etc/bash_profile, masukkan[ -r /etc/bashrc ] && . /etc/bashrc
  • masukkan alias saya /etc/bashrc

Opsi 4: masukkan alias saya/var/root/.profile

Opsi 5:

  • di /var/root/.profile, masukkan[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • masukkan alias saya /var/root/.bashrc

Opsi 6:

  • di /var/root/.bash_profile, masukkan[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • masukkan alias saya /var/root/.bashrc

Harap dicatat, dengan salah satu di atas, jika saya beralih ke root dan kemudian ketik source root_profile_filealias yang dimuat tetapi hanya jika saya memang sumber file secara manual. Mungkin saya benar-benar salah mengerti bagaimana bash bekerja dan tidak mungkin untuk mencari file profil secara otomatis setelah beralih ke root tetapi saya berharap ada solusi sederhana. Terima kasih sebelumnya kepada siapa saja yang meluangkan waktu untuk membaca pesan ini.

Adam Gold
sumber

Jawaban:

14

Masalah yang Anda temui adalah ketika Anda menjalankannya susendiri, Anda tidak memasukkan shell 'login'. Ini berarti bahwa lingkungan Anda, direktori kerja, dan semuanya kecuali uid / gid tetap sama dengan pengguna asli.

Pemicu masuk tidak dijalankan, dan Anda mengalami masalah yang Anda uraikan.

Solusi sederhana untuk masalah sederhana:

su -

Dari su(1)halaman manual:

The su Perintah ini digunakan untuk menjadi pengguna lain selama sesi login. Diundang tanpa nama pengguna, su default untuk menjadi superuser. Argumen opsional - dapat digunakan untuk menyediakan lingkungan yang mirip dengan apa yang diharapkan pengguna seandainya pengguna masuk secara langsung.

Juga:

   -, -l, --login
       Provide an environment similar to what the user would expect had the user logged in directly.

Jika Anda sumasuk ke shell login, bash akan berperilaku seperti yang Anda harapkan, dan secara otomatis mencari file yang sesuai pada "login", tanpa perlu penyelesaian yang terlalu rumit.

Jason Salaz
sumber
1
Namun saya akan mencatat kedua catatan Hai Vu: Anda benar-benar, benar-benar seharusnya tidak pernah subekerja juga root. Ada sudountuk tujuan itu, atau Anda dapat bekerja sedemikian rupa sehingga Anda tidak memerlukan hak akses root sama sekali.
Jason Salaz
Terima kasih untuk Anda dan @Hai Vu. "su -" melakukan trik dan ya, sepenuhnya dipahami, root umumnya harus dihindari.
Adam Gold
1
Saya sudah tahu untuk menambahkan '-' setelah perintah su, tetapi masih belum mendapatkan .bash_profile saya untuk pengguna root yang bersumber. Jawaban Florian Bidabe dan patrix di bawah tentang mengubah shell root dari sh ke bash memperbaiki masalah untuk saya.
JaredC
9

Sebenarnya root menggunakan /bin/sh(bourne shell lama), .bash_profiledan .bashrcdibaca oleh bash.

Itu menjadi rumit karena file-file itu mungkin menggunakan fungsionalitas yang tidak tersedia di sh. Bahkan jika Anda source .bashrcatau source .bash_profile, Anda masih akan memiliki beberapa masalah dengan fungsi kompleks misalnya.

Salah satu cara untuk mengatasi ini adalah dengan menjalankan

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

untuk beralih ke rootshell bash.

Florian Bidabe
sumber
Root /bin/shmenggunakan /var/root/.profilefile. Terima kasih atas jawaban
Petr Újezdský
6

Ketika saya benar-benar harus, saya sudo bashyang membuat saya root tetapi dengan lingkungan JRobert. .Bashrc saya mengandung:

# Prompt: 'jrobert@JRiMac ~' in green (red, if I'm root), '$' in white
if [[ $UID == 0 ]]; then
   export PS1="\[\e[1;31;40m\]\u@\h \W\[\e[0m\]\$ "
else
   export PS1="\[\e[32;40m\]\u@\h \W\[\e[0m\]\$ "
fi

, untuk membuat root-prompt memelototi saya di RED untuk menekankan bahwa saya sekarang (lebih) rentan terhadap saya sendiri [pilih satu: kurang ajar, bodoh, kecenderungan gemuk-jari, keengganan untuk mengambil nasihat yang baik, lanjut s.creek - jangan jatuhkan dayung].

JRobert
sumber
3

Saya menggunakan sudo -iuntuk beralih ke pengguna root. Dalam hal ini, konfigurasi shell dibaca dari /var/root/.profile.

Matic
sumber
1

Secara umum, saya menyarankan agar sutidak berbahaya, hanya mencarinya dan Anda tahu mengapa. Ke pertanyaan Anda, akun root bekerja dengan cara yang sama seperti yang dilakukan akun Anda: akun sumbernya ~ / .bash_profile dan / atau ~ / .bashrc. Saya tidak tahu yang mana, tetapi intuisi saya condong ke ~ / .bashrc , jadi Anda mungkin ingin mencoba untuk meletakkan alias di sana. Berikut ini sarannya:

su           # type password to get into root account
vi ~/.bashrc # put your aliases there
exit         # exit your root session
su           # try again to see if your aliases works
Hai Vu
sumber
0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash Hanya ini yang berfungsi! Saya mencoba meletakkan export PS1=...file saya di salah satu dari semua file di atas. / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile.

Dari semua file ini /bin/shshell, tidak membaca informasi! (hanya bash) (Mac OS El Capitan). Dan saya harus mengganti shell menjadi bash.

Juga "su -"berfungsi. (dengan shell ini membaca /var/root/.profilefile)

ivan11
sumber
1
Tidak perlu mengkonfirmasi ulang jawaban yang ada ...
nohillside
-1

Salah satu cara untuk mengatasi ini adalah dengan menjalankan yang berikut untuk mengganti shell root ke bash:

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

Solusi ini telah memperbaiki masalah saya juga.

Yang Wang
sumber
-2

jika Anda hanya memiliki satu pengguna 'default' dan pengguna root, Anda dapat memakai alias su="su -".bash_profile dari pengguna 'default' dan Anda mendapatkan efek yang Anda inginkan. Bekerja dan tanpa hal-hal yang menjebak.

David Costa
sumber