Di Windows, jika saya menolak permintaan UAC aplikasi, mengapa itu tidak terus berjalan?

17

Berasal dari latar belakang Linux / Unix, saya tidak dapat memahami cara kerja UAC di Windows.

Saya mendengar bahwa UAC berfungsi seperti sudo. Aplikasi Linux saya dapat melakukan beberapa pekerjaan lain sebelum menelepon sudo.

Tetapi di Windows, tampaknya semua aplikasi yang memerlukan konfirmasi UAC harus memiliki UAC sebelum melakukan pekerjaan yang sebenarnya sama sekali! Saya menjalankan aplikasi, meminta saya untuk konfirmasi UAC dan saya menolaknya - aplikasi tidak akan berjalan.

Jadi apakah UAC bekerja seperti ini?

sudo su
./run_app

Daripada:

./do_work1
sudo su
./du_work2

Terima kasih atas jawaban hebat semua orang!

Howard
sumber

Jawaban:

12

Saat masuk ke Windows sebagai pengguna standar, sesi masuk dibuat dan token yang hanya berisi hak istimewa paling dasar diberikan. Dengan cara ini, sesi masuk baru tidak mampu membuat perubahan yang akan mempengaruhi keseluruhan sistem. Saat masuk sebagai pengguna dalam grup Administrators, dua token terpisah ditugaskan. Token pertama berisi semua hak istimewa yang biasanya diberikan kepada administrator, dan yang kedua adalah token terbatas mirip dengan apa yang akan diterima pengguna standar. Aplikasi pengguna, termasuk Windows Shell, kemudian dimulai dengan token terbatas, menghasilkan lingkungan privilege yang berkurang bahkan di bawah akun Administrator. Ketika suatu aplikasi meminta hak yang lebih tinggi atau "Jalankan sebagai administrator" diklik, UAC akan meminta konfirmasi dan, jika persetujuan diberikan,

Dari apa yang saya pahami, apa arti kalimat terakhir itu adalah bahwa dialog UAC ditampilkan sebelum aplikasi dimuat sehingga dimulai dengan token yang tidak dibatasi, atau jika itu dimulai dengan hak pengguna standar dan membutuhkan hak tinggi di antaranya untuk beberapa berfungsi, perlu mendapatkan persetujuan pengguna dan kemudian menelurkan proses baru yang kemudian berjalan dengan hak tinggi . Token yang diberikan saat proses dimulai adalah yang menentukan haknya. Token ini tidak dapat diubah kemudian, jadi jika diperlukan lebih banyak hak, proses baru perlu dilakukan.

Dengan cara ini, UAC tidak persis sama dengan sudo .

Karan
sumber
4
Sebenarnya, itu sama dengan sudo. Menjalankan "sudo su" tidak menambahkan hak akses root ke shell Anda saat ini, itu memulai shell baru dalam proses terpisah. Jika Anda keluar dari shell itu, Anda kembali ke yang pertama.
Wyzard --Hentikan Harming Monica--
1
Perbedaan antara Windows dan Unix adalah bahwa programmer Unix terbiasa melakukan hal-hal dalam subproses, sehingga wajar untuk memulai subproses yang lebih istimewa untuk bagian tertentu dari tugas yang membutuhkan hak istimewa. Di Windows, lebih biasa melakukan segala sesuatu dalam satu proses tunggal, dan memisahkan pekerjaan menjadi bagian-bagian istimewa dan non-istimewa (berjalan dalam proses terpisah) yang terlihat seperti kerja keras. (Tentu saja, dalam banyak kasus lebih baik untuk mengetahui bahwa Anda tidak memiliki hak istimewa yang diperlukan segera daripada setengah jalan melalui pekerjaan!)
Harry Johnston
19

Di bawah Windows, prompt UAC dipicu ketika Anda mencoba untuk menjalankan executable yang ditandai sebagai membutuhkan peningkatan manifes yang tertanam dalam file dan Anda belum menjalankan yang ditinggikan. Perilaku ini lebih seperti setuid daripada su dalam hal itu file, bukan perintah yang memberi tahu OS bahwa executable harus dijalankan dengan kredensial yang berbeda.

Nicole Hamilton
sumber
4

Itu karena mereka berbeda, sederhana dan sederhana. UAC bisa saja diimplementasikan sudo, tetapi ternyata tidak.

Anda dapat menganggapnya sebagai analogi dengan perlindungan jaringan.

sudoseperti ketika sebuah program meminta akses jaringan dan firewall Anda meminta Anda untuk memberikannya atau tidak. Anda dapat mengatakan ya dan program akan membuka soket, atau Anda dapat mengatakan tidak dan itu akan mengeluh tentang kurangnya koneksi dan melakukan apa pun yang dapat dilakukan tanpa akses jaringan (beberapa program yang dirancang buruk sebenarnya macet). Sebagai contoh:

function1();
input();
function2();
secure_operation(); //requests access
function3();        //may depend on results of previous operation; error-checking important

UAC lebih seperti peringatan yang Anda dapatkan ketika mencoba membuka file yang diunduh ke volume NTFS. Windows memperingatkan Anda tentang potensi kejahatan dan menanyakan apakah Anda ingin menjalankannya (sama sekali) atau tidak. Ini operasi semua atau tidak sama sekali; Anda tidak dapat memilih untuk mempercayai hanya sebagian dari program dan bukan yang lain. Sebagai contoh:

if (requires_high_priv(program)) {
  if (request_priv(program))
    program();
}
else {
  program();
}

Anda harus ingat bahwa tidak seperti Linux yang lebih diarahkan pada pengguna dan aplikasi tingkat lanjut, Windows dirancang untuk menjadi ramah pengguna untuk berbagai pengguna sebanyak mungkin, sehingga menyederhanakan keamanan adalah yang terpenting. Selain itu, karena permukaan pajanannya yang besar, ia sering menjadi target malware, jadi lebih masuk akal untuk sepenuhnya mempercayai suatu program atau tidak sama sekali.

Synetech
sumber
4

Saya tidak benar-benar tahu arsitektur linux, jadi maafkan saya jika saya melakukan kesalahan, tetapi pemahaman saya adalah bahwa Linux dan Windows tidak jauh berbeda dalam hal ini ...

Contoh ... Skrip salin yang melakukan salinan file normal ke lokasi yang tidak dilindungi dan file yang mencoba menyalin ke lokasi yang dilindungi, kemudian salinan biasa lagi.

Pemahaman saya adalah bahwa di Linux, aplikasi hanya berjalan dan mencoba melakukan tindakan - jika tidak memiliki izin untuk melakukan tindakan itu - itu akan gagal tindakan itu, tetapi teruskan. Dalam contoh di atas - ketika menjalankan skrip salin di Linux sebagai pengguna biasa, itu akan menyalin file biasa, memberikan masalah izin dan menyalin file kedua - jika dijalankan dengan sudo, itu akan melakukan semua tiga salinan.

Windows persis sama dalam hal ini - menjalankan skrip sebagai pengguna non administratif hanya akan menyalin satu, mengeluarkan izin kedua dan menyalin berikutnya. Dengan UAC, ia akan menjalankan ketiganya.

Perbedaannya adalah bahwa banyak aplikasi Windows hanya memiliki satu set konfigurasi sehingga mereka meminta elevasi UAC secara default dan berhenti / gagal jika tidak memilikinya .... tetapi, itu menjadi jauh lebih sedikit.

William Hilsum
sumber
1
... dan, saya harus mengatakan bahwa setelah membaca kembali jawaban saya dan pertanyaan Anda - Saya tidak 100% yakin dengan apa yang Anda tanyakan ... Saya harap ini membantu, tapi, tidak terlalu yakin: /
William Hilsum