Bagaimana sudo memutuskan apakah akan meminta kata sandi, ketika diberi perintah yang sebenarnya tidak memerlukan `sudo`?

10

Ketika menerapkan sudoperintah yang sebenarnya tidak perlu sudo,

  • terkadang tidak menanyakan kata sandi saya. Misalnya di bawah saya $HOME, sudo ls.

  • Tetapi saya ingat bahwa itu berlaku untuk beberapa perintah lain, meskipun saya lupa yang mana.

Jadi saya bertanya-tanya bagaimana sudomemutuskan apakah akan meminta kata sandi, ketika diberi perintah yang sebenarnya tidak perlu sudo? Apakah ada aturan dalam /etc/sudoersmenentukan itu?

Masalah saya yang sebenarnya adalah ketika saya menggunakannya du, kadang-kadang menunjukkan "izin ditolak" untuk beberapa direktori, dan kadang-kadang tidak, mungkin karena saya tidak memiliki izin pada beberapa direktori? Saya berlaku sudountuk duapa pun, dan saya pikir saya akan diminta untuk memasukkan kata sandi, tetapi sebenarnya tidak pada direktori saya sendiri.

Tim
sumber
15
Memutuskan apakah suatu program akan berusaha melakukan sesuatu yang hanya dapat dilakukan oleh root, atau mengakses file yang dilarang diakses oleh pengguna yang memohon, tanpa benar-benar menjalankan program, adalah Masalah Pemutusan yang terselubung. Jadi Anda bisa yakin bukan itu yang dilakukan sudo.
zwol
2
1 karena walaupun pertanyaannya didasarkan pada kesalahpahaman, gejalanya dijelaskan dengan jelas, dan ia memiliki satu jawaban yang tidak ambigu.
mulai

Jawaban:

22

Dalam konfigurasi tipikal, perintahnya tidak relevan. Anda harus memasukkan kata sandi saat pertama kali menggunakan sudo, dan Anda tidak memerlukan kata sandi di shell khusus itu selama 15 menit berikutnya.

Dari perspektif komputer, tidak ada yang namanya "perintah yang membutuhkan sudo". Setiap pengguna dapat mencoba menjalankan perintah apa pun. Hasilnya mungkin tidak lain adalah pesan kesalahan seperti "Izin ditolak" atau "Tidak ada file atau direktori", tetapi selalu memungkinkan untuk menjalankan perintah.

Misalnya, jika Anda menjalankan dupada pohon direktori yang memiliki konten yang Anda tidak memiliki izin untuk mengakses, Anda akan mendapatkan kesalahan izin. Itu artinya "izin ditolak". Jika Anda menjalankan sudo du, sudo dijalankan dusebagai root, jadi Anda tidak mendapatkan kesalahan izin (itulah tujuan akun root: root¹ selalu memiliki izin). Ketika Anda menjalankan sudo du, dujalankan sebagai root, dan sudotidak terlibat sama sekali setelah dudimulai. Apakah du menemukan kesalahan izin sama sekali tidak relevan dengan cara kerja sudo.

Ada perintah yang perlu sudo untuk melakukan sesuatu yang bermanfaat . Kegunaan adalah konsep manusia. Anda perlu menggunakan sudo (atau beberapa metode lain untuk menjalankan perintah sebagai root) jika perintah itu melakukan sesuatu yang berguna ketika dijalankan sebagai root tetapi tidak ketika dijalankan di bawah akun Anda.

Apakah sudo meminta kata sandi Anda tergantung pada dua hal.

  1. Berdasarkan konfigurasi, sudo memutuskan apakah Anda perlu disahkan. Secara default, sudo memerlukan kata sandi. Ini dapat dimatikan dalam beberapa cara, termasuk mengatur authenticateopsi ke false dan memiliki aturan yang berlaku dengan NOPASSWDtag.
  2. Jika sudo memerlukan kata sandi Anda, mungkin konten untuk menggunakan nilai yang di-cache. Tidak apa-apa karena alasan sudo memerlukan kata sandi Anda bukan untuk mengotentikasi siapa yang memanggilnya (sudo tahu apa yang pengguna panggil), tetapi untuk mengonfirmasi bahwa itu masih Anda atas perintah dan bukan seseorang yang mengambil kendali atas keyboard Anda. Secara default, sudo mau percaya bahwa Anda masih mematuhi perintah jika Anda memasukkan kata sandi kurang dari 15 menit yang lalu (ini dapat diubah dengan timeoutopsi). Anda harus memasukkan kata sandi di terminal yang sama (sehingga jika Anda tetap masuk di satu terminal kemudian meninggalkan terminal itu tanpa pengawasan dan kemudian menggunakan terminal lain, seseorang dapat 'tty_tickets

¹ hampir, tapi itu di luar cakupan utas ini.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Mungkin ada file yang memiliki bit yang dapat dieksekusi ditetapkan hanya untuk root, bukan untuk yang lain. Ini mungkin jatuh karena "perlu root untuk mengeksekusi". (Just nitpicking.)
Paŭlo Ebermann
@ PaŭloEbermann Saya menulis "setiap pengguna dapat mencoba menjalankan perintah apa pun" untuk menghindari nitpicking tentang kasus (jarang) itu. Selalu ada nitpicker :(
Gilles 'SO- stop being evil'
45

sudotidak tahu apakah perintah yang diminta untuk dijalankan perlu dijalankan karena beberapa pengguna lain (biasanya root), yang ia ketahui hanyalah konfigurasinya. Itu menentukan pengguna mana yang diizinkan untuk menjalankan sudo, dengan apa pengguna sebagai "target", dan untuk perintah apa; itu juga menentukan apakah kata sandi diperlukan, yang mana, dan apakah akan menyimpan token otentikasi.

Jika Anda menggunakan konfigurasi Debian default, yang terakhir kemungkinan besar adalah yang terlibat di sini: sudoakan menanyakan kata sandi Anda saat pertama kali menggunakannya di terminal mana pun, maka ia akan menyimpan token otentikasi untuk jangka waktu tertentu. Jika Anda menggunakan kembali sudodi terminal yang sama dalam jangka waktu itu, itu tidak akan meminta Anda untuk kata sandi.

Stephen Kitt
sumber
Terima kasih. Apakah maksud Anda sudo du /path/to/some/dirharus selalu membutuhkan kata sandi saya, atau tidak pernah, terlepas dari /path/to/some/dir?
Tim
12
Iya. Itu akan selalu membutuhkan kata sandi Anda (atau tidak). Jelas, jika perlu kata sandi Anda tetapi sudah menyimpannya dalam cache, itu tidak akan meminta Anda untuk memasukkannya.
dr_
5
Sebenarnya itu bisa bergantung pada path, karena /etc/sudoersdapat menentukan perintah dan argumen mereka. Namun jika Anda belum menambahkan hal seperti itu ke sudoers(dan jika sudah, saya harap Anda akan mengetahuinya), argumen tidak akan menjadi masalah (maupun perintah jika Anda memiliki akses umum untuk melakukan root melalui sudo ).
Stephen Kitt
19
sudotidak menyimpan kata sandi Anda dalam cache, hanya informasi yang identitas Anda telah diverifikasi satu kali dengan pemeriksaan kata sandi. Karena sudomerupakan program setuid-root, ia sudah memiliki semua izin yang diperlukan untuk menjalankan apa pun seperti siapa pun - tetapi dipercaya hanya mengizinkan pengguna untuk menggunakannya persis seperti yang ditentukan dalam sudoersfile, dan untuk menolak semua upaya lain untuk menggunakannya . Itu sebabnya penting bahwa sudoini adalah program yang sangat kecil dan dipelajari dengan sangat baik.
telcoM
6

ke perintah yang tidak benar-benar membutuhkan sudo

Bukan berarti perintah perlu atau tidak perlu sudo. Ketika kamu berlari

sudo -u user command

sistem dijalankan commandsebagai user.

Apakah doa berhasil atau tidak, dan apakah kata sandi ditanyakan atau tidak, tergantung pada kebijakan keamanan sudoers(biasanya dikonfigurasi dalam /etc/sudoers).

dr_
sumber