Saya bekerja dengan anggota pendukung untuk suatu produk, dan dia bersikeras bahwa saya harus menjadi root untuk menginstal serangkaian tambalan, dan sudo itu tidak akan berfungsi; dia tidak memberikan alasan tetapi tampaknya sangat kuat dalam keyakinannya. Menjelajahi Pengguna Super Saya tidak dapat menentukan alasan yang memungkinkan untuk hal ini, dan sebagai konfirmasi, ketika saya menjalankan:
sudo -l
Saya mendapat:
...
User [MY USERNAME] may run the following commands on this host:
(ALL) ALL
Mendapatkan akses dari tim Linux / server untuk benar-benar menjadi root bukanlah proses yang tepat seperti yang saya mengerti, jadi saya lebih memilih untuk menginstalnya sendiri.
Apakah ada alasan praktis mengapa sudo berperilaku berbeda dari root untuk menginstal perangkat lunak pada server?
sudo
dan skrip sebagai skrip saat ini ditulis. Jika itu yang terjadi, maka jawabannya sds' mungkin paling membantu Anda:sudo su -
.Jawaban:
Ini sangat tergantung pada bagaimana Anda memanggil program Anda dengan
sudo
atausu
.Misalnya pada sistem di mana saya saat ini:
Di mana [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Variabel lingkungan diatur ulang untuk 1 dan 5, diambil dari $ USER di 2,3,4.
Jadi skrip, atau program yang diluncurkan dengan opsi yang berbeda dapat melihat yang berbeda
$PATH
,,$HOME
shellnya dapat membaca yang berbeda.bashrc
,.profile
dan variabel Lingkungan. Bunyinya file yang terkait dengan$HOME
. Setiap pengguna dapat memodifikasi lingkungannya dengan cara yang berbeda (variabel$PATH
,, .bashrc, .profile, .bash_profile, alias ...). Secara khusus seorang pengguna dapat memiliki urutan direktori yang berbeda di dalam bukunya$PATH
dan, sebagai konsekuensinya, sebuah skrip dapat mengeksekusi sebuah perintah misalnya di/home/$USER/bin
alih-alih yang ada di jalur yang diharapkan dari root.Anda dapat menjalankan program di bawah
sudo -i
saat Anda login sebagai root dengansu -
, tetapi Anda dapat memiliki perilaku yang berbeda jika Anda menjalankannya dengansudo MyCommand
atau dengansu -c MyCommand
.Dari
man su
:Dari manusia
sudo
sumber
sudo
dapat dibatasi oleh izin dalam file sudoers vs. melakukan sesuatu karena root tidak memiliki batasan itu? Kutipan blok terakhir mungkin menyiratkan bahwa, tetapi jika saya mengerti dengan benar, itu tampak seperti perbedaan substantif lain di luar lingkungan (atau mungkin karena lingkungan?).Jika Anda memiliki
sudo
akses penuh , Anda dapatroot
menggunakansudo su -
, jadi titik keamanan diperdebatkan.Memang, ada cara untuk membedakan perbedaan antara program yang dijalankan sebagai
root
dan program yang berjalan di bawahsudo
- menggunakangetuid
vsgeteuid
- tetapi ini adalah trik yang dibuat-buat. Mengapa sistem tambalan melakukan itu?sumber
su -
, dia mungkin ingin menggunakansudo -i
sehingga dia memiliki lingkungan yang sama seperti ketika masuk secara langsung.sudo myscript
Anda akan menyimpan variabel $ PATH dan lingkungan dari shell di mana Anda berada. Jika Anda menjalankan dengansudo -i myscript
Anda menjalankan seolah-olah Anda login sebagai root. Lihat jawabannya dengan _zoo panggilan kami :-) _sudo
geteuid()
dangetuid()
berbeda satu sama lain adalah mitos. su dan sudo mengubah ID pengguna nyata dan efektif menjadi ID pengguna sebelum menjalankan perintah atau shell yang ditentukan, kecuali dalam situasi yang sangat tidak biasa yang Anda konfigurasikan secara eksplisit untuk berperilaku sebaliknya. Anda dapat memverifikasi ini (untuk sudo) dengan menjalankansudo id -u
dansudo id -ru
(keduanya menunjukkan 0), membaca sudo (8) (di bawah COMMAND EXECUTION ), atau menulis program pengujian .Ada beberapa perbedaan jika Anda mendapatkan shell root, seperti yang ditunjukkan oleh @Hastur.
Jika Anda tidak mendapatkan shell root, maka ada lebih banyak perbedaan. Anggota dukungan mungkin memiliki pengalaman mencoba melakukan hal-hal seperti di
sudo patch -p0 < /root/patch.file
manapatch
dijalankan sebagai root, tetapi<
(pipa dari file) tidak.sumber
sudo /bin/bash -c "./patch -p0 < /root/patch"
. Bahkan lebih rumit adalah kasus ketika Anda menggunakan pengalihan untuk membuat file>
. Dengan cara pertama Anda akan membuat file milik pengguna hanya jika Anda memiliki cukup hak untuk menulis di direktori akhir. Dengan cara yang terakhir Anda akan membuat file yang dimiliki oleh root ... sisi gelap dari Unix ;-)Saya percaya ketika menggunakan akses sudo, file log dibuat, namun ketika berjalan langsung melalui akses root tidak ada.
sumber
Itu tergantung seberapa halus Anda ingin akses root. Jika Anda memiliki beberapa pengguna yang melakukan tugas berbeda pada suatu sistem maka sudo akan lebih ideal. Salah satu contoh yang sering saya gunakan adalah kebutuhan untuk me-restart aplikasi atau database. Keamanan selalu dilakukan paling tidak istimewa. Saya menggunakan grup dan hanya mengizinkan grup tersebut untuk melakukan tindakan eksplisit. Buku bagus yang menjelaskan proses ini adalah "Sudo Mastery: Kontrol Akses Pengguna untuk Orang Sungguhan". Sebenarnya ini adalah buku bagus tentang sudo secara umum ...
sumber