Cách vô hiệu hóa vĩnh viễn lời nhắc mật khẩu gốc cho chế độ khôi phục, RHEL7


8

Lưu ý: Tôi đã hỏi một quesiton tương tự liên quan đến phiên bản 6 của các gói này ở đây . Lưu ý rằng 7 sử dụng systemd và có thể có cách triển khai khác

Trong những trường hợp hiếm hoi mà hệ thống RHEL hoặc CentOS 7 bị ngăn không cho khởi động bằng cách (ví dụ) tắt máy không đúng hoặc lỗi kiểm tra fsck bắt buộc khi khởi động, bảng điều khiển sẽ nhắc người dùng nhập mật khẩu gốc.

Làm cách nào để vô hiệu hóa kiểm tra mật khẩu và thả trực tiếp vào thư mục gốc?

Câu trả lời không được chấp nhận :

  • ghi đè initlên dòng lệnh kernel (tức là grub)
  • liên kết / thay thế / sbin / sulogin bằng / sbin / sushell. (Điều này sẽ hoạt động, nhưng nó sẽ giương cờ đỏ với khung bảo mật).
  • khởi động từ một số thiết bị khác

2
Khởi động từ USB cũng không được chấp nhận?
YoMismo

Câu trả lời:


11

Systemd đang làm việc với các dịch vụmục tiêu . Mục tiêu tương đương với runlevels , dịch vụ tương đương với init script . Hầu hết cấu hình systemd được đặt trong /usr/lib/systemdkhi init chuẩn nằm trong /etc/{init.d,rc*.d,inittab}.

Khi một đá vấn đề trong quá trình khởi động (mặc định là getty.target hoặc graphical.target , bạn có thể nhận được chúng với systemctl get-default) systemd được chuyển sang emergency.target .

Mục tiêu "khẩn cấp" này sẽ lần lượt tải tệp emergency.service. Dịch vụ này chứa nhiều dòng và trong số đó:

...
[Service]
Environment=HOME=/root
WorkingDirectory=/root
ExecStartPre=-/bin/plymouth quit
ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again\\nto boot into default mode.'
ExecStart=-/bin/sh -c "/sbin/sulogin; /usr/bin/systemctl --fail --no-block default"
...

Chúng tôi chỉ cần thay thế cuộc gọi đến /sbin/sulogin:

ExecStart=-/bin/sh -c "/sbin/sushell; /usr/bin/systemctl --fail --no-block default"

Và chúng ta sẽ được thả trực tiếp vào một vỏ, thay vì được nhắc nhập mật khẩu qua sulogin. (Chúng tôi có thể sử dụng /bin/sh, nhưng /sbin/sushellphù hợp với câu trả lời cho CentOS6 / RHEL6. Trên thực tế, sushellchỉ cần thực hiện $SUSHELLtheo mặc định /bin/bash.)

Để thực hiện thay đổi này là "vĩnh viễn", tức là miễn nhiễm với các yumbản cập nhật, hãy thay đổi bản sao của tệp này và đặt nó vào /etc/systemd/system/. Ngoài ra, để làm cho "chế độ cứu hộ" hoạt động theo cùng một cách, hãy thay thế cùng một dòng rescue.service. Đây là tập lệnh shell / sed để đơn giản hóa quy trình:

for SERVICE in rescue emergency ; do 
   sed '/^ExecStart=/ s%"/sbin/sulogin;%"/sbin/sushell;%' /usr/lib/systemd/system/$SERVICE.service > /etc/systemd/system/$SERVICE.service
done

Để kiểm tra điều này, hãy đảm bảo hệ thống không được sử dụng và yêu systemdcầu chuyển sang rescuemục tiêu:

systemctl rescue

Điều này sẽ đóng các kết nối mạng và mở một vỏ tại bàn điều khiển. Bạn có thể kiểm tra với emergencymục tiêu, nhưng nó không hoạt động hoàn toàn sạch sẽ (Vì một số lý do) và có thể yêu cầu khởi động lại đầy đủ để ra khỏi.

Bạn cũng có thể kiểm tra những thứ này từ menu boot (grub). Để kiểm tra chế độ khẩn cấp, thật dễ dàng. Khởi động và khi bạn nhận được menu, nhấn "e" để chỉnh sửa và sử dụng D-pad để điều hướng đến dòng bắt đầu bằng linux16và nối thêm (nhấn CTRL-Ađể đến cuối dòng) emergency:

linux16 ... emergency

Để thử nghiệm chế độ cứu hộ, đó là các bước tương tự như trên nhưng bạn phải rõ ràng hơn:

linux16 ... systemd.unit=rescue.target

Bạn nói đúng, có vẻ như machinectl chỉ dành cho VM và Container. Tôi đang kiểm tra chi tiết hơn về các hệ thống hỏi mật khẩu hệ thống với fedora cục bộ của tôi và sẽ chỉnh sửa bài đăng khi cần.
Adrien M.

1
Ok, hãy thử điều này: chỉnh sửa /usr/lib/systemd/emergency.service. Trên đường "ExecStart=-/bin/sh -c "/sbin/sulogin; /usr/bin/systemctl --fail --no-block default", loại bỏ /sbin/sulogin ;một phần. Hãy cho tôi biết nếu nó hoạt động, vì vậy tôi sẽ cập nhật bài viết.
Adrien M.

Rất tiếc, có thể không loại bỏ nó, nhưng thay thế nó bằng /bin/sh, hoặc bất kỳ vỏ nào khác. Và bạn có thể thực hiện thay thế tương tự trong/usr/lib/systemd/rescue.service
Adrien M.

1
"Bạn cần ít nhất 2k danh tiếng để xem xét các chỉnh sửa được đề xuất." Ngay cả trên bài viết của riêng tôi? lol, một số lỗi cho các nhà phát triển :) Cảm ơn bạn đã kiểm tra và chỉnh sửa!
Adrien M.

1
Trong thử nghiệm của tôi, tôi đã thay đổi giá treo / nhà của mình và nó đã rơi xuống để giải cứu. Từ những gì tôi thấy (trong bài đăng này: forum.fedoraforum.org/showthread.php?t=270936 ), "giải cứu" tương đương với Singleuser, "khẩn cấp" tương đương với init = / bin / sh. Tất cả chúng ta đều có rất nhiều mẹo để học với systemd :)
Adrien M.

-3

Phương pháp tôi đã sử dụng để làm theo để bỏ qua mật khẩu gốc và tiếp cận với vỏ gốc là bằng cách chỉnh sửa init trong grub (dòng kernel).

init=/bin/bash

1
Bị từ chối vì tôi đặc biệt đề cập đến ghi đè init không phải là một tùy chọn. Có những lý do kỹ thuật điều này hoạt động kém - chủ yếu là vì "init" thực hiện rất nhiều "hậu trường" để làm cho hệ thống có thể sử dụng được phần nào.
Otheus 21/07/2015

Với init=/bin/bash, bạn sẽ mất kiểm soát công việc cho bảng điều khiển, điều đó có nghĩa là Ctrl-C sẽ không hoạt động. Trong tình huống khẩn cấp, việc không thể dừng lệnh trên bảng điều khiển duy nhất của bạn sẽ nghiêm trọng hơn nhiều so với "nghèo" ...
Laszlo Valko

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.