Bagaimana OS tahu bahwa perintah membutuhkan sudo?

16
  1. Saat Anda menjalankan executable, terkadang OS akan menolak izin Anda untuk melakukannya. Misalnya menjalankan make installdengan awalan sebagai jalur sistem akan perlu sudo, sedangkan dengan awalan menjadi jalur non-sistem tidak akan diminta sudo. Bagaimana OS memutuskan bahwa menjalankan executable akan membutuhkan lebih banyak hak istimewa daripada yang dimiliki pengguna, bahkan sebelum program melakukan sesuatu?
  2. Terkadang, menjalankan suatu program tidak akan ditolak izinnya, tetapi program tersebut akan dapat melakukan lebih banyak hal jika dijalankan dengan sudo. Misalnya, ketika berjalan dupada beberapa direktori sistem, hanya dengan sudoitu akan dapat mengakses beberapa direktori. Mengapa OS tidak menolak izin menjalankan program seperti itu, atau ramah memberi tahu lebih banyak hak istimewa, sebelum program dapat berjalan?
  3. Benarkah bahwa kapan pun sudobekerja, sujuga akan bekerja, dan kapan pun subekerja, sudojuga akan berhasil? atau dengan su, pengguna dapat melakukan lebih banyak daripada dengan sudo? Bagaimana OS memutuskan kapan sudobekerja, dan kapan sudibutuhkan?
StackExchange untuk Semua
sumber
Sudahkah pertanyaan ini dijawab untuk Anda, atau Anda ingin informasi lebih lanjut?
ctrl-alt-delor

Jawaban:

14
  1. Kadang-kadang pesan "Izin ditolak" adalah karena izin sistem file yang menolak Anda menulis akses, misalnya. Alat yang dapat dieksekusi / hanya memeriksa apakah itu filesystem memberi Anda cukup izin untuk melakukan apa yang akan Anda lakukan dan melempar kesalahan jika ditolak oleh filesystem. Di lain waktu, alat itu sendiri akan memeriksa ID pengguna Anda sebelum mengizinkan Anda untuk terus menggunakannya.
  2. Ketika Anda menjalankan program dengan sudoAnda menjalankannya di bawah beberapa nama pengguna lain. Jika pengguna itu "dapat melakukan lebih banyak hal" daripada pengguna Anda dan sudokonfigurasi memungkinkan Anda untuk melakukan hal-hal ini atas nama pengguna lain maka ya, sudoakan memungkinkan Anda untuk melakukan lebih banyak hal. Tapi ini tidak perlu. Jika Anda hanya taktik sudopada pada awal baris perintah, Anda benar-benar sudoing sebagai root, sehingga biasanya Anda sedang dapat melakukan lebih banyak hal daripada hanya fana.
  3. Jelas tidak. Untuk menggunakan sudoAnda perlu memberikan kata sandi pengguna Anda sendiri dan kemudian Anda diizinkan untuk melakukan beberapa hal atas nama pengguna target. Untuk menggunakannya su, Anda memerlukan kata sandi pengguna target dan jika Anda memilikinya, Anda menjadi pengguna target sejauh yang menyangkut sistem dan dapat melakukan apa saja yang dapat dilakukan pengguna.

Lihat juga

Joseph R.
sumber
Terima kasih. Apakah "izin sistem file menolak Anda menulis akses" = "mode akses file tidak memiliki bit eksekusi yang ditetapkan untuk pengguna, yang dapat diatur oleh chmod"?
StackExchange for All
1
@Tim Sebenarnya itu = "mode akses file tidak memiliki bit tulis yang ditetapkan untuk pengguna". Dan ya, ini tentu saja dapat diperbaiki dengan chmodketentuan Anda adalah pemilik file atau root.
Joseph R.
Apakah perlu sudo, sepenuhnya dan semata-mata tergantung pada apakah bit eksekusi tidak ditetapkan untuk pengguna? Lihat unix.stackexchange.com/q/147052/674
StackExchange for All
@Tim Jelas Anda memerlukan bit eksekusi untuk dapat menjalankan executable di tempat pertama.
Joseph R.
1
@ JosephephR. Tidak jelas. chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./hellomenghasilkan bagus "Halo, Dunia!" keluaran.
selesai24
24

Untuk tujuan yang telah Anda jelaskan, OS tidak memutuskan apakah Anda perlu sudo untuk menjalankan program pada awalnya . Sebaliknya, setelah program mulai berjalan dan kemudian mencoba untuk melakukan sesuatu yang tidak diizinkan oleh pengguna saat ini (seperti menulis file /usr/binuntuk menginstal perintah baru), OS mencegah akses file. Tindakan untuk mengambil kondisi ini tergantung pada program; makeberhenti berjalan tetapi duakan melanjutkan ke file / direktori berikutnya setelah mencetak pesan.

The sudan sudoperintah dua cara yang berbeda dari menjalankan program dengan hak akses root. Mereka mungkin berbeda dalam detail kecil seperti isi lingkungan ketika memulai program baru, tergantung pada opsi yang digunakan. OS tidak perlu memutuskan kapan satu atau yang lain mungkin bekerja.

Greg Hewgill
sumber
6

sudan sudomerupakan program istimewa. superubahan (setelah otentikasi berhasil) id pengguna dan grup yang nyata dan efektif dengan yang Anda suinginkan. Jadi, sumirip dengan login. Catatan yang sudapat digunakan untuk mengubah ke pengguna mana pun, bukan hanya root. sudojuga mengubah id pengguna dan grup yang nyata dan efektif. Sampai pada titik ini sudan sudoserupa (tetapi tidak terkait), di luar itu mereka sangat berbeda.

Dengan su, Anda harus mengetahui kata sandi target, dan begitu Anda mengautentikasi, Anda dapat melakukan apa pun yang Anda inginkan sebagai pengguna itu. Penggunaan sudapat dibatasi dengan menetapkan SU_WHEEL_ONLYdi /etc/login.defs. Jika diatur, hanya pengguna dalam grup yang wheeldapat menggunakan su, jika tidak maka tidak dibatasi. Terlepas dari itu, susemuanya atau tidak sama sekali.

sudosama sekali berbeda sehubungan dengan itu. Dengan sudoAnda dapat menentukan kebijakan yang cukup rumit /etc/sudoerstentang apa yang boleh dilakukan oleh sudoer (pengguna yang menelepon sudo). Misalnya, Anda dapat menetapkan kebijakan di mana pengguna tertentu hanya dapat menjalankan program tertentu dengan hak istimewa tertentu, sementara pengguna lain dapat menjalankan program lain dengan hak istimewa lainnya.

Salah satu fitur yang mencolok sudoadalah Anda dapat mengonfigurasinya sehingga pengguna harus mengotentikasi dirinya sendiri dengan kata sandi sendiri (alih-alih dari target). Dengan demikian, sudotelah berkembang sangat populer di kalangan admin, karena memungkinkan untuk mengotorisasi pengguna untuk hanya melakukan operasi istimewa tanpa berurusan dengan kata sandi pengguna super, ditambah Anda mendapatkan beberapa tingkat akuntabilitas.

countermode
sumber
2

tl; dr Access ditentukan oleh pengguna yang menjalankan aplikasi, dan sudomenjalankan aplikasi sebagai pengguna yang berbeda.

Versi lengkap:

Bagaimana OS tahu bahwa perintah membutuhkan sudo?

Tidak tahu. UNIX mengelola izin bukan pada tingkat aplikasi tetapi pada tingkat sistem file: izin diberikan bagi pengguna untuk mengakses file tertentu. Aplikasi kemudian dijalankan atas nama pengguna - setiap proses yang berjalan memiliki pengguna yang terkait dengannya. Pengguna itu digunakan untuk menentukan izin untuk aplikasi itu. Sudo bekerja dengan menjalankan aplikasi atas nama pengguna lain (dengan izin yang terkait dengan pengguna lain itu), yaitu rootsuperuser.

Adapun contoh Anda:

  1. Jika pengguna memiliki akses tulis ke direktori tertentu, mereka dapat make installmasuk ke direktori itu. Kalau tidak, mereka mungkin akan rootmelakukannya - dengan menggunakan sudo.

  2. Jika Anda tidak dapat mengakses file di direktori, dumenjalankan untuk Anda juga tidak dapat mengaksesnya. rootdapat mengakses hampir setiap file, jadi sudo du(du berjalan atas nama root) dapat mengaksesnya juga.

Benarkah setiap kali sudo bekerja, su juga akan bekerja, dan kapan pun su bekerja, sudo juga akan bekerja?

Iya dan tidak. Ya, jika program benar - benar dijalankan, ia harus berperilaku sama di bawah keduanya sudodan su. Namun,sudo menyediakan memungkinkan untuk kontrol yang lebih baik dari siapa yang dapat menjalankan apa dengan set aturan yang disimpan dalam /etc/sudoersfile. sulebih sederhana - jika Anda tahu kata sandi pengguna target, Anda dapat menjalankan program atas nama pengguna itu.

Catatan terakhir: bagaimana aplikasi menangani penolakan akses (di mana ia membatalkan atau mengabaikan atau memperingatkan pengguna) tergantung pada aplikasi.

el.pescado
sumber
1

Belum ada yang memiliki so, jadi saya mengumpulkan jawaban yang memiliki semua yang dapat saya pikirkan.

1 Saat Anda menjalankan executable, terkadang OS akan menolak izin Anda untuk melakukannya. Misalnya menjalankan make install dengan awalan sebagai jalur sistem perlu sudo, sedangkan awalan menjadi jalur non-sistem tidak akan diminta untuk sudo. Bagaimana OS memutuskan bahwa menjalankan executable akan membutuhkan lebih banyak hak istimewa daripada yang dimiliki pengguna, bahkan sebelum program melakukan sesuatu?

Tidak, itu tidak dilakukan ketika executable dimulai. Ini dilakukan ketika executable mencoba melakukan sesuatu.

Os akan memeriksa izin sistem file, dan kemampuan (ini tidak tercakup oleh izin sistem file, dan termasuk mengurangi level yang bagus, mknode, beberapa hal jaringan tingkat rendah, membunuh proses orang lain, reboot, mengatur waktu, dll.). Jika Anda tidak memiliki izin maka Anda tidak bisa melakukannya. Root memiliki kemampuan penuh, termasuk CAP_DAC_OVERRIDE (abaikan izin file).

2 Kadang-kadang, menjalankan program tidak akan ditolak izinnya, tetapi program akan dapat melakukan lebih banyak hal jika dijalankan dengan sudo. Sebagai contoh, ketika menjalankan du pada beberapa direktori sistem, hanya dengan sudo ia akan dapat mengakses beberapa direktori. Mengapa OS tidak menolak izin menjalankan program seperti itu, atau ramah memberi tahu lebih banyak hak istimewa, sebelum program dapat berjalan?

OS tidak dapat mengetahui program apa yang akan dilakukan. Jadi tergantung pada program untuk memeriksa izin sebelum dimulai, dan memutuskan apa yang harus dilakukan. Tidak harus melakukan ini sekalipun.

Catatan: di android ada manifes, dalam aplikasi ini menyatakan hak apa yang dapat digunakan. OS akan membunuh aplikasi apa pun yang mencoba menggunakan hak istimewa yang tidak dinyatakan, dan OS tidak selalu menjamin bahwa hak istimewa dapat dihormati. mis. akses jaringan mungkin tidak tersedia.

2 Benarkah setiap kali sudo bekerja, su juga akan bekerja, dan kapan pun su bekerja, sudo juga akan bekerja? atau dengan su, pengguna dapat melakukan lebih banyak daripada dengan sudo? Bagaimana OS memutuskan kapan sudo bekerja, dan kapan su diperlukan?

sudo dan su melakukan kurang lebih samething. Beberapa perbedaan adalah penanganan variabel lingkungan dan penghindaran masalah keamanan lainnya. Namun keduanya adalah alat untuk memungkinkan Anda menjadi pengguna lain, dan keduanya memiliki pengguna root default.

su adalah alat asli, itu mengharuskan Anda untuk memasukkan kata sandi pengguna / grup yang ingin Anda ubah.

sudolebih baru dan mengharuskan, secara default, Anda memasukkan kata sandi Anda sendiri, tetapi dapat dikonfigurasikan untuk menerima kata sandi pengguna / grup yang Anda gunakan, atau tidak ada kata sandi sama sekali. Ini juga memungkinkan banyak konfigurasi, perintah apa yang akan bekerja dengannya, untuk siapa, dan bagaimana ia akan mengautentikasi dengan program ini untuk pengguna ini pada mesin ini. Ada juga sudoeditini bagian dari sudodan dapat digunakan untuk memungkinkan pengeditan sebagai pengguna yang berbeda dan menghindari masalah keamanan sub-penembakan keluar dari editor (memanggil eksekutif dari editor untuk menjalankan proses sewenang-wenang dengan eskalasi hak istimewa).

ctrl-alt-delor
sumber