SELinux รีเซ็ตรหัสผ่านรูท


12

คำเตือน: คำถามนี้ไม่ได้ที่จะแก้ปัญหาของการเปลี่ยนรหัสผ่านรูทในขณะที่ SELinux เปิดใช้งานอยู่เพราะมีคำแนะนำมากมายที่จะแก้ปัญหานี้ นี่เป็นวิธีที่ SELinux ทำภายในองค์กร

ฉันเป็นผู้ใช้ล่าสุดของ SELinux แต่เมื่อเร็ว ๆ นี้ฉันได้ติดต่อกับมันมากขึ้น มีบางครั้งที่มีคนถามฉันว่าฉันสามารถรีเซ็ตรหัสผ่านรูทได้อย่างไรในกรณีที่ลืม

ดังนั้นฉันจึงบูท CentOS ของฉันแก้ไขรายการด้วงให้เป็นเช่นนั้น

linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash

ฉันวิ่งpasswdแล้วก็วิ่งsyncและบังคับให้รีบูต หลังจากรีบูตการเข้าสู่ระบบด้วยรหัสผ่านใหม่ถูกปฏิเสธเช่นเดียวกับของเก่าแน่นอน

รีบูทอีกครั้งและส่งผ่านเคอร์เนลพารามิเตอร์เพื่อปิดการใช้งาน SELinux ( selinux=0) พยายามลงชื่อเข้าใช้ด้วยรหัสผ่านใหม่และใช้งานได้ หลังจากนั้นฉันบังคับ fs auto relabel (ผ่านไฟล์.autorelabel) และด้วย SELinux active ตอนนี้มันเป็นไปได้ที่จะเข้าสู่ระบบ

คำถามของฉันคือ: ทำไมจะเกิดขึ้น? ทำไมการติดฉลากซ้ำจึงมีผลต่อการล็อกอินเมื่อมีการเปลี่ยนรหัสผ่านไม่ใช่ของผู้ใช้หรือวัตถุ?

ขอขอบคุณสำหรับความสนใจของคุณ.

TL; DR: การรีเซ็ตรหัสผ่านรูทปกติไม่สามารถใช้งานได้ใน SELinux ทำไม?

แก้ไข: สิ่งนี้ได้รับการทดสอบบนเครื่องเสมือนที่รัน CentOS7 ด้วย KVM ในฐานะไฮเปอร์ไวเซอร์


1
คุณแน่ใจหรือว่ามันใช้งานไม่ได้? ลองอีกครั้ง. มันอาจจะทำงานได้ดี ฉันสงสัยว่าคุณมีบริบทไฟล์ที่ไม่ถูกต้องในบางไฟล์ทำให้การเข้าสู่ระบบทั้งหมดล้มเหลว ดังนั้น autorelabel จึงแก้ไขปัญหาได้อย่างแท้จริง
Michael Hampton

@MichaelHampton ฉันเพิ่งย้อนขั้นตอนทั้งหมดของฉันอีกครั้งและไม่สามารถลงชื่อเข้าใช้อีกครั้งด้วยการใช้งาน SELinux หลังจากปิดการใช้งานฉันสามารถเข้าสู่ระบบได้โดยไม่มีปัญหา แก้ไขให้ถูกต้องหากฉันทำผิด แต่การเปลี่ยนรหัสผ่านไม่ควรเปลี่ยนบริบทไฟล์ใช่มั้ย
Jorge Heleno

1
ไม่ไม่ควร คุณดูเหมือนจะค้นพบสิ่งที่แปลกและไม่คาดคิด
Michael Hampton

คำตอบ:


17

ฉันสามารถทำซ้ำปัญหานี้ในระบบ CentOS 7.5 ที่ติดตั้งใหม่

นี่คือสิ่งที่เกิดขึ้น:

เมื่อคุณบู๊ตด้วยinit=/bin/bashปัญหาสองประการคุณอาจพบเจอ:

  • ระบบไฟล์รูทอาจถูกเมาท์แบบอ่านอย่างเดียว ในกรณีนี้จะบ่นของpasswdAuthentication token manipulation error

    สิ่งนี้ค่อนข้างชัดเจน: หากระบบไฟล์ไม่ได้เมาท์อ่าน - เขียนเป็นไปไม่ได้ที่จะเขียนลงไป

  • นโยบาย SELinux อาจไม่สามารถโหลดได้ ในกรณีนี้passwdจะเปลี่ยนรหัสผ่านสำเร็จ แต่คุณจะมีปัญหาอธิบายไว้ในคำถามเดิมข้างต้น: ไม่มีใครสามารถเข้าสู่ระบบได้

    แฮชรหัสผ่านจะถูกเก็บไว้ใน/etc/shadowไฟล์ shadow_tไฟล์นี้ปกติมีชนิด SELinux อย่างไรก็ตามการเปลี่ยนไฟล์ในขณะที่นโยบาย SELinux ไม่เป็นสาเหตุโหลดประเภท SELinux unlabeled_tจะถูกลบออกจากไฟล์ออกเป็น ดังนั้นบริการที่พยายามอ่านไฟล์เพื่อตรวจสอบการเข้าสู่ระบบจะไม่สามารถอ่านได้อีกต่อไป

ในการเปลี่ยนรหัสผ่านรูทบน RHEL / CentOS 7 คุณต้องทำตามขั้นตอนนี้:

  1. เพิ่มinit=/bin/bashไปยังจุดสิ้นสุดของบรรทัดคำสั่งเคอร์เนลในด้วงเช่นที่คุณทำก่อนหน้านี้
  2. ที่พรอมต์ทุบตีโหลดนโยบาย SELinux /usr/sbin/load_policy -iด้วย
  3. mount -o remount,rw /ติดระบบแฟ้มรากอ่านเขียนกับ
  4. ตอนนี้เปลี่ยนรหัสผ่านและมันจะประสบความสำเร็จ passwd root
  5. remount mount -o remount,ro /ระบบแฟ้มอ่านได้อย่างเดียวที่จะกระทำการเปลี่ยนแปลงและมีความสะอาดระบบแฟ้มในการบูตต่อไปด้วย
  6. exec /sbin/init 6ออกจากเปลือกหรือรีสตาร์ทระบบด้วย

ตอนนี้คุณสามารถล็อกอินด้วยรหัสผ่านรูทที่เปลี่ยนไป

คำอธิบายอีกต่อไปของขั้นตอนนี้สามารถใช้ได้จาก Red Hat (ต้องสมัครสมาชิก)


ปัญหาเกิดจากนโยบายที่ไม่ได้โหลด ทำไมพวกเขาไม่โหลด? SELinux ควรทำงานที่ระดับเคอร์เนลดังนั้นไม่จำเป็นต้องมีระบบ init
Jorge Heleno

4
@JorgeHeleno SELinux เปิดหรือปิดเป็นค่าเริ่มต้นเมื่อเคอร์เนลเริ่มทำงาน แต่ผู้ใช้มีหน้าที่ตัดสินใจว่าจะโหลดนโยบายใด เคอร์เนลไม่สามารถตัดสินใจสิ่งนี้ได้เนื่องจากการติดตั้งบางอย่างอาจต้องการนโยบายที่แตกต่างกัน (เช่นเป้าหมาย, เข้มงวด, mls) เรื่องนี้เกิดขึ้นในช่วงต้นกระบวนการบูต init=/bin/bashแต่คุณหลีกเลี่ยงการว่าเมื่อคุณเรียกใช้
Michael Hampton

1
หากไม่โหลดนโยบายทำไมpasswd"ปรากฏว่าสำเร็จ"
Andrew Savinykh

และหากไม่สำเร็จทำไมการลงชื่อเข้าใช้ด้วยรหัสผ่านเดิมยังคงล้มเหลว
การแข่งขัน Lightness ใน Orbit

2
@Jorge Helen: คำอธิบายของคุณใกล้จะเสร็จแล้ว ประเด็นก็คือไฟล์ที่เปลี่ยนแปลงโดยpasswdคือและ/etc/passwd /etc/shadowหากทำงานpasswdโดยไม่มีนโยบายโหลดจะไม่ทำงานในบริบท selinux ที่เหมาะสมและไฟล์ที่ถูกเปลี่ยนแปลงจะจบลงด้วยบริบท selinux ที่แตกต่างกัน เมื่อบูตด้วยการเปิดใช้งาน selinux และนโยบายที่ใช้งานอยู่การตรวจสอบรหัสผ่านจะล้มเหลวเนื่องจากบริบทไฟล์ไม่เหมาะสมไม่ใช่เพราะwrong passwordข้อผิดพลาด การบังคับใช้ selinux ไปยัง relable filecontexts โดยการแตะ/.autorelabelยังสามารถแก้ไขปัญหานั้นได้เมื่อเปลี่ยนรหัสผ่านโดยไม่มีนโยบายโหลด
hargut
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.