Menonaktifkan perintah mematikan untuk semua pengguna, bahkan konsekuensi root?

11

Saya ingin menonaktifkan shutdownperintah untuk semua pengguna, bahkan root, pada instalasi Ubuntu Server.

Alasan saya ingin melakukan ini adalah untuk memastikan bahwa saya tidak terbiasa mematikan mesin dengan cara ini, karena saya SSH ke banyak mesin produksi pada saat yang sama seperti ini, dan saya tidak ingin secara tidak sengaja mematikan salah satu mesin lain dengan mengetikkan perintah ke jendela yang salah.

Server yang saya inginkan menonaktifkan penonaktifan hanya berjalan di dalam VirtualBox di desktop Windows saya, dan saya hanya menggunakannya untuk pengujian lokal sehingga tidak masalah jika saya tidak dapat mematikannya dari baris perintah.

Saya sudah sedikit mengurangi masalah dengan memastikan saya memiliki kata sandi yang berbeda pada gambar VirtualBox, tetapi jelas jika saya berada di dalam sudo'jendela' di salah satu mesin produksi, saya masih bisa secara tidak sengaja mematikannya.

Pertanyaan saya adalah:

  1. Bagaimana cara menonaktifkan perintah mematikan?
  2. Jika saya menonaktifkan perintah shutdown, apakah ada konsekuensi yang harus saya ketahui? Paling khusus, apakah itu akan menonaktifkan dukungan untuk shutdown ACPI yang setara dengan menekan tombol power pada mesin fisik? Bisakah itu mempengaruhi aplikasi generik lainnya?

Sebagai informasi, saya hanya menggunakan gambar VirtualBox ini untuk mencoba skrip shell, menjalankan Tomcat dan Java, dan hal semacam itu.

Kaya
sumber
2
Menurut pendapat saya mengubah perilaku inti sistem untuk mencegah kesalahan manusia adalah ide yang buruk. Kemungkinan akan membawa lebih banyak masalah dalam jangka panjang daripada yang dipecahkannya. Jika Anda menyimpan kata sandi pengguna yang berbeda untuk setiap sistem, Anda meminimalkan risikonya (karena memerlukan sudo). Anda harus mengembangkan kebiasaan baik yang tidak bergantung pada perubahan sistem tertentu, bencana yang jauh lebih serius sering disebabkan oleh rm / cp / chmod yang lebih sering digunakan, dan saya kira Anda tidak akan menonaktifkannya.
João Pinto
Walaupun saya setuju dengan hal itu, dan ini jelas merupakan Cara yang Benar untuk melakukan sesuatu, ini hanya untuk menghindari yang satu itu, situasi kecil dengan gambar Ubuntu tidak resmi yang saya miliki di desktop saya untuk memungkinkan saya untuk mencoba berbagai hal tanpa risiko. dari b0rking mesin majikan saya :)
Rich

Jawaban:

3

Jika Anda biasanya menjalankan perintah sebagai sudo shutdown, alih-alih sudo /sbin/shutdown, maka Anda bisa mensetup global shell alias untuk "shutdown" untuk hanya menggemakan pesan ke terminal saja. Eksekusi nyata masih akan ada untuk semua tujuan lain.

Dave Jennings
sumber
Ini terdengar seperti cara terbaik untuk pergi jika Anda hanya mencoba untuk menghentikan kebiasaan.
ændrük
2
Tetapi perhatikan bahwa cara yang jelas untuk mengatur shell alias ( alias shutdown=sl) tidak akan berpengaruh pada argumen ke sudo. Di zsh Anda dapat mendefinisikan alias yang cocok dengan argumen, tapi saya rasa tidak dalam bash. Anda bisa alias sudoke skrip shell yang menolak untuk melakukan apa pun jika argumen pertama adalah shutdown.
poolie
2
Dengan kata lain, ini tidak akan berhasil.
poolie
14

Sebuah banyak pendekatan yang lebih baik untuk masalah ini adalah dengan menginstal molly-guard Program pada kotak Anda tidak ingin shutdown, daripada mencoba untuk melatih diri untuk tidak pernah menjalankan shutdown.

molly-guard berupaya mencegah Anda mematikan atau mematikan mesin secara tidak sengaja. Ini dilakukan dengan menyuntikkan beberapa pemeriksaan sebelum perintah yang ada: berhenti, reboot, shutdown, dan matikan.

Konfigurasi tipikal adalah ia meminta Anda untuk mengetik nama host mesin untuk mengonfirmasi bahwa Anda benar-benar berada di sebelah kanan.

Dimungkinkan untuk menambahkan skrip baru ke /etc/molly-guard/run.d(seperti yang didokumentasikan pada halaman manual , file skrip harus mengikuti penamaan yang diharapkan oleh run-parts.

Jika Anda benar-benar ingin menonaktifkan shutdown(dan ini adalah ide yang aneh), lakukan saja

chmod 0 /sbin/shutdown

maka jika Anda perlu menggunakannya, chmod kembali ke 0755.

poolie
sumber
Ide yang bagus tetapi sayangnya tidak mungkin karena saya tidak memiliki kontrol yang cukup atas sistem untuk dapat menginstal perangkat lunak saya sendiri. Sayangnya saya memiliki kontrol yang cukup untuk dapat mematikannya!
Rich
4
Apakah kamu serius? Itu sangat aneh. Jika Anda memiliki akses sudo untuk menjalankan shutdown saja, mungkin Anda bisa membujuk orang untuk mengubah sudo agar mengeluarkan prompt besar, atau untuk selalu memerlukan kata sandi. Jika ada risiko Anda tidak sengaja mematikannya, para administrator berhak memasang molly-guard.
poolie
1

Untuk menonaktifkan perintah shutdown, buat saja biner yang tidak dapat dijalankan, mis. sudo chmod a-x /sbin/shutdown Saya juga tidak berpikir bahwa itu akan mempengaruhi metode shutdown lain karena sebagai entri man untuk shutdown mengatakan

shutdown mengirimkan permintaan ke daemon init untuk membawa sistem ke runlevel yang sesuai

jadi perintah / skrip lain dapat melakukan ini bahkan setelah menonaktifkan perintah shutdown misalnya saya masih dapat mematikan sistem saya menggunakan shutdown dari menu GNOME. Anda juga masih dapat me-reboot komputer dari baris perintah menggunakan perintah reboot

binW
sumber
1

The shutdownperintah di /sbin/shutdown. Anda dapat menonaktifkannya dengan melakukan ini:

sudo mv /sbin/shutdown /sbin/really-do-shutdown

Tetapi : Ini berarti bahwa hampir tidak ada metode yang biasa untuk mematikan sistem akan bekerja lebih lama. Mematikan gnome pada mesin uji saya untuk jawaban ini menyebabkannya hanya mengeluarkan Anda dan melemparkan Anda kembali ke GDM.

Jika Anda ingin mematikan sistem Anda setelah itu, Anda harus melakukannya

sudo init 0

Shutdown "Disabling" akan memengaruhi setiap aplikasi yang menggunakan perintah untuk apa pun. Karena init 0bukan cara yang disarankan untuk mematikan sistem, semua program yang harus mematikan penggunaan sistem shutdownuntuk itu, yang tidak akan berfungsi lagi.

  • Aplikasi juga dapat melempar pengecualian karena file yang hilang , atau file yang tidak dapat dieksekusi , berpotensi menyebabkannya crash walaupun shutdown tidak diperlukan. Ini adalah kasus tepi yang dapat Anda atasi dengan memindahkan beberapa file biner, idealnya dapat dieksekusi (bukan skrip shell - yang tidak akan berfungsi) di tempatnya. Sebagai contoh:

    sudo cp /bin/ps /sbin/shutdown
    

    Ini setelah Anda memindahkan yang asli dengan aman.

Sekarang, semua ini cukup berantakan, dan saya sarankan untuk tidak melakukannya , untuk alasan yang diuraikan dalam komentar João Pinto. Tetapi saya tidak akan menghentikan Anda untuk melakukannya. :-)

Jangan hanya membuat cadangan / sbin / shutdown, juga, miliki rencana pemulihan jika itu menyebabkan masalah. Jangan lakukan ini di server yang tidak bisa Anda tuju, misalnya. Dan uji rencana pemulihan Anda sebelumnya, dengan asumsi bahwa sistem tidak bisa boot sama sekali (itu akan boot tentu saja - saya sudah mengujinya - tapi tolong di sisi yang aman).

Stefano Palazzo
sumber
0

Saya pikir itu harus mengambil solusi lain, Server harus memiliki kebijakan ssh untuk menonaktifkan shutdown dan init 0 over ssh, atau harus ada dialog khusus yang ditampilkan pada konsol seperti pada Windows untuk memasukkan "mengapa" dan khusus "kata sandi shutdown" . Untuk ini powerbutton harus dilindungi kata sandi pada penggunaan Server.

Saat ini kami menggunakan "saklar kunci fisik = 4Euros" alih-alih Tombol Tekan.


sumber
0

Saya ingin menonaktifkan shutdownperintah.

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin / shutdown

ini karena jika seseorang mencoba dengan paksa ingin menggunakan perintah ini, maka dia juga tidak bisa

sekarang tidak ada yang bisa menggunakan perintah shutdown.

itu akan menampilkan perintah pesan tidak ditemukan menginstalnya.

vim /etc/bash.bashrc

Tambahkan baris terakhir dari bash.bashrc

alias shutdown = "echo 'Anda tidak diizinkan menggunakan perintah ini'"

jika Anda ingin kembali (diaktifkan). cukup salin kembali

cp / sbin / shutdown-backup / sbin / shutdown

Dishank Jindal
sumber