
บนระบบ GNU/Linux ใดๆ ก็ตาม ผู้ใช้รูท บุคคลระดับนั้นเป็นคนที่ทุกคนให้ความเคารพ (และคุณควรจะเกรงกลัวพวกเขาบ้าง) เทียบเท่ากับ "ผู้ดูแลระบบ" ในระบบอื่นๆ แต่ต่างตรงที่ในระบบนี้สิทธิ์การเข้าถึงกว้างขวางมาก คำสั่งที่พิมพ์ผิดเพียงเล็กน้อยก็อาจทำให้ระบบพังได้ในเวลาไม่กี่วินาที เพื่อให้เข้าใจอย่างถ่องแท้ว่า root คืออะไร สิทธิ์ของ root คืออะไร และวิธีการจัดการสิทธิ์เหล่านั้น มันคือสิ่งที่ทำให้เกิดความแตกต่างระหว่างระบบที่เสถียรกับระบบที่พังทลายได้ง่ายแม้เพียงการกระตุ้นเล็กน้อย
นอกจากนี้ ระบบปฏิบัติการแต่ละระบบยังมีวิธีการจัดการสิทธิ์เหล่านี้ที่แตกต่างกันออกไป Ubuntu, Debian, Void, openSUSE และระบบปฏิบัติการอื่นๆ พวกมันไม่ได้ทำงานเหมือนกันเป๊ะๆ กับบัญชี root และกลุ่มต่างๆ เช่น ล้อ หรือด้วยไฟล์ sudoersหากคุณดูแลเซิร์ฟเวอร์ (VPS, คลาวด์ หรือเซิร์ฟเวอร์เฉพาะ) หรือเพียงแค่ต้องการจัดการระบบ Linux ของคุณได้อย่างง่ายดาย คุณจะต้องเข้าใจวิธีการทำงานของผู้ใช้ root และคำสั่ง `root` sudoการใช้งานของ su และการจัดการสิทธิ์การเข้าถึงของฝ่ายบริหาร
ผู้ใช้ root ใน Linux คืออะไรกันแน่?
ใน Linux และระบบที่คล้าย UNIX อื่นๆ ผู้ใช้ บัญชี root คือบัญชีที่มี UID 0รหัสประจำตัวพิเศษที่ให้สิทธิ์ควบคุมระบบได้อย่างสมบูรณ์ บัญชีนี้มักจะเชื่อมโยงกับ... จีไอดี 0 (กลุ่มหลัก) rootซึ่งช่วยให้คุณสามารถอ่าน แก้ไข หรือลบไฟล์ใดๆ จัดการกระบวนการ เปลี่ยนสิทธิ์ และเข้าถึงส่วนใดๆ ของระบบไฟล์ได้โดยไม่มีข้อจำกัด
เมื่อเราพูดถึง “การเป็นรากเหง้า” เราหมายถึง... เข้าสู่ระบบหรือรับเชลล์ ซึ่งทำงานด้วย UID 0 ไม่ใช่แค่ "มีสิทธิ์มากกว่า" เท่านั้น แต่เป็นการใช้บัญชีที่มีสิทธิ์นั้น อำนาจเบ็ดเสร็จเหนือระบบทุกสิ่งที่คุณทำภายใต้ตัวตนนั้นจะดำเนินการได้อย่างราบรื่นไร้ข้อจำกัด
นั่นเป็นอีกเรื่องหนึ่ง มีสิทธิ์ระดับรูทหมายความว่าผู้ใช้ทั่วไปของคุณ (เช่น ผู้ใช้ที่มี UID 1000) สามารถใช้งานผ่านเครื่องมือต่างๆ เช่น sudoวิธีนี้ช่วยให้คุณสามารถเรียกใช้คำสั่งบางอย่างได้ "ราวกับว่าคุณเป็นผู้ใช้ระดับรูท" โดยที่ข้อมูลประจำตัวในเซสชันของคุณจะไม่เปลี่ยนแปลงอย่างถาวร ในทางปฏิบัติ คุณสามารถดำเนินการงานด้านการดูแลระบบได้เหมือนเดิม แต่ภายในกรอบเวลาที่ควบคุมได้มากขึ้นและตรวจสอบย้อนกลับได้ดีกว่า
ความแตกต่างระหว่างการเป็น root และการมีสิทธิ์ root
สิ่งสำคัญคือต้องแยกแยะแนวคิดเหล่านี้ให้ชัดเจน เพราะ การล็อกอินในฐานะผู้ใช้ root ไม่เหมือนกับการเรียกใช้โปรแกรมด้วยสิทธิ์ rootในกรณีนี้ บัญชี UID 0 และกลไกการยกระดับสิทธิ์ (sudo, su, กลุ่มต่างๆ เช่น wheel เป็นต้น) จะเข้ามามีบทบาท
เมื่อ คุณคือผู้ใช้ระดับสูงสุด (UID 0, GID 0) และคุณทำ idคุณจะเห็นบางอย่างลักษณะนี้:
uid=0(root) gid=0(root) groups=0(root)
นี่แสดงว่าเซสชันปัจจุบันเป็นของ root และทุกสิ่งที่คุณเรียกใช้จะมีสิทธิ์เหล่านั้น ไม่จำเป็นต้องพิมพ์อะไรเพิ่มเติม sudo ต่อหน้าความว่างเปล่า: คำสั่งใดๆ ก็มีอิสระเต็มที่นั่นเป็นเหตุผลว่าทำไมการอยู่ในเปลือกรากนานเกินไปจึงอันตรายมาก
อย่างไรก็ตาม เมื่อคุณใช้ sudoโดยปกติแล้ว คุณจะยังคงเป็นผู้ใช้ "ปกติ" ของคุณ (เช่น UID 1000) แต่คำสั่งจะทำงานชั่วคราวในฐานะ UID 0 หากคุณทำดังนี้:
sudo apt update
เซสชั่นของคุณยังคงเป็นของผู้ใช้ของคุณ แต่... เฉพาะคำสั่งนั้นเท่านั้น โปรแกรมนี้ทำงานโดยใช้สิทธิ์ผู้ดูแลระบบ และจะมีผลเช่นเดียวกันหากคุณเรียกใช้โปรแกรมต่อไปนี้:
sudo systemctl restart apache2
ในทั้งสองกรณี ข้อมูลประจำตัวที่แสดงในบันทึกการตรวจสอบสิทธิ์จะระบุว่าผู้ใช้รายใดเป็นผู้ใช้งาน sudoซึ่งมีส่วนช่วย การตรวจสอบย้อนกลับและความรับผิดชอบส่วนบุคคล.
กรณีของ Wheel, Sudoers และกลุ่มผู้บริหาร
ในระบบปฏิบัติการบางประเภท (เช่น Void Linux หรือระบบปฏิบัติการที่พัฒนามาจาก BSD หลายๆ ระบบ) จะมีกลุ่มหนึ่งอยู่ ล้อซึ่งใช้สำหรับ ควบคุมว่าใครสามารถใช้คำสั่ง sudo ได้บ้างในระบบปฏิบัติการอื่นๆ (เช่น Ubuntu และ Debian ในการตั้งค่าทั่วไป) จะใช้กลุ่มข้อมูล sudo เพื่อมอบความสามารถนั้น แต่ละดิสทริบิวชันจัดการในแบบของตัวเอง แต่แนวคิดหลักก็เหมือนกัน คือ เฉพาะผู้ใช้ที่อยู่ในกลุ่มที่กำหนดเท่านั้นที่จะสามารถยกระดับสิทธิ์ได้
หาก Void Linux แจ้งให้คุณเพิ่มผู้ใช้ของคุณเข้าไป ล้อโดยปกติแล้ว สิ่งที่ควรทำคือเรียกใช้คำสั่งประมาณนี้:
sudo usermod -aG wheel tu_usuario
จากนั้น เมื่อทำ idคุณควรจะเห็นกลุ่มล้อปรากฏอยู่ในกลุ่มย่อยต่างๆ หากไม่ปรากฏ อาจเป็นเพราะ... การเปลี่ยนแปลงจะมีผลก็ต่อเมื่อคุณออกจากระบบแล้วเท่านั้นหรือระบบจัดการการเข้าถึงด้วยวิธีที่แตกต่างออกไปเล็กน้อย (ตัวอย่างเช่น โดยอาศัย PAM หรือการกำหนดค่าเฉพาะบางอย่าง) sudo o su (ซึ่งไม่จำเป็นต้องมีล้อในทุกกรณี)
ในระบบปฏิบัติการอย่าง Ubuntu หรือ Debian กลุ่มคีย์มักจะเป็น sudoวิธีการเพิ่มผู้ใช้:
sudo adduser nombre_de_usuario sudo
การควบคุมที่แม่นยำที่สุดสามารถทำได้โดยการแก้ไขไฟล์ / etc / sudoers (หรือไฟล์ใน) /etc/sudoers.d/) ใช้เสมอ visudoเพื่อที่คุณจะสามารถ กำหนดคำสั่งที่ชัดเจนว่าผู้ใช้หรือกลุ่มใดบ้างที่สามารถดำเนินการได้ โดยใช้สิทธิ์ระดับรูท แทนที่จะให้สิทธิ์อย่างอิสระเต็มที่
สิทธิ์ระดับรูทใน Ubuntu: นโยบายความปลอดภัยและการใช้คำสั่ง sudo
Ubuntu ยึดมั่นในปรัชญาที่ค่อนข้างชัดเจน: บัญชีผู้ใช้ระดับสูงสุด (root account) มีอยู่จริง แต่ไม่ได้ใช้สำหรับการล็อกอินโดยตรงเมื่อติดตั้งระบบแล้ว ผู้ใช้ root จะมี UID 0 เช่นเดียวกับระบบ UNIX ทั่วไป แต่จะไม่ได้รับรหัสผ่านที่ใช้ได้สำหรับการล็อกอิน แทนที่จะเป็นเช่นนั้น การใช้งานอย่างเข้มข้นของ... sudo.
ซึ่งหมายความว่าโดยค่าเริ่มต้น คุณไม่สามารถเข้าใช้งาน TTY หรืออินเทอร์เฟซกราฟิกในฐานะผู้ใช้ root โดยใช้รหัสผ่านได้เนื่องจากไม่มีการกำหนดรหัสผ่านสำหรับผู้ใช้รายนั้น การตัดสินใจนี้ช่วยลดช่องโหว่ในการโจมตีแบบเดาพาสเวิร์ด และป้องกันไม่ให้ผู้คนเสียเวลาทั้งวันไปกับการทำงานในฐานะผู้ใช้ root โดยไม่จำเป็น
ขั้นตอนการใช้งาน "ปกติ" ใน Ubuntu คือ: คุณล็อกอินด้วยบัญชีผู้ใช้ของคุณ ซึ่งบัญชีผู้ใช้นั้นเป็นสมาชิกของกลุ่มที่กำหนด sudoและเมื่อคุณต้องการจัดการงานด้านการบริหาร คุณก็เรียกใช้คำสั่งด้วย sudo และคุณเขียน รหัสผ่านของคุณเองไม่ใช่บัญชี root ด้วยวิธีนี้ ระบบจะบันทึกว่าใครทำอะไร เมื่อไหร่ และใช้คำสั่งอะไร
หากคุณต้องการเข้าถึงเชลล์แบบเต็มรูปแบบในฐานะผู้ใช้ root (เช่น เพื่อดำเนินการหลายอย่างต่อเนื่องกัน) คุณสามารถใช้คำสั่งต่อไปนี้:
sudo -i
sudo su -
ทั้งสองจะให้คุณคนละหนึ่งชิ้น เชลล์รูทแบบโต้ตอบโดยปกติแล้วขั้นตอนนี้จะโหลดสภาพแวดล้อมการเข้าสู่ระบบของผู้ใช้ หากต้องการออกจากโหมดนี้ ให้เรียกใช้คำสั่งต่อไปนี้ exit หรือกด Ctrl + D.
ผู้ใช้ root สามารถใช้งานได้ตลอดเวลาหรือไม่?
การกระจายตัวไม่สำคัญ: บัญชี root มีอยู่ภายในระบบเสมอ เพราะเป็นบัญชีที่มี UID 0 สิ่งที่จะแตกต่างกันไปตามแต่ละดิสโทรคือ บัญชีนั้นมีรหัสผ่านที่ถูกต้องหรือไม่ อนุญาตให้ล็อกอินโดยตรงหรือไม่ และสามารถใช้งานได้ภายใต้เงื่อนไขใดบ้าง
ในกรณีของ openSUSE (เช่น Tumbleweed) ระหว่างการติดตั้ง คุณสามารถเว้นช่องรหัสผ่าน root ว่างไว้ หรือกำหนดค่าระบบเพื่อให้ผู้ใช้ทั่วไปมีสิทธิ์ในการดูแลระบบได้โดยใช้คำสั่ง... sudoนั่นอาจก่อให้เกิด ไม่แน่ใจว่า root เปิดใช้งานอยู่หรือไม่ หรืออาจจะไม่ใช่ แต่บัญชีผู้ใช้ระดับรูทนั้นยังคงอยู่เสมอ เพียงแต่ว่า... คุณไม่สามารถยืนยันตัวตนด้วยอุปกรณ์นี้ได้ เนื่องจากไม่ได้ตั้งรหัสผ่าน หรือระบบบล็อกการเข้าถึงโดยใช้ PAM หรือนโยบายการเข้าสู่ระบบ
เมื่อคุณใช้ su โดยปกติแล้ว หากต้องการเปลี่ยนไปใช้สิทธิ์ root และป้อนรหัสผ่านผู้ใช้แทนรหัสผ่าน root คุณจะต้องทำตามขั้นตอนต่อไปนี้ ไม่ทำงานเว้นแต่ว่าระบบปฏิบัติการจะตั้งค่าไว้เช่นนั้น su เพื่อยอมรับรหัสผ่านของผู้ใช้ sudoer แทนรหัสผ่านของ root (พบได้น้อยกว่า) โดยทั่วไปแล้ว su ระบบจะขอรหัสผ่านของผู้ใช้เป้าหมาย ซึ่งก็คือรหัสผ่าน root หากคุณทำแบบง่ายๆ su.
นอกจากนี้ หากคุณสังเกตเห็นว่าเมื่อทำเช่นนั้น su ในการเข้าสู่โหมด root นั้น เชลล์ของคุณจะยังคงอ่านฟังก์ชันหรือนามแฝงจากผู้ใช้ปกติของคุณต่อไป คุณอาจใช้รูปแบบต่างๆ เช่น su โดยไม่มีเครื่องหมายยัติภังค์ (su ด้านหน้าของ su -) ซึ่งทำให้ สภาพแวดล้อมการเข้าสู่ระบบระดับ root โหลดไม่สมบูรณ์นั่นคือเหตุผลที่คุณจึงสามารถใช้งานต่อไปได้ .bashrc หรือการตั้งค่า zsh ของคุณ ทำให้เกิดข้อผิดพลาดในฟังก์ชันที่ไม่มีอยู่สำหรับบัญชี root
เข้าถึงระยะไกลในฐานะผู้ใช้ root ผ่าน SSH
ในเซิร์ฟเวอร์หลายแห่ง เมื่อคุณเช่า VPS หรือเซิร์ฟเวอร์เฉพาะ ผู้ให้บริการจะให้สิ่งต่อไปนี้แก่คุณ เข้าถึง SSH โดยตรงในฐานะ rootโดยใช้รหัสผ่าน หรือถ้าจะให้ดีกว่านั้นคือใช้คีย์ SSH จากระบบ Linux การเชื่อมต่อก็ง่ายมาก ดังนี้:
ssh root@IP-del-servidor
ในระบบปฏิบัติการ Windows การใช้งานโปรแกรมไคลเอ็นต์ เช่น เป็นเรื่องปกติ ฉาบคุณเพียงแค่ต้องป้อนที่อยู่ IP ของเซิร์ฟเวอร์ลงในช่องที่กำหนด ชื่อโฮสต์, คลิกที่ จุดเปิด และเมื่อหน้าต่างเทอร์มินัลปรากฏขึ้น เข้าสู่ระบบในฐานะผู้ใช้ root โดยใช้รหัสผ่านที่ให้มา หรือโดยใช้คีย์ที่ตั้งค่าไว้
คุณยังสามารถเชื่อมต่อกับผู้ใช้รายอื่น ๆ บนเซิร์ฟเวอร์ได้ และเมื่อเชื่อมต่อแล้ว ยกระดับสิทธิ์เป็นระดับ root ด้วยคำสั่ง sudo หรือ su หากผู้ใช้นั้นอยู่ในกลุ่มที่เหมาะสมหรือมีการตั้งค่าที่เกี่ยวข้องในระบบ /etc/sudoersในกรณีนั้น คุณจะทำงานโดยมีสิทธิ์จำกัด จนกว่าคุณจะต้องดำเนินการงานด้านการดูแลระบบเฉพาะอย่างใดอย่างหนึ่ง
ความเสี่ยงจากการใช้รากไม้โดยไม่ระมัดระวัง
สิทธิ์ระดับผู้ดูแลระบบนั้นมีประโยชน์อย่างมาก แต่ก็เป็นดาบสองคมเช่นกัน ข้อผิดพลาดในการพิมพ์หรือคำสั่งที่เข้าใจผิดใดๆ สิ่งนี้อาจส่งผลให้ข้อมูลสูญหายทั้งหมด ระบบไม่เสถียร หรือเกิดช่องโหว่ด้านความปลอดภัยที่ทำให้เครื่องของคุณเสี่ยงต่อการถูกโจมตี
หนึ่งในอันตรายที่ชัดเจนที่สุดคือ การลบหรือแก้ไขไฟล์ระบบโดยไม่ได้ตั้งใจในฐานะผู้ใช้ root จะไม่มีตัวเลือก "คุณแน่ใจหรือไม่?" หรือถังรีไซเคิล คำสั่งที่ใช้จะเป็นดังนี้:
sudo rm -rf /
หรือรูปแบบที่สะกดผิด (เช่น มีเส้นทางที่ไม่ถูกต้อง มีช่องว่างเกิน หรือใช้สัญลักษณ์ตัวแทนผิดที่…) อาจ ลบข้อมูลครึ่งหนึ่งของระบบไฟล์โดยไม่ขอการยืนยันและการฟื้นตัว หากเป็นไปได้ ก็มักจะซับซ้อนและไม่สมบูรณ์นัก
นอกจากนี้ยังมีประเด็นเรื่องการดำเนินการด้วย สคริปต์ที่ดาวน์โหลดจากอินเทอร์เน็ตด้วยสิทธิ์ระดับรูทหากสคริปต์นั้นมีเจตนาร้ายหรือเขียนโปรแกรมไม่ดี มันอาจลบไฟล์สำคัญ เปลี่ยนการตั้งค่าที่สำคัญ ติดตั้งมัลแวร์ ปิดใช้งานระบบป้องกัน หรือเพิ่มช่องโหว่โดยที่คุณไม่รู้ตัว และหากคุณเรียกใช้มันด้วย sudoคุณได้มอบสิทธิ์แบบไม่จำกัดให้แก่เขาแล้ว
ในสภาพแวดล้อมที่มีเซิร์ฟเวอร์หลายเครื่อง (สำหรับใช้งานจริง ทดสอบ และพัฒนา) การทำงานในฐานะผู้ใช้ root บนเทอร์มินัลหลายเครื่องพร้อมกันจะเพิ่มความเสี่ยงต่อ... เรียกใช้คำสั่งบนเครื่องที่ไม่ถูกต้องการรีสตาร์ทหรือการลบข้อมูลโดยไม่ได้ตั้งใจในระหว่างการใช้งานจริง อาจทำให้บริการหยุดทำงานและก่อให้เกิดปัญหาใหญ่ได้
ที่แย่ไปกว่านั้น เมื่อคุณเคยชินกับการทำงานในฐานะผู้ใช้ root อยู่เสมอ ก็เป็นเรื่องง่ายที่จะประมาทและ ไม่ต้องตรวจสอบซ้ำในสิ่งที่คุณเขียนการลดเวลาที่คุณใช้สิทธิ์ระดับสูง และการตรวจสอบคำสั่งอย่างละเอียดก่อนกด Enter เป็นสิ่งสำคัญอย่างยิ่งเพื่อหลีกเลี่ยงความผิดพลาด
การเข้าถึงระดับรากและความปลอดภัย: การโจมตี บันทึก และการตรวจสอบ
จากมุมมองด้านความปลอดภัย สิทธิ์ root คือ จุดล้มเหลวจุดเดียวหากผู้โจมตีได้รับสิทธิ์ระดับรูท (ไม่ว่าจะโดยการขโมยข้อมูลประจำตัว การใช้ช่องโหว่ หรือหลอกให้คุณเรียกใช้โปรแกรมที่เป็นอันตราย) พวกเขาก็จะสามารถควบคุมเครื่องได้อย่างสมบูรณ์
บนเซิร์ฟเวอร์ที่เปิดให้เข้าถึงจากอินเทอร์เน็ต การเปิดใช้งานการเข้าถึงระดับรูทโดยตรงผ่าน SSH โดยใช้เพียงรหัสผ่านนั้นเป็นการเปิดช่องโหว่ให้เกิดการโจมตีได้ การโจมตีแบบบรูทฟอร์ซอย่างต่อเนื่องบอทอัตโนมัติพยายามล็อกอินเข้าสู่ระบบในฐานะ... root ตรวจสอบรหัสผ่านอย่างสม่ำเสมอ หากรหัสผ่านอ่อนแอหรือเคยใช้กับบริการอื่นมาก่อน คุณก็จบเห่แล้ว
นอกจากนี้ หากคุณทำงานในฐานะผู้ใช้ root ตลอดเวลา แอปพลิเคชันที่มีช่องโหว่ใดๆ ที่ทำงานภายใต้สิทธิ์ root นั้น (เช่น เบราว์เซอร์ เว็บเซิร์ฟเวอร์ที่ตั้งค่าไม่ถูกต้อง ฯลฯ) สามารถใช้เป็นจุดเริ่มต้นในการโจมตีได้ ทันทีที่แอปพลิเคชันนั้นถูกบุกรุก ผู้โจมตีก็จะได้รับสิทธิ์ทั้งหมดไปโดยอัตโนมัติ
ปัญหาที่สำคัญอีกประการหนึ่งก็คือ การขาดการตรวจสอบย้อนกลับเมื่อใช้คำสั่ง sudo การกระทำของผู้ดูแลระบบจะถูกบันทึกไว้ /var/log/auth.log หรือในวารสาร (journalctl): ผู้ใช้รายใดเรียกใช้คำสั่งใดและเมื่อใด ในทางกลับกัน หากทุกคนล็อกอินโดยตรงในฐานะ root บันทึกจะระบุเพียงว่า "root ทำเช่นนี้" โดยไม่สามารถระบุได้ว่าใครอยู่เบื้องหลังการกระทำนั้นจริง ๆ
ในสภาพแวดล้อมที่กำหนดให้ต้องมีมาตรฐานความปลอดภัย (เช่น ISO 27001, PCI DSS และมาตรฐานที่คล้ายคลึงกัน) การตรวจสอบย้อนกลับและความรับผิดชอบของแต่ละบุคคลนั้นเป็นสิ่งสำคัญ การทำงานในฐานะผู้ใช้ root โดยไม่ใช้ sudo เสมอ ทำให้การตรวจสอบทำได้ยากขึ้นสิ่งนี้ทำให้การแก้ปัญหามีความซับซ้อนมากขึ้น และมักขัดกับแนวทางปฏิบัติที่ดีที่สุดที่กำหนดโดยกรอบการปฏิบัติตามกฎระเบียบหลายประการ นอกจากนี้ การใช้ฮาร์ดแวร์ที่ปลอดภัย เช่น dev-tpm0 และ TPM สิ่งนี้สามารถเสริมสร้างความน่าเชื่อถือและความสามารถในการตรวจสอบของระบบได้
วิธีการขอรับสิทธิ์ระดับรูท
ในทางปฏิบัติ ระบบปฏิบัติการ Linux รุ่นใหม่ๆ ส่วนใหญ่ใช้กลไกหลักสามอย่างในการเข้าถึงสิทธิ์ผู้ดูแลระบบ: sudo, su และการเข้าสู่ระบบโดยตรง (ภายในหรือภายนอก) แต่ละวิธีมีบริบทและความเสี่ยงที่แตกต่างกัน
ในการเรียกใช้คำสั่งเดียวด้วยสิทธิ์ระดับรูท วิธีที่นิยมใช้มากที่สุดคือการใช้:
sudo comando argumentos
ตัวอย่างเช่น:
sudo apt update
sudo apt install firefox
sudo systemctl restart apache2
sudo nano /etc/ssh/sshd_config
ด้วยสิ่งนี้, คุณไม่สามารถเปลี่ยนผู้ใช้ได้อย่างถาวรมีเพียงคำสั่งนั้นเท่านั้นที่ทำงานด้วย UID 0 และจะบันทึกว่าใครเป็นผู้เรียกใช้คำสั่งนั้น สำหรับงานบริหารจัดการประจำวันส่วนใหญ่ นี่เป็นตัวเลือกที่ปลอดภัยที่สุด
หากคุณต้องการเซสชัน root ที่คงอยู่นานกว่าปกติ เนื่องจากคุณจะเรียกใช้คำสั่งหลายคำสั่งติดต่อกัน คุณสามารถใช้:
sudo -i
sudo su -
คำสั่งเหล่านี้จะให้สิทธิ์การเข้าถึงระดับรูท (root shell) ซึ่งโดยทั่วไปจะโหลดสภาพแวดล้อมการเข้าสู่ระบบของรูท (ตัวแปร, PATH ฯลฯ) สิ่งนี้สะดวกมากสำหรับงานที่ใช้เวลานานบางอย่าง แต่... ควรออกจากโหมดนั้นทันทีที่ใช้งานเสร็จ กับ exitยิ่งคุณใช้เวลาในฐานะ root น้อยเท่าไหร่ โอกาสที่จะทำผิดพลาดก็จะยิ่งน้อยลงเท่านั้น
เปิดใช้งานและจัดการรหัสผ่าน root
ใน Ubuntu และดิสโทรอื่นๆ แม้ว่าจะไม่แนะนำ แต่คุณก็สามารถทำได้ กำหนดรหัสผ่านให้กับบัญชี root เพื่อให้สามารถใช้งานได้โดยตรง คำสั่งทั่วไปคือ:
sudo passwd root
ระบบจะขอรหัสผ่านผู้ใช้ของคุณก่อน (เพื่อตรวจสอบความถูกต้องของการใช้งาน) sudo) จากนั้นระบบจะขอให้คุณป้อนรหัสผ่านใหม่ที่คุณต้องการกำหนดให้กับ root สองครั้ง นับจากนั้นเป็นต้นไป ผู้ใช้ root จะมีรหัสผ่านที่กำหนดไว้ และหากนโยบายการตรวจสอบสิทธิ์อนุญาต คุณสามารถเข้าสู่ระบบในเครื่องหรือใช้... su โดยการป้อนรหัสนั้น บนอุปกรณ์อย่างเช่น Raspberry Pi แนะนำให้ทำเช่นนั้น เปลี่ยนรหัสผ่านเริ่มต้น.
ถ้าเมื่อใดก็ได้ที่คุณต้องการ บล็อกการเข้าสู่ระบบรูท หากไม่ลบบัญชี คุณสามารถทำสิ่งต่อไปนี้ได้:
sudo passwd -l root
วิธีนี้จะปิดใช้งานรหัสผ่าน (โดยไม่ลบรหัสผ่านออกทั้งหมด) ป้องกันการเข้าถึงโดยตรง หากต้องการยกเลิกการตั้งค่านี้:
sudo passwd -u root
ไม่ว่าในกรณีใด โดยเฉพาะอย่างยิ่งกับ Ubuntu คำแนะนำโดยทั่วไปคือ อย่าใช้สิทธิ์ root ร่วมกับรหัสผ่านสำหรับการใช้งานทั่วไปวิธีที่สมเหตุสมผลกว่าคือการใช้งานบัญชีผู้ใช้ปกติของคุณต่อไป และใช้คำสั่ง sudo เมื่อจำเป็นเท่านั้น
การตั้งค่า SSH เพื่ออนุญาตหรือไม่อนุญาตสิทธิ์ root
ด้วยเหตุผลด้านความปลอดภัย การติดตั้งเซิร์ฟเวอร์จำนวนมากจึงรวมถึงสิ่งต่อไปนี้ด้วย การเข้าสู่ระบบด้วย root ผ่าน SSH ถูกปิดใช้งานหากต้องการเปลี่ยนแปลงพฤติกรรมนี้ (แม้จะไม่ใช่ทางออกที่ดีที่สุด) คุณต้องแก้ไขไฟล์การกำหนดค่า OpenSSH: /etc/ssh/sshd_config.
ขั้นตอนทั่วไปคือ:
- ตรวจสอบให้แน่ใจว่า root มีรหัสผ่าน หากคุณวางแผนที่จะใช้วิธีการตรวจสอบสิทธิ์นั้น:
sudo passwd root. - แก้ไขการตั้งค่า SSH ด้วยสิทธิ์ระดับรูท:
sudo nano /etc/ssh/sshd_config - ค้นหา (หรือเพิ่ม) คำสั่ง
PermitRootLoginและตั้งค่าเป็นyesหากคุณต้องการอนุญาตการเข้าถึงระดับรูทโดยตรงด้วยรหัสผ่าน - รีสตาร์ทบริการ SSH เพื่อใช้การเปลี่ยนแปลง:
sudo systemctl restart ssh(osshd(ขึ้นอยู่กับการกระจายตัว)
ถ้าคุณต้องการความยืดหยุ่นโดยไม่เปิดประตูให้กว้างเกินไป วิธีที่เหมาะสมที่สุดคือการใช้ อนุญาตให้เข้าสู่ระบบด้วย Root ห้ามใช้รหัสผ่าน เพื่อให้เฉพาะผู้ที่ยอมรับเท่านั้น การตรวจสอบความถูกต้องด้วยคีย์ และไม่ใช่โดยใช้รหัสผ่าน ถึงกระนั้น ตัวเลือกที่นิยมโดยทั่วไปคือการเข้าสู่ระบบในฐานะผู้ใช้ปกติแล้วจึงใช้ sudo.
หากคุณต้องการเพิ่มความปลอดภัย ให้ทำตามขั้นตอนเหล่านี้ในทางกลับกัน: ใน sshd_config โพนส์ PermitRootLogin noรีสตาร์ทบริการ และหากต้องการ สามารถล็อกบัญชี root ด้วยคำสั่งต่อไปนี้ sudo passwd -l rootสิ่งนี้บังคับให้พวกเขาต้อง การบริหารจัดการระยะไกลทั้งหมดต้องดำเนินการผ่านผู้ใช้เฉพาะที่มีสิทธิ์ sudo เท่านั้นเพื่อเป็นมาตรการเสริม ควรพิจารณาใช้ dm-verity บน Linux เพื่อปกป้องความสมบูรณ์ของระบบ
แก้ไขไฟล์ sudoers และให้สิทธิ์ root แก่ผู้ใช้รายอื่น
บางครั้งคุณอาจต้องการให้ผู้ใช้ที่สร้างขึ้นใหม่สามารถ... รันคำสั่งในฐานะรูทตัวอย่างเช่น สมมติว่าคุณได้สร้างผู้ใช้ขึ้นมาแล้ว testftp กับ useradd o adduserแต่เมื่อคุณพยายามใช้ sudo คุณจะเห็นข้อความต่อไปนี้: testftp is not in the sudoers file.
วิธีที่ "รวดเร็ว" ในระบบปฏิบัติการ Linux ที่ใช้ Debian/Ubuntu เป็นพื้นฐานหลายๆ ระบบ คือการเพิ่มผู้ใช้เข้าไปในกลุ่ม sudo:
sudo adduser testftp sudo
ในสภาพแวดล้อมอื่นๆ หรือหากคุณต้องการควบคุมอย่างละเอียด คุณสามารถแก้ไขไฟล์ได้ /etc/sudoers (หรือเพิ่มไฟล์เฉพาะใน) /etc/sudoers.d/) ใช้เสมอ:
sudo visudo
ภายใน คุณสามารถเพิ่มบรรทัดที่คัดลอกเทมเพลตหลัก แต่ใช้สำหรับผู้ใช้รายนั้นได้:
testftp ALL=(ALL:ALL) ALL
ด้วยสิ่งนี้, testftp จะสามารถเรียกใช้คำสั่งใดๆ ก็ได้ในฐานะผู้ใช้ root การใช้ sudo ก็เหมือนกับการใช้สิทธิ์ root (แต่สามารถตรวจสอบการทำงานได้) หากต้องการข้อจำกัดที่เข้มงวดมากขึ้น คุณสามารถจำกัดคำสั่งที่อนุญาต กำหนดให้ใช้ TTY บังคับให้ป้อนรหัสผ่าน ฯลฯ ได้
ในเซิร์ฟเวอร์ที่มีความสำคัญสูง เป็นเรื่องปกติที่จะไม่ให้สิทธิ์ "เต็มรูปแบบ" แก่ผู้ใช้ใดๆ ในกลุ่ม sudo แต่จะกำหนดสิทธิ์เหล่านั้นไว้ในกลุ่มแทน sudoers เป๊ะ สิ่งที่ทำได้และทำไม่ได้ตัวอย่างเช่น การอนุญาตให้จัดการเฉพาะบริการที่ระบุหรือสคริปต์การดูแลระบบบางอย่างเท่านั้น
เมื่อแก้ไขและบันทึกเสร็จแล้ว visudoผู้ใช้ที่ได้รับผลกระทบจะไม่พบข้อผิดพลาด "ไม่พบในไฟล์ sudoers" อีกต่อไป และจะสามารถยกระดับสิทธิ์ได้ในลักษณะที่มีการควบคุม
แนวทางปฏิบัติที่ดีที่สุดเมื่อใช้ root และ sudo
การทำงานโดยใช้สิทธิ์ระดับรูทไม่ได้หมายความแค่การรู้ว่าต้องใช้คำสั่งอะไรบ้าง แต่ยังรวมถึง... ปรับใช้พฤติกรรมด้านความปลอดภัยที่เหมาะสมข้อแนะนำพื้นฐานบางประการที่ควรนำไปปรับใช้:
ขั้นแรก ลองทำดู ใช้ sudo เฉพาะกับคำสั่งที่กำหนดเท่านั้น เมื่อใดก็ตามที่เป็นไปได้ ยิ่งคุณใช้เวลาในเชลล์ระดับรูทน้อยเท่าไหร่ โอกาสที่จะเกิดข้อผิดพลาดร้ายแรงก็จะยิ่งน้อยลงเท่านั้น การใช้คำสั่งสั้นๆ ด้วย `sudo` มักจะปลอดภัยกว่าการเปิดเซสชันระดับรูทแล้วลืมล็อกเอาต์
หากคุณจำเป็นต้องใช้ sudo -i o sudo su -ทำเช่นนั้นเมื่อคุณแน่ใจว่าคุณจะต้องดำเนินการกลุ่มงานธุรการต่อเนื่องกัน เมื่อเสร็จแล้ว ให้ออกจากโหมด root กับ exitการปล่อยให้เซสชัน root เปิดค้างอยู่ในพื้นหลัง โดยเฉพาะอย่างยิ่งบนเครื่องที่ใช้งานร่วมกันหรือเดสก์ท็อปที่สามารถเข้าถึงได้ จะเพิ่มความเสี่ยงอย่างมาก
ห้ามเปิดเบราว์เซอร์ โปรแกรมอีเมล หรือเอกสารที่น่าสงสัยจากเซสชันที่มีสิทธิ์ระดับรูทเด็ดขาด ช่องโหว่ใดๆ ที่ส่งผลกระทบต่อแอปพลิเคชันเหล่านี้อาจเป็นอันตรายได้ มันจะได้รับสิทธิ์การเข้าถึงจากบัญชีที่ทำการเรียกใช้คำสั่งนั้นเมื่อใดก็ตามที่คุณใช้งานเนื้อหาที่ไม่น่าเชื่อถือ โปรดใช้งานในฐานะผู้ใช้ทั่วไป
ประเด็นสำคัญอีกประการหนึ่งคือ อย่าเรียกใช้สคริปต์ที่ไม่รู้จักด้วยคำสั่ง sudo โดยไม่ตรวจสอบก่อน หากมีคนบอกให้คุณ "วางคำสั่ง curl | sh นี้โดยใช้ sudo" แล้วคุณทำตามโดยไม่ตรวจสอบ คุณกำลังมอบกุญแจเข้าถึงระบบของคุณให้พวกเขา เปิดสคริปต์ในโปรแกรมแก้ไขข้อความ ตรวจสอบว่ามันทำอะไร มาจากไหน และหากคุณไม่เข้าใจหรือไม่ไว้วางใจ อย่าเรียกใช้มัน
เมื่อใดก็ตามที่เป็นไปได้ ให้ดาวน์โหลดซอฟต์แวร์และสคริปต์จาก แหล่งข้อมูลที่เป็นทางการหรือน่าเชื่อถือสูงตรวจสอบค่า checksum เมื่อมีให้ใช้งาน และหากไม่แน่ใจ ให้ทดสอบก่อนในเครื่องเสมือนหรือคอนเทนเนอร์ที่คุณสามารถทิ้งได้หากเกิดข้อผิดพลาด
สุดท้ายนี้ อย่าลืมใช้ประโยชน์จากคลังข้อมูลด้วย /etc/sudoers เพื่อใช้ หลักการของสิทธิพิเศษน้อยที่สุดระบบจะให้สิทธิ์แก่ผู้ใช้แต่ละคนเฉพาะสิทธิ์ที่จำเป็นเท่านั้น ไม่มากไปกว่านั้น และบันทึกการกระทำทั้งหมดด้วยคำสั่ง sudo เพื่อให้คุณสามารถตรวจสอบสิ่งที่แต่ละคนทำในกรณีที่เกิดปัญหาได้
ทำความเข้าใจว่าผู้ใช้ root คืออะไร สิทธิ์ของผู้ใช้ root แตกต่างจากสิทธิ์ของบัญชี UID 0 อย่างไร และการใช้เครื่องมือต่างๆ เช่น คำสั่ง sudo, su, กลุ่มผู้ดูแลระบบ และการกำหนดค่า SSHเป็นไปได้ที่จะจัดการระบบ Linux ใดๆ ด้วยความปลอดภัยและความอุ่นใจที่มากขึ้น หลีกเลี่ยงความหวาดกลัวที่ไม่จำเป็น และรู้เสมอว่าใครทำอะไรและด้วยสิทธิ์อะไรบ้าง
