Cách tốt nhất để loại bỏ lệnh tắt máy, nhưng tiếp tục khởi động lại


27

Tôi có một thiết bị loại raspi trong một trung tâm dữ liệu, và gần đây vô tình béo ngón tay và dán lệnh tắt vào thiết bị đầu cuối sai trên màn hình của tôi. Có cách nào để giữ shutdown -rnhưng loại bỏ #poweroff #shutdown -P -Hcác tùy chọn?

Tôi muốn giữ shutdown -r lệnh. Tôi muốn đặt một bộ đếm thời gian trên nó nếu tôi quản lý để đóng băng hệ thống, hoặc tự khóa với các quy tắc bảng ip. thí dụshutdown -r +10

Câu trả lời:


39

Bạn nên sử dụng bản phân phối Linux dựa trên hệ thống. Trong trường hợp này, bạn phải có khả năng che dấu mục tiêu tắt nguồn, do đó systemd sẽ từ chối thực hiện nó (và tắt nguồn). ví dụ:

systemctl mask poweroff.target

Điều này làm cho nó hoàn toàn không thể tắt hệ thống, ngoài việc khởi động lại. Xem rằng không có gì xảy ra:

Bản demo hoạt hình Debian9

Trong trường hợp này, công tắc nguồn ảo của VM này thậm chí không hoạt động để tắt hệ thống nữa. Nhưng nó vẫn khởi động lại hoàn toàn tốt.

Để hoàn tác thay đổi, tất nhiên, chỉ cần vạch mặt mục tiêu. Sau đó, bạn có thể tắt hệ thống.

systemctl unmask poweroff.target

2
Có lệnh systemd liệt kê tất cả các dịch vụ / mục tiêu / thiết bị với mô tả của chúng (nếu có) không? Gần đây tôi đã bắt đầu đọc về điều này và rất thích khám phá các khả năng.
hjpotter92

1
@ hjpotter92 Chạy systemctlkhông có đối số. Nó sẽ liệt kê tất cả các đơn vị hoạt động, trạng thái và mô tả của họ. Thêm --allvà nó cũng sẽ liệt kê các đơn vị không hoạt động.
Michael Hampton

2
@ hjpotter92 Hãy xem man systemd.special.
TooTea

16

Có một vài cách để đạt được điều này. Một người sẽ làm việc với một tài khoản không có đặc quyền thông thường sẽ yêu cầu chạy lệnh với sudo và nhập mật khẩu. Sau đó, bạn có thể nối thêm follwing vào / etc / sudoers (bằng cách chạy visudo):

## user is allowed to execute reboot -r only
jdoe ALL=NOPASSWD: /sbin/shutdown -r *

Ngoài ra, để tắt bộ đệm thông tin xác thực sudo, hãy thêm vào như sau:

Defaults timestamp_timeout=0

Điều này sẽ ngăn thông tin lưu trữ thông tin trong trường hợp bạn đã gọi một lệnh với sudo trước đó.

Thí dụ:

[root@ops ~]# su - jdoe
[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:
[jdoe@ops ~]$ sudo shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 18:51:13 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ sudo shutdown -H
[sudo] password for jdoe:
^[[A[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:

Lưu ý rằng trong ví dụ trên tôi không bắt buộc phải nhập mật khẩu khi chạy sudo shutdown -r +10, nhưng đối với phần còn lại tôi là. Nếu bạn muốn loại bỏ sự cần thiết phải gõ sudo trước lệnh ( sudo shutdown -r +10), hãy thêm phần sau vào .bash_profile hoặc .bashrc:

alias shutdown="sudo shutdown"

Thí dụ:

[jdoe@ops ~]$ source ~/.bash_profile
[jdoe@ops ~]$ shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 19:03:14 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ shutdown -c
[sudo] password for jdoe:

Lưu ý rằng cách tốt nhất để làm việc với tài khoản không có đặc quyền và leo thang với sudo khi được yêu cầu.


1
Điều này thật tuyệt, ngoại trừ sudocấu hình mặc định sẽ có thông tin xác thực bộ đệm trong một thời gian sau lần gọi đầu tiên. Điều này có thể thuận tiện khi thực hiện lặp lại các lệnh theo rootyêu cầu trong phiên người dùng. Trong một phiên như vậy, (hoặc thực sự, nếu một rootshell đang chạy), hoàn toàn có thể giao dịch lệnh shutdownvà bỏ qua các kiểm tra.
Vũ trụ Ossifrage

Cảm ơn các đầu vào. Tuy nhiên, trong trường hợp này, chúng tôi đang định cấu hình shutdown -rđể không nhắc mật khẩu khi chạy bằng sudo, do đó, nếu anh ta chạy sudo shutdown -r ...thông tin đăng nhập sẽ không được lưu trong bộ nhớ cache vì chúng sẽ không được nhập. Nhìn vào ví dụ tôi đã đưa ra ở trên, Bạn có thể thấy tôi đã chạy nó theo sau sudo shutdown -Hvà tôi đã được nhắc nhập mật khẩu.
John Doe

3
Thật vậy, điều đó đã được hiểu. Nhưng, hãy xem xét kịch bản trong đó lệnh cuối cùng có tiền tố sudovà không phải là một NOPASSWDhoạt động; ví dụ như một cuộc gọi để chỉnh sửa tập tin cấu hình như root. Trong trường hợp này, mật khẩu sẽ được lưu trữ và một cuộc gọi tiếp theo sudo shutdown -Hsẽ được thực hiện. sudoBộ nhớ đệm mật khẩu sẽ cần phải được tắt để tránh điều này.
Vũ trụ Ossifrage

2
Trong trường hợp này, bạn đã đúng, +1 để tắt bộ đệm ẩn mật khẩu. Chỉnh sửa bình luận của tôi với đề nghị. Cảm ơn!
John Doe

2
Tôi thực sự không thích điều này chút nào, chính xác bởi vì nó phụ thuộc vào sự hiện diện của dấu nhắc mật khẩu sudo để nhắc nhở người dùng không làm bất cứ điều gì mà họ không nên làm. Nhưng lời nhắc mật khẩu thực sự không phục vụ mục đích này. Nó thường được yêu cầu bởi sudochúng tôi chỉ cần nhập mật khẩu và tiếp tục. Xem ở đây để có một cách tiếp cận thay thế bằng sudo (có lẽ tốt hơn rất nhiều mặc dù không được tốt lắm).
Michael Hampton

10

Có một công cụ gọi là molly-Guard yêu cầu bạn nêu tên máy chủ của máy bạn muốn tắt hoặc khởi động lại.

Trong trường hợp bạn không sử dụng Debian, việc biên dịch phần này từ nguồn là điều không quan trọng, với điều kiện là chương trình này khá nguyên thủy.


9

Để ngăn chặn rủi ro RHEL dựa phân phối đã thiết lập bí danh cho rm, cpmvđó có thể hơi tiêu cực hơn khi được thực hiện bởi người dùng root.

Bạn có thể thêm ví dụ của riêng bạn:

#/root/.bashrc
alias poweroff='echo  "poweroff: Command disabled - THINK before you type.
  Use /usr/sbin/poweroff if you really want to drive to the DC to restore power."'

2
Làm thế nào để giữ shutdown -rtrong khi vô hiệu hóa shutdown -P -H?
MSalters

3

Đổi tên tắt máy thực thi thành một cái gì đó không thể vô tình gọi.

Sau đó, bí danh shutdown(whatever) -r


1
Bạn có thể vui lòng giải thích làm thế nào để đổi tên thực thi? Nó có thể phá vỡ các gói nâng cấp trong tương lai?
AL

2
@AL Nó có thể phá vỡ các gói nâng cấp trong tương lai? Vâng, nó có thể. Nó cũng có thể phá vỡ những thứ đã được cài đặt. Nói chung, lộn xộn với các phần của cài đặt hệ điều hành là một ý tưởng rất tồi.
Andrew Henle

1
Đồng ý. Đó là đủ để bí danh shutdownđể /sbin/shutdown -r. Đổi tên là không cần thiết; vì việc mở rộng bí danh đề cập đến một đường dẫn tuyệt đối, nó không chịu sự mở rộng bí danh đệ quy.
MSalters

Một cảnh báo - tôi sẽ nghĩ rằng "không có gì là không thể" - chỉ là không thể
JosephDoggie
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.