Đặt lại mật khẩu root


12

Tuyên bố từ chối trách nhiệm: Câu hỏi này không phải là để giải quyết vấn đề thay đổi mật khẩu root trong khi SELinux đang hoạt động vì đã có rất nhiều hướng dẫn để giải quyết vấn đề đó. Đây là nhiều hơn về cách Selinux làm điều đó trong nội bộ.

Tôi là người dùng gần đây của SELinux nhưng gần đây tôi đã liên lạc nhiều hơn với nó. Có một khoảnh khắc khi ai đó hỏi tôi làm thế nào tôi có thể thiết lập lại mật khẩu root trong trường hợp quên nó.

Vì vậy, tôi đã khởi động CentOS của mình, chỉnh sửa mục nhập grub thành một cái gì đó như

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

Tôi chạy passwdvà sau đó chạy syncvà buộc khởi động lại. Sau khi khởi động lại, đăng nhập bằng mật khẩu mới đã bị từ chối cũng như với khóa cũ.

Khởi động lại một lần nữa và chuyển kernel tham số để vô hiệu hóa SELinux ( selinux=0). Đã thử đăng nhập bằng mật khẩu mới và nó đã hoạt động. Sau đó, tôi đã buộc một nhãn tự động fs (thông qua tệp .autorelabel) và với hoạt động của Selinux, giờ đây bạn có thể đăng nhập.

Câu hỏi của tôi là: tại sao không xảy ra? Tại sao việc dán nhãn lại ảnh hưởng đến đăng nhập khi chỉ có một sự thay đổi mật khẩu và không phải của người dùng hoặc đối tượng?

Cám ơn vì sự quan tâm của bạn.

TL; DR: Đặt lại mật khẩu gốc thông thường không hoạt động trong SELinux. Tại sao?

Chỉnh sửa: Điều này đã được thử nghiệm trên một máy ảo chạy CentOS7 với KVM dưới dạng hypanneror.


1
Bạn có chắc là nó không hoạt động? Thử lại lần nữa. Nó có thể sẽ hoạt động tốt. Tôi nghi ngờ rằng bạn chỉ đơn giản là có bối cảnh tệp sai trên một số tệp, khiến tất cả các lần đăng nhập không thành công. Do đó, nhãn tự động là thứ thực sự khắc phục vấn đề.
Michael Hampton

@MichaelHampton Tôi vừa mới thực hiện lại tất cả các bước của mình để thực hiện lại và không thể đăng nhập lại với hoạt động của Selinux. Sau khi vô hiệu hóa tôi có thể đăng nhập mà không gặp vấn đề gì. Chỉnh sửa cho tôi nếu tôi sai nhưng thay đổi mật khẩu không nên thay đổi bối cảnh tập tin phải không?
Jorge Heleno

1
Không, không nên. Bạn dường như đã phát hiện ra một điều kỳ lạ và bất ngờ.
Michael Hampton

Câu trả lời:


17

Tôi đã có thể sao chép vấn đề này trong hệ thống CentOS 7.5 mới cài đặt.

Đây là điều đang xảy ra:

Khi bạn khởi động với init=/bin/bashcó hai vấn đề bạn có thể gặp phải:

  • Hệ thống tập tin gốc có thể được gắn kết chỉ đọc. Trong trường hợp passwdnày sẽ khiếu nại của một Authentication token manipulation error.

    Điều này khá rõ ràng: Nếu hệ thống tập tin không được gắn đọc-ghi, thì không thể ghi vào nó.

  • Chính sách SELinux có thể không được tải. Trong trường hợp passwdnày sẽ thay đổi mật khẩu thành công, nhưng bạn sẽ gặp vấn đề được mô tả trong câu hỏi ban đầu ở trên: không ai có thể đăng nhập.

    Băm mật khẩu được lưu trữ trong /etc/shadowtập tin. Tập tin này thường có loại SELinux shadow_t. Tuy nhiên, việc thay đổi tệp trong khi không có chính sách SELinux nào được tải sẽ khiến loại SELinux bị xóa khỏi tệp, để lại dưới dạng unlabeled_t. Do đó, các dịch vụ cố đọc tệp để xác thực đăng nhập không còn có thể đọc được.

Để thay đổi mật khẩu root trên RHEL / CentOS 7, do đó bạn cần tuân theo quy trình này:

  1. Thêm init=/bin/bashvào cuối dòng lệnh kernel trong grub, như bạn đã làm trước đây.
  2. Tại dấu nhắc bash, tải chính sách SELinux với /usr/sbin/load_policy -i.
  3. Gắn hệ thống tập tin gốc đọc-ghi với mount -o remount,rw /.
  4. Bây giờ thay đổi mật khẩu, và nó sẽ thành công. passwd root
  5. Kể lại hệ thống tập tin chỉ đọc để cam kết thay đổi và có hệ thống tập tin sạch trong lần khởi động tiếp theo mount -o remount,ro /.
  6. Thoát khỏi vỏ hoặc khởi động lại hệ thống với exec /sbin/init 6.

Bây giờ bạn có thể đăng nhập với mật khẩu root đã thay đổi.

Một lời giải thích dài hơn về thủ tục này có sẵn từ Red Hat (yêu cầu đăng ký).


Vấn đề là về các chính sách không được tải. Tại sao họ không được tải? SELinux nên hoạt động ở cấp kernel nên không yêu cầu hệ thống init.
Jorge Heleno

4
@JorgeHeleno SELinux thực sự bật hoặc tắt theo mặc định khi kernel khởi động, nhưng vùng người dùng có trách nhiệm quyết định chính sách nào được tải. Hạt nhân không thể quyết định điều này, bởi vì một số cài đặt có thể muốn các chính sách khác nhau (ví dụ: nhắm mục tiêu, nghiêm ngặt, ml). Điều này xảy ra sớm trong quá trình khởi động, nhưng bạn bỏ qua điều đó khi bạn chạy init=/bin/bash.
Michael Hampton

1
nếu một chính sách không được tải tại sao passwd"dường như thành công"?
Andrew Savinykh

và nếu nó không thành công, tại sao đăng nhập bằng mật khẩu cũ vẫn thất bại?
Các cuộc đua nhẹ nhàng trong quỹ đạo

2
@Jorge Helen: Giải thích của bạn đã gần hoàn tất. Điểm chính là các tập tin bị thay đổi bởi passwdcụ thể /etc/passwd/etc/shadow. Nếu chạy passwdmà không có chính sách được tải, nó không chạy trong ngữ cảnh selinux thích hợp và các tệp bị thay đổi kết thúc với bối cảnh selinux khác. Khi khởi động với selinux được bật và các chính sách kích hoạt kiểm tra mật khẩu không thành công do bối cảnh tệp không phù hợp và không phải do wrong passwordlỗi. Buộc selinux phải quay lại các filecontexts bằng cách chạm /.autorelabelcũng có thể khắc phục vấn đề đó khi thay đổi mật khẩu mà không tải chính sách.
hargut
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.