ใน Windows หากฉันปฏิเสธคำขอ UAC ของแอปทำไมมันต้องไม่ทำงานต่อ


17

มาจากพื้นหลัง Linux / Unix ฉันไม่สามารถเข้าใจวิธีการทำงานของ UAC ใน Windows

ฉันได้ยินมาว่า UAC ทำงานได้เหมือนsudoกัน การประยุกต์ใช้ลินุกซ์ที่ฉันสามารถทำบางงานอื่น ๆ sudoก่อนที่จะเรียก

แต่ใน Windows ปรากฏว่าแอปพลิเคชันทั้งหมดที่ต้องมีการยืนยัน UAC จะต้องได้รับอนุญาตจาก UAC ก่อนที่จะทำงานจริงใด ๆ เลย! ฉันเรียกใช้แอปพลิเคชันจะขอให้ฉันยืนยัน UAC และฉันปฏิเสธ - แอปพลิเคชันจะไม่ทำงาน

UAC ทำเช่นนี้ได้อย่างไร

sudo su
./run_app

ค่อนข้างมากกว่า:

./do_work1
sudo su
./du_work2

ขอบคุณสำหรับคำตอบที่ดีของทุกคน!

คำตอบ:


12

เมื่อเข้าสู่ระบบ Windows ในฐานะผู้ใช้มาตรฐานเซสชันการเข้าสู่ระบบจะถูกสร้างขึ้นและมีการกำหนดโทเค็นที่มีสิทธิ์พื้นฐานที่สุดเท่านั้น ด้วยวิธีนี้เซสชันการเข้าสู่ระบบใหม่ไม่สามารถทำการเปลี่ยนแปลงที่จะส่งผลกระทบต่อระบบทั้งหมด เมื่อเข้าสู่ระบบในฐานะผู้ใช้ในกลุ่มผู้ดูแลระบบจะมีการกำหนดโทเค็นแยกกันสองโทเค็น โทเค็นแรกมีสิทธิ์ทั้งหมดโดยปกติแล้วจะมอบให้กับผู้ดูแลระบบและโทเค็นที่สองเป็นโทเค็นที่ จำกัด ซึ่งคล้ายกับที่ผู้ใช้มาตรฐานจะได้รับ แอปพลิเคชันผู้ใช้รวมถึง Windows Shell จะเริ่มด้วยโทเค็นที่ถูก จำกัด ซึ่งส่งผลให้สภาพแวดล้อมของสิทธิ์ลดลงแม้ภายใต้บัญชีผู้ดูแลระบบ เมื่อแอปพลิเคชันร้องขอสิทธิ์ที่สูงกว่าหรือคลิก "เรียกใช้ในฐานะผู้ดูแลระบบ" UAC จะแจ้งให้ยืนยันและหากได้รับความยินยอม

จากสิ่งที่ฉันเข้าใจสิ่งที่ประโยคสุดท้ายหมายถึงว่าทั้งโต้ตอบ UAC จะปรากฏขึ้นก่อนที่แอปโหลดเพื่อให้มันเริ่มต้นด้วยโทเค็นที่ไม่ จำกัด หรืออื่น ๆ ถ้ามันเริ่มต้นด้วยสิทธิ์ผู้ใช้มาตรฐานและต้องการสิทธิ์ยกระดับในบาง ทำงานก็ต้องได้รับความยินยอมจากผู้ใช้และแล้ววางไข่กระบวนการใหม่ซึ่งจากนั้นก็วิ่งที่มีสิทธิสูง โทเค็นที่กำหนดเมื่อเริ่มกระบวนการคือสิ่งที่กำหนดสิทธิ์ของมัน โทเค็นนี้ไม่สามารถเปลี่ยนแปลงได้ในภายหลังดังนั้นหากจำเป็นต้องมีสิทธิ์เพิ่มเติมกระบวนการใหม่จะต้องได้รับการสร้างใหม่

ด้วยวิธีนี้ UAC ไม่เหมือนกับsudo


4
จริงๆแล้วมันเหมือนกับ sudo การเรียกใช้ "sudo su" ไม่ได้เพิ่มสิทธิ์พิเศษให้กับเชลล์ปัจจุบันของคุณ แต่จะเริ่มเชลล์ใหม่ในกระบวนการแยกต่างหาก หากคุณออกจากเปลือกคุณจะกลับไปที่เปลือกแรก
Wyzard

1
ความแตกต่างระหว่าง Windows และ Unix คือโปรแกรมเมอร์ของ Unix คุ้นเคยกับการทำสิ่งต่าง ๆ ในกระบวนการย่อยดังนั้นจึงเป็นเรื่องปกติที่จะเริ่ม subprocess ที่ได้รับสิทธิพิเศษมากขึ้นสำหรับส่วนเฉพาะของงานที่ต้องการสิทธิ์พิเศษ ใน Windows มันเป็นเรื่องปกติมากกว่าที่จะทำทุกอย่างในกระบวนการเดียวและการแยกงานออกเป็นส่วนที่ได้รับการยกเว้นและไม่ได้รับสิทธิพิเศษ (การทำงานในกระบวนการที่แยกต่างหาก) จะดูเหมือนกับงานหนักมากเกินไป (แน่นอนในหลายกรณีจะเป็นการดีกว่าถ้าคุณพบว่าคุณไม่มีสิทธิ์ที่จำเป็นทันทีแทนที่จะไปทำงานครึ่งทาง!)
Harry Johnston

19

ใน Windows พรอมต์ UAC จะถูกเรียกใช้เมื่อคุณพยายามเรียกใช้ไฟล์ปฏิบัติการที่มีการทำเครื่องหมายว่าต้องการระดับความสูงในไฟล์ Manifest ที่ฝังอยู่ในไฟล์และคุณยังไม่ได้ทำการยกระดับ ลักษณะการทำงานนั้นเหมือน setuid มากกว่า su ในการเป็นไฟล์ไม่ใช่คำสั่งที่บอกระบบปฏิบัติการว่าให้เรียกใช้งานไฟล์นั้นด้วยข้อมูลประจำตัวที่แตกต่างกัน


4

เป็นเพราะพวกเขาแตกต่างกันธรรมดาและเรียบง่าย UAC นั้นสามารถนำไปใช้ได้เช่นsudoกัน แต่ไม่ใช่

คุณสามารถคิดได้ว่ามันเป็นการเปรียบเทียบกับการป้องกันเครือข่าย

sudoเปรียบเหมือนเมื่อโปรแกรมร้องขอการเข้าถึงเครือข่ายและไฟร์วอลล์ของคุณแจ้งให้คุณอนุญาตหรือไม่ คุณสามารถบอกว่าใช่และโปรแกรมจะเปิดซ็อกเก็ตหรือคุณสามารถบอกว่าไม่ได้และมันจะบ่นเกี่ยวกับการขาดการเชื่อมต่อและทำสิ่งที่มันสามารถทำได้โดยไม่ต้องเข้าถึงเครือข่าย ตัวอย่างเช่น:

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

UAC เป็นเหมือนคำเตือนที่คุณได้รับเมื่อพยายามเปิดไฟล์ที่ถูกดาวน์โหลดไปยังไดรฟ์ข้อมูล NTFS Windows จะเตือนคุณเกี่ยวกับความไม่ดีที่อาจเกิดขึ้นและถามว่าคุณต้องการเรียกใช้ (เลย) หรือไม่ มันเป็นการดำเนินการทั้งหมดหรือไม่มีอะไรเลย คุณไม่สามารถเลือกที่จะเชื่อถือเพียงส่วนหนึ่งของโปรแกรมและไม่ใช่คนอื่น ตัวอย่างเช่น:

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

คุณต้องจำไว้ว่าแตกต่างจาก Linux ซึ่งมุ่งเน้นไปที่ผู้ใช้และแอพพลิเคชั่นขั้นสูง Windows ได้รับการออกแบบให้ใช้งานได้ง่ายกับผู้ใช้ที่หลากหลายมากที่สุดเท่าที่จะเป็นไปได้ ยิ่งไปกว่านั้นเนื่องจากมีพื้นผิวการสัมผัสที่กว้างจึงเป็นเป้าหมายสำหรับมัลแวร์บ่อยครั้งดังนั้นจึงเหมาะสมกว่าที่จะไว้วางใจโปรแกรมอย่างสมบูรณ์หรือไม่ก็ตาม


4

ฉันไม่รู้จักสถาปัตยกรรมของ linux อย่างถี่ถ้วนดังนั้นโปรดยกโทษให้ฉันหากฉันทำผิด แต่ความเข้าใจของฉันคือ Linux และ Windows ไม่แตกต่างกันเลยในแง่นี้ ...

ตัวอย่าง ... สคริปต์การคัดลอกที่ทำสำเนาไฟล์ปกติไปยังตำแหน่งที่ไม่ได้รับการป้องกันและไฟล์ที่พยายามคัดลอกไปยังตำแหน่งที่ได้รับการป้องกันจากนั้นคัดลอกปกติอีกครั้ง

ความเข้าใจของฉันคือว่าใน Linux แอปพลิเคชันจะเรียกใช้และพยายามทำการกระทำหากไม่ได้รับอนุญาตให้ดำเนินการนั้นจะทำให้การดำเนินการนั้นล้มเหลว แต่จะดำเนินต่อไป ในตัวอย่างข้างต้น - เมื่อเรียกใช้สคริปต์คัดลอกใน Linux ในฐานะผู้ใช้ปกติมันจะคัดลอกไฟล์ปกติให้ปัญหาการอนุญาตและคัดลอกไฟล์ที่สอง - ถ้าใช้ sudo มันจะทำสำเนาทั้งสามชุด

Windows นั้นเหมือนกันทุกประการ - การเรียกใช้สคริปต์ในฐานะผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบจะทำการคัดลอกหนึ่งฉบับออกสิทธิ์ที่สองและคัดลอกไฟล์ถัดไป ด้วย UAC มันจะทำงานทั้งสามอย่าง

ข้อแตกต่างคือแอพพลิเคชั่นของ Windows จำนวนมากมีการตั้งค่าคอนฟิเกอเรชันเพื่อให้พวกเขาร้องขอระดับความสูงของ UAC โดยค่าเริ่มต้นและออกจาก / ล้มเหลวหากพวกเขาไม่มีมัน .... แต่นั่นก็น้อยลง


1
... และฉันต้องบอกว่าหลังจากอ่านคำตอบและคำถามของคุณอีกครั้ง - ฉันไม่แน่ใจ 100% ว่าคุณขออะไร ... ฉันหวังว่านี่จะช่วยได้ แต่ไม่แน่ใจ: /
William Hilsum
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.