Kata sandi pengguna mana yang diminta `sudo`?

10
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

jadi sudodapat dijalankan oleh pengguna mana pun, dan setiap pengguna yang menjalankan sudoakan memiliki root sebagai ID pengguna yang efektif dari proses karena bit set-user-id /usr/bin/sudodiatur.

Dari https://unix.stackexchange.com/a/11287/674

perbedaan yang paling terlihat antara sudo dan su adalah sudo membutuhkan kata sandi pengguna dan su membutuhkan kata sandi root.

  1. Kata sandi pengguna mana yang sudodiminta? Apakah pengguna diwakili oleh ID pengguna sebenarnya dari proses?

    Jika ya, bukankah ada pengguna yang bisa mendapatkan hak istimewa pengguna super dengan menjalankan sudodan kemudian memberikan kata sandi mereka sendiri? Bisakah Linux membatasi itu pada beberapa pengguna?

  2. Apakah benar bahwa sudomeminta password setelah execve() mulai menjalankan main()of /usr/bin/sudo?

    Karena cairan proses telah diubah menjadi root (karena bit set-user-id dari / usr / bin / sudo diatur), apa gunanya sudo yang meminta kata sandi nanti?

Terima kasih.

Saya telah membaca https://unix.stackexchange.com/a/80350/674 , tetapi tidak menjawab pertanyaan di atas.

Tim
sumber
3
Bukan sembarang pengguna, tetapi hanya mereka yang termasuk dalam daftar sudoers.
Rodrigo
1
@Rodrigo Kedengarannya seperti jawaban, masukkan dalam jawaban bukan komentar.
Philip Kendall
2
@ PhilipKendall Itu hanya menjawab sebagian dari keraguan OP.
Rodrigo

Jawaban:

22
  1. Dalam konfigurasi yang paling umum, sudomeminta kata sandi pengguna yang berjalan sudo (seperti yang Anda katakan, pengguna yang sesuai dengan id pengguna sebenarnya dari proses). Intinya sudoadalah untuk memberikan hak istimewa tambahan kepada pengguna tertentu (sebagaimana ditentukan oleh konfigurasi di sudoers), tanpa pengguna tersebut harus memberikan otentikasi lain selain milik mereka. Namun, sudo apakah memeriksa bahwa pengguna yang menjalankan sudobenar-benar adalah yang mereka klaim, dan melakukan itu dengan meminta kata sandi mereka (atau mekanisme otentikasi apa pun yang diatur sudo, biasanya menggunakan PAM - sehingga ini dapat melibatkan sidik jari, atau dua faktor otentikasi dll.).

    sudotidak serta merta memberikan hak untuk menjadi root, ia dapat memberikan berbagai hak istimewa. Setiap pengguna yang diizinkan menjadi root dengan hanya sudoersdapat melakukannya menggunakan autentikasi mereka sendiri; tetapi pengguna tidak diizinkan, tidak bisa (setidaknya, tidak dengan menggunakan sudo). Ini tidak diberlakukan oleh Linux itu sendiri, tetapi oleh sudo(dan pengaturan autentikasi).

  2. sudomemang meminta kata sandi setelah mulai berjalan; itu tidak bisa melakukan sebaliknya ( yaitu tidak bisa melakukan apa pun sebelum mulai berjalan). Inti dari sudomeminta kata sandi, meskipun root, adalah untuk memverifikasi identitas pengguna yang sedang berjalan (dalam konfigurasi tipikal).

Stephen Kitt
sumber
12

sudobiasanya meminta kata sandi dari pengguna yang menjalankannya, meskipun ini dapat dikonfigurasi :

Tidak seperti su(1), ketika sudoersmembutuhkan otentikasi, itu memvalidasi kredensial pengguna yang memohon, bukan kredensial pengguna target (atau root). Ini dapat diubah melalui rootpw, targetpwdan runaspwbendera, yang dijelaskan nanti.

Pengaturan rootpwtelah sudoselalu meminta password root ini, targetpwmeminta password dari pengguna sudoakhirnya akan menjalankan program sebagai, dan runaspwmeminta password dari pengguna set di runas_default.

Pengaturan sudobiner seperti itu memang bisa dimulai dengan hak akses root oleh pengguna mana pun. Dengan asumsi sudotidak memiliki bug dengan kode autentikasi, itu sendiri tidak akan terlalu menjadi masalah.

Demikian pula, proses apa pun juga dapat mengeksekusi kode dalam mode kernel, dengan memanggil panggilan sistem apa pun, katakanlah open(). (itu tidak sama dengan kode userspace sebagai root.) Selama kernel tidak memiliki bug, mereka tidak akan dapat menjalankan kode arbitrer.

ilkkachu
sumber
8

Dari baris pertama man sudo:

DESKRIPSI
sudo memungkinkan pengguna yang diizinkan untuk menjalankan perintah sebagai superuser atau pengguna lain, sebagaimana ditentukan oleh kebijakan keamanan. ID pengguna nyata (tidak efektif) yang digunakan pengguna digunakan untuk menentukan nama pengguna yang akan digunakan untuk menanyakan kebijakan keamanan.

Begitu:

  1. ID pengguna nyata (tidak efektif) yang digunakan pengguna digunakan ...
  2. Ya, setiap pengguna (yang diizinkan ) dapat memperoleh superuser (atau lainnya) hak istimewa tambahan dengan menjalankan sudo dan kemudian memberikan otentikasi ( dikonfigurasi ) yang diperlukan. Keduanya diizinkan dan dikonfigurasi diatur dalam file sudoers.

  3. Bisakah Linux membatasi itu pada beberapa pengguna?
    Ya, itu bisa, tetapi tidak. Linux diatur untuk memungkinkan biner sudo untuk membuat keputusan berdasarkan seperangkat aturan (kebijakan keamanan) di dalam program sudo dan di dalam file /etc/sudoers. Biasanya, file lain (juga / sebagai gantinya) dapat digunakan.

Dari man setresuid:

DESCRIPTION
setresuid () mengatur ID pengguna nyata, ID pengguna efektif, dan ID pengguna set disimpan dari proses panggilan.

  1. Satu-satunya cara untuk mendapatkan izin pengguna super yang diberikan oleh kernel adalah dengan menjalankan suid program. Tidak bisa sebaliknya. Ini adalah cara Linux telah memilih untuk memberikan izin pengguna super.

  2. Setelah kernel memuat executable yang tidak dapat dimodifikasi oleh pengguna lain (file dan direktori yang dimiliki oleh root dan hanya dapat ditulis oleh root), executable itu sendiri (sudo) mengautentikasi pengguna dengan meminta kata sandinya (atau sesuatu yang dikonfigurasi) dan memutuskan apakah dan izin mana yang akan diberikan.

Ishak
sumber
-1

Tambahan untuk jawaban baik lainnya tentang sudo:

sumemungkinkan Anda untuk secara efektif menjadi pengguna yang berbeda. Di komputer saya sendiri, saya tidak menjalankan sebagai administrator untuk penggunaan sehari-hari - yang berarti, antara lain, saya tidak bisa (langsung) menggunakannya sudo. Jika saya ingin menggunakan sudo, saya dapat menggunakan suuntuk "menjadi" pengguna Administrator, dan kemudian dalam penggunaan peran itu sudo. Dalam situasi itu saya akhirnya memasukkan kata sandi akun Admin dua kali - sekali ketika saya menjalankan su, dan satu kali ketika saya menjalankan sudo.

Stephen R
sumber