Sudo vs root; ada perbedaan yang sebenarnya?

44

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?

Ranger
sumber
2
Saya pikir Anda harus melemparkannya kembali padanya. Seperti yang telah ditunjukkan orang lain, ada banyak cara untuk mendapatkan root menggunakan sudo dan jika dia tidak dapat memberi Anda alasan konkret mengapa sudo tidak mencukupi, maka ia tidak memiliki kaki untuk berdiri.
Garrett
1
Lingkungan dan sub-perintah datang ke pikiran. Saya pikir Hastur melakukan pekerjaan yang baik dengan lingkungan, dan Jayen melakukan pekerjaan baik dengan sub-perintah, perpipaan dan pengalihan.
jww
2
Garrett memiliki poin yang bagus, tetapi sebelum saya masuk ke kontes kencing yang potensial, saya akan bertanya kepada anggota pendukung: apakah Anda sudah mencoba keduanya dan telah gagal salah satu dari cara itu? Dia mungkin telah gagal sudodan skrip sebagai skrip saat ini ditulis. Jika itu yang terjadi, maka jawabannya sds' mungkin paling membantu Anda: sudo su -.
jww

Jawaban:

34

Ini sangat tergantung pada bagaimana Anda memanggil program Anda dengan sudoatau su.
Misalnya pada sistem di mana saya saat ini:

                  .bashrc                        
    COMMAND        $HOME   $USER  Env.  $PATH
 1. sudo -i        (root)   root  root  [1]
 2. sudo -s        (USER)   root  USER  /home/${USER}/bin:[1]
 3. sudo /bin/bash (USER)   root  USER  /home/${USER}/bin:[1]  
 4. sudo su        (root)   root  USER  [1]:/usr/games:/usr/local/games  
 5. sudo su -      (root)   root  root  [1] 

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,, $HOMEshellnya dapat membaca yang berbeda .bashrc, .profiledan 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 $PATHdan, sebagai konsekuensinya, sebuah skrip dapat mengeksekusi sebuah perintah misalnya di /home/$USER/binalih-alih yang ada di jalur yang diharapkan dari root.

Anda dapat menjalankan program di bawah sudo -isaat Anda login sebagai root dengan su -, tetapi Anda dapat memiliki perilaku yang berbeda jika Anda menjalankannya dengan sudo MyCommandatau dengan su -c MyCommand.


Dari man su:

Di bagian deskripsi:
Lingkungan saat ini diteruskan ke shell baru . Nilai $ PATH disetel ulang ke / bin: / usr / bin untuk pengguna normal, atau / sbin: / bin: / usr / sbin: / usr / bin untuk superuser
...
Pada bagian opsi:
- , -l , --login
Menyediakan lingkungan yang mirip dengan apa yang diharapkan pengguna seandainya pengguna masuk secara langsung .

Dari manusia sudo

-i , --login
Jalankan shell yang ditentukan oleh entri basis data kata sandi pengguna target sebagai shell login. Ini berarti bahwa file sumber daya khusus masuk seperti. Profil atau .login akan dibaca oleh shell. Jika suatu perintah ditentukan, perintah tersebut diteruskan ke shell untuk dieksekusi melalui opsi -c shell. Jika tidak ada perintah yang ditentukan, shell interaktif dijalankan. sudomencoba untuk mengubah ke direktori home pengguna itu sebelum menjalankan shell. Perintah dijalankan dengan lingkungan yang mirip dengan yang akan diterima pengguna saat login . Bagian Lingkungan Perintah di sudoers (5) manual mendokumentasikan bagaimana opsi -i mempengaruhi lingkungan di mana perintah dijalankan ketika kebijakan sudoers digunakan.

Cepat
sumber
Jawaban yang bagus Saya masih pemula di Linux, tetapi apakah perbedaan lain yang dapat Anda lakukan dengan menggunakan sudodapat 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?).
fixer1234
23

Jika Anda memiliki sudoakses penuh , Anda dapat rootmenggunakan sudo su -, jadi titik keamanan diperdebatkan.

Memang, ada cara untuk membedakan perbedaan antara program yang dijalankan sebagai rootdan program yang berjalan di bawah sudo- menggunakan getuidvs geteuid- tetapi ini adalah trik yang dibuat-buat. Mengapa sistem tambalan melakukan itu?

sds
sumber
5
Omong-omong su -, dia mungkin ingin menggunakan sudo -isehingga dia memiliki lingkungan yang sama seperti ketika masuk secara langsung.
Cristian Ciupitu
2
Jika Anda menjalankan dengan mis. sudo myscriptAnda akan menyimpan variabel $ PATH dan lingkungan dari shell di mana Anda berada. Jika Anda menjalankan dengan sudo -i myscriptAnda menjalankan seolah-olah Anda login sebagai root. Lihat jawabannya dengan _zoo panggilan kami :-) _
Hastur
1
Saya pikir ini penting untuk menunjukkan bahwa variabel lingkungan mungkin tidak sudo
diset
1
@dmanexe: sudo tidak berarti superuser, itu "beralih pengguna lakukan". su dan sudo dapat digunakan untuk beralih ke pengguna mana pun dan bukan hanya pengguna super. Juga tidak ada yang semu tentang sudo, Anda benar-benar mendapatkan root saat menjalankan sudo bukan sesuatu yang dipalsukan. Perhatikan bahwa keajaiban sudo benar-benar berasal dari bit perizinan setuid.
Lie Ryan
2
sds, @CharlesDuffy: Gagasan bahwa sudo dan su menyebabkan geteuid()dan getuid()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 menjalankan sudo id -udan sudo id -ru(keduanya menunjukkan 0), membaca sudo (8) (di bawah COMMAND EXECUTION ), atau menulis program pengujian .
7

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.filemana patchdijalankan sebagai root, tetapi <(pipa dari file) tidak.

Jayen
sumber
1
Kanan: sudut pandang praktis sering menawarkan petunjuk yang lebih sulit dikenali hanya dari halaman manual. Untuk mengatasi situasi serupa Anda dipaksa melakukan lebih banyak olahraga [:-)] misalnya menulis sesuatu seperti 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 ;-)
Hastur
1

Saya percaya ketika menggunakan akses sudo, file log dibuat, namun ketika berjalan langsung melalui akses root tidak ada.

Ashley Redman BSc
sumber
0

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 ...

meredithkm
sumber