3 คะแนน โดย GN⁺ 2024-02-09 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ประกาศเปิดตัว Sudo สำหรับ Windows ใน Windows 11 Insider Preview Build 26052
  • Sudo สำหรับ Windows เป็นวิธีใหม่ที่ช่วยให้ผู้ใช้สามารถรันคำสั่งที่ยกระดับสิทธิ์ได้โดยตรงจากคอนโซลเซสชันที่ไม่มีสิทธิ์
    • ตอนนี้ไม่จำเป็นต้องคอยหา "Run as administrator" อีกต่อไป
  • เปิดซอร์สบน GitHub
  • หากต้องการความสามารถเพิ่มเติมที่ Sudo สำหรับ Windows ยังไม่มี แนะนำให้ลองดู gsudo ของ Gerardo Grignoli

วิธีเปิดใช้งาน Sudo สำหรับ Windows

  • สามารถเปิดใช้งาน Sudo สำหรับ Windows ได้โดยไปที่หน้าการตั้งค่า 'For developers' ใน Windows Settings แล้วเปิดตัวเลือก "Enable Sudo"
  • หรือจะเปิดใช้งานด้วยการรันคำสั่งต่อไปนี้ในคอนโซลเซสชันที่ยกระดับสิทธิ์แล้วก็ได้: sudo config --enable

วิธีตั้งค่า Sudo สำหรับ Windows

  • ปัจจุบัน Sudo สำหรับ Windows รองรับตัวเลือกการตั้งค่า 3 แบบ: รันในหน้าต่างใหม่ (forceNewWindow), ปิดการรับอินพุต (disableInput), รันแบบอินไลน์ (normal)
  • หากต้องการเปลี่ยนตัวเลือกการตั้งค่า สามารถใช้เมนูดรอปดาวน์ในหน้าการตั้งค่า 'For developers' ของ Windows Settings หรือรันคำสั่งในคอนโซลเซสชันที่ยกระดับสิทธิ์แล้ว

ตัวเลือกการตั้งค่า 1: ในหน้าต่างใหม่

  • ในการตั้งค่านี้ Sudo for Windows จะเปิดหน้าต่างคอนโซลใหม่ที่ยกระดับสิทธิ์แล้ว และรันคำสั่งในหน้าต่างนั้น
  • ตัวอย่างเช่น เมื่อรัน sudo netstat -ab จะมีการเปิดหน้าต่างใหม่และรันคำสั่งในหน้าต่างนั้น

ตัวเลือกการตั้งค่า 2: ปิดการรับอินพุต

  • ในการตั้งค่านี้ Sudo for Windows จะรันโปรเซสที่ยกระดับสิทธิ์แล้วในหน้าต่างปัจจุบัน แต่โปรเซสใหม่นั้นจะถูกสร้างขึ้นมาโดยที่ stdin ถูกปิดไว้
  • นั่นหมายความว่าโปรเซสใหม่จะไม่รับอินพุตจากผู้ใช้ จึงใช้ไม่ได้กับโปรเซสที่ต้องการอินพุตเพิ่มเติมหลังจากยกระดับสิทธิ์

ตัวเลือกการตั้งค่า 3: อินไลน์

  • การตั้งค่านี้มีพฤติกรรมใกล้เคียงกับ sudo บนระบบปฏิบัติการอื่นมากที่สุด
  • Sudo for Windows จะรันโปรเซสที่ยกระดับสิทธิ์แล้วโดยเชื่อมต่อกับ stdin, stdout, stderr ของหน้าต่างปัจจุบัน
  • ซึ่งหมายความว่าโปรเซสที่ยกระดับสิทธิ์ใหม่สามารถรับอินพุตและส่งเอาต์พุตกลับมายังหน้าต่างปัจจุบันได้

หลักการทำงาน

  • เมื่อใช้ sudo ในบรรทัดคำสั่งเพื่อยกระดับสิทธิ์ของโปรเซส จะมีหน้าต่าง UAC แสดงขึ้นมาเพื่อให้ผู้ใช้ยืนยันการยกระดับสิทธิ์
  • เมื่อผู้ใช้ยืนยันแล้ว โปรเซสจะถูกยกระดับสิทธิ์ตามตัวเลือกการตั้งค่าที่ผู้ใช้เลือกไว้
  • หากต้องการดูพารามิเตอร์เสริมของคำสั่ง sudo ให้รัน sudo -h ในคอนโซล

ในหน้าต่างใหม่

  • ในการตั้งค่านี้ sudo.exe จะเปิดหน้าต่างคอนโซลใหม่ที่ยกระดับสิทธิ์แล้วและรันคำสั่งในหน้าต่างนั้น
  • หน้าต่างใหม่จะเริ่มต้นด้วยไดเรกทอรีการทำงานและตัวแปรสภาพแวดล้อมเดียวกับหน้าต่างปัจจุบัน
  • การตั้งค่านี้มีลำดับการทำงานคล้ายกับคำสั่ง runas

ปิดการรับอินพุตและอินไลน์

  • ในการตั้งค่านี้ sudo.exe จะเริ่มโปรเซสใหม่ที่ยกระดับสิทธิ์แล้ว จากนั้นเริ่มโปรเซส sudo.exe ที่ยกระดับสิทธิ์แล้วอีกตัว และ sudo.exe ดั้งเดิมที่ไม่มีสิทธิ์จะสร้างการเชื่อมต่อ RPC กับโปรเซสใหม่ที่ยกระดับสิทธิ์แล้ว
  • กล่าวอีกนัยหนึ่งคือ ข้อมูลจะถูกส่งต่อจากอินสแตนซ์ sudo ที่ไม่มีสิทธิ์ไปยังอินสแตนซ์ที่ยกระดับสิทธิ์แล้ว
  • โดยเฉพาะอย่างยิ่ง console handle ของโปรเซสที่ไม่มีสิทธิ์จะถูกส่งต่อไปยังโปรเซสที่ยกระดับสิทธิ์แล้ว ทำให้โปรเซสที่ยกระดับสิทธิ์สามารถอ่านอินพุตจากโปรเซสที่ไม่มีสิทธิ์และเขียนเอาต์พุตกลับไปยังโปรเซสนั้นได้
  • อย่างไรก็ตาม ในการตั้งค่า "ปิดการรับอินพุต" จะไม่มีการส่งต่อ input handle ของคอนโซลไปยังโปรเซสที่ยกระดับสิทธิ์แล้ว จึงไม่สามารถอ่านอินพุตจากผู้ใช้ได้

ขั้นตอนถัดไป

  • ทีมงานกำลังดำเนินการเปิดซอร์ส Sudo สำหรับ Windows และมีแผนจะแชร์รายละเอียดเพิ่มเติมในอีกไม่กี่เดือนข้างหน้า
  • ขอให้ช่วยส่งฟีดแบ็กโดยตรงผ่าน GitHub repository

ความเห็นของ GN⁺:

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

1 ความคิดเห็น

 
GN⁺ 2024-02-09
ความเห็นจาก Hacker News
  • คำสั่ง sudo กำลังถูกนำเข้ามาใน Windows นี่ไม่ใช่การพอร์ต sudo จาก Linux แบบตรง ๆ แต่เป็นการทำใหม่โดยคำนึงถึงความแตกต่างของโครงสร้างสิทธิ์ระหว่างระบบปฏิบัติการ เป้าหมายคือมอบประสบการณ์ให้ผู้ใช้รันคำสั่งด้วยสิทธิ์ผู้ดูแลระบบได้ในหน้าต่างเทอร์มินัลเดียวกัน
  • ให้ความรู้สึกคล้ายตอนที่ PowerShell แทนที่ curl และ wget ด้วยคำสั่งที่ต่างออกไปโดยสิ้นเชิง ซึ่งอาจเป็นปัญหาได้เพราะอาร์กิวเมนต์ไม่เข้ากัน
  • elevate ของ Nirsoft ก็ทำงานได้ดีอยู่แล้ว แต่การมีฟีเจอร์ที่ผสานเข้ากับระบบมากกว่านี้ย่อมดีกว่า
  • น่าสนใจที่ sudo แทบจะถูกดูแลโดยคนเพียงคนเดียว
  • การเขียนถึงความยอดเยี่ยมด้านการใช้งานของ sudo โดยไม่พูดถึงระบบปฏิบัติการสาย Linux/Unix เลยนั้นดูแปลก
  • ตอนทำงานที่ Microsoft นั้น UAC (User Account Control) ไม่ได้ถูกมองว่าเป็น security boundary จึงสงสัยว่าฟีเจอร์นี้ออกมาได้อย่างไร หรือทุกวันนี้ UAC ถูกมองเป็น security boundary แล้วหรือไม่
  • กำลังติดตั้งและใช้งาน sudo.ps1 ของ psutils ผ่าน scoop มี UAC prompt ขึ้นมา แต่ก็เหมาะกับงานแบบโต้ตอบ
  • อยากให้ "Windows 12" กลายเป็น window manager + เดสก์ท็อปที่รันอยู่บนฐาน Linux ซึ่งจะคอยจำลองบั๊กเดิมอย่างประณีตเพื่อรักษาความเข้ากันได้กับ Windows 95/7/8/10/11
  • เมื่อดูจากแนวทางของคำสั่งใน PowerShell แล้ว คาดว่า sudo แบบใหม่นี้จะกลายเป็นคำสั่งที่ซับซ้อนมาก
  • แม้ sudo จะถูกเพิ่มเข้ามาเป็นฟีเจอร์ใหม่ใน Windows แต่ตอนนี้ดูเหมือนว่ายังมีจุดอ่อนด้านความปลอดภัยอยู่ และคาดว่าน่าจะค่อย ๆ ดีขึ้นเมื่อเวลาผ่านไป