ฉันต้องยอมรับว่าฉันชอบเซิร์ฟเวอร์ที่ไม่มีรหัสผ่านในบางกรณี เซิร์ฟเวอร์ทั่วไปมีความเสี่ยงต่อทุกคนที่มีสิทธิ์เข้าถึงแบบฟิสิคัล ดังนั้นในบางกรณีก็เป็นจริงเพื่อล็อคร่างกายและตั้งแต่นั้นมาไว้วางใจใด ๆการเข้าถึงทางกายภาพ
แนวคิดพื้นฐาน
ในทางทฤษฎีแล้วเมื่อฉันไปถึงเซิร์ฟเวอร์นั้นฉันควรจะสามารถบริหารงานโดยไม่ต้องใช้รหัสผ่านเพียงแค่พิมพ์root
เป็นชื่อล็อกอินและฉันไม่ควรขอรหัสผ่าน เช่นเดียวกันอาจนำไปใช้กับบัญชีผู้ใช้ แต่ไม่มีใครสามารถเข้าถึงได้จริง ดังนั้นจึงไม่จำเป็นต้องใช้รหัสผ่านระบบสำหรับการเข้าถึงภายใน (เป็นครั้งคราว)
เมื่อเข้าถึงเซิร์ฟเวอร์จากระยะไกลไม่ว่าจะเป็นการบริหารระบบหรือสำหรับบัญชีผู้ใช้ฉันคาดว่าจะใช้คีย์ส่วนตัว SSH มันง่ายมากในการตั้งค่าคีย์ SSH สำหรับบัญชีที่เพิ่งสร้างขึ้นและไม่จำเป็นต้องใช้รหัสผ่านระบบสำหรับการเข้าถึงระยะไกล (ปกติ)
# user=...
#
# useradd -m "$user"
# sudo -i -u "$user"
$ keyurl=...
$
$ mkdir -p .ssh
$ curl -o .ssh/authorized_keys "$keyurl"
บทสรุปคือในทางทฤษฎีเราจะไม่ต้องใช้รหัสผ่านระบบใด ๆสำหรับกรณีการใช้งานเช่นนั้น ดังนั้นคำถามคือเราจะกำหนดค่าระบบและบัญชีผู้ใช้อย่างไรเพื่อให้เกิดขึ้นอย่างสอดคล้องและปลอดภัย
รายละเอียดการเข้าถึงท้องถิ่น
เราจะมั่นใจได้อย่างไรว่าบัญชีรูทสามารถเข้าถึงได้แบบโลคัลโดยไม่มีรหัสผ่าน? ฉันไม่คิดว่าเราสามารถใช้งานได้passwd -d
เพราะจะทำให้การเข้าถึงรูทมากเกินไปและผู้ใช้ที่ไม่มีสิทธิสามารถเปลี่ยนเป็นรูทได้ฟรีซึ่งเป็นสิ่งที่ผิด เราไม่สามารถใช้passwd -l
เนื่องจากป้องกันไม่ให้เราเข้าสู่ระบบ
โปรดทราบว่าการเข้าถึงเฉพาะที่เกี่ยวกับการเข้าถึงโดยใช้คีย์บอร์ดท้องถิ่น ดังนั้นโซลูชันที่ถูกต้องจะต้องไม่อนุญาตให้สลับผู้ใช้ (ไม่ว่าจะใช้su
หรือsudo
)
รายละเอียดการเข้าถึงระยะไกล
จนกระทั่งเมื่อไม่นานมานี้โซลูชันดังกล่าวจะใช้งานได้ แต่ตอนนี้ SSH เริ่มตรวจสอบบัญชีผู้ใช้ที่ถูกล็อค เราอาจไม่สามารถใช้passwd -d
ด้วยเหตุผลเดียวกัน เราไม่สามารถใช้passwd -u
เพราะมันบ่นว่ามันจะนำไปสู่สิ่งที่passwd -d
ทำ
มีวิธีแก้ปัญหาด้วยรหัสผ่านจำลองสำหรับส่วนนี้
user=...
echo -ne "$user:`pwgen 16`\n" | chpasswd
อาจเป็นไปได้ที่จะปิดการตรวจสอบบัญชีที่ถูกล็อคใน SSH โดยสิ้นเชิง แต่มันจะดีกว่าหากยังคงให้การสนับสนุนบัญชีที่ถูกล็อคและสามารถปลดล็อคได้
หมายเหตุสุดท้าย
สิ่งที่ฉันสนใจคือโซลูชันที่จะช่วยให้คุณสามารถลงชื่อเข้าใช้บัญชีรูทในเครื่องและทุกบัญชีรวมถึงรูทจากระยะไกลโดยไม่มีรหัสผ่าน ในทางกลับกันโซลูชันต้องไม่ส่งผลกระทบต่อความปลอดภัยยกเว้นในวิธีที่อธิบายอย่างชัดเจนโดยเฉพาะอย่างยิ่งไม่อนุญาตให้ผู้ใช้ระยะไกลเข้าถึงบัญชีรูทหรือบัญชีผู้ใช้อื่น โซลูชันควรมีความแข็งแกร่งเพียงพอเพื่อไม่ให้เกิดปัญหาด้านความปลอดภัยทางอ้อม
คำตอบที่ได้รับการยอมรับและได้รับรางวัลอาจจะหรืออาจไม่อธิบายการกำหนดค่าโดยละเอียดของเครื่องมือแต่ละอย่าง แต่ต้องมีประเด็นสำคัญเพื่อให้บรรลุเป้าหมายที่ระบุไว้ ทราบว่านี้อาจจะไม่สามารถแก้ไขได้ผ่านการใช้งานทั่วไปของเครื่องมือเช่นpasswd
, ssh
, su
, sudo
และชอบ
แนวคิดเพิ่มเติมหลังจากอ่านคำตอบแรก
เพียงแค่ความคิด - การเข้าถึงรูทบนโลคัลสามารถทำได้โดยเริ่มรูทเชลล์แทนกระบวนการล็อกอิน แต่ยังคงมีความจำเป็นต้องล็อคการตรวจสอบรหัสผ่านเท่านั้นไม่ใช่การตรวจสอบสิทธิ์กุญแจสาธารณะ