سؤال كيفية تعطيل أوامر محطة مخيف؟


كيف يمكنك تعطيل الأوامر الطرفية المرعبة؟

كنت أستخدم SSH للوصول إلى خادم Ubuntu بعيد دون الوصول إلى الخادم الفعلي. ظننت أنني كنت أكتب "shutdown"في خادم NoSQL الذي يعمل على نظام التشغيل Ubuntu ، ولكن في الواقع قلت لخادم أوبونتو للإغلاق. بعد ذلك ، كان علي إخبار مسؤول الخادم بما قمت به حتى يتمكن من بدء تشغيل الخادم الفعلي بالنسبة لي. كان ذلك محرجا!

كيف يمكنني منع هذا من الحدوث مرة أخرى؟


82
2018-06-18 14:52


الأصل


وقد نوقش هذا في أطوال ، وعادة ما تتعلق rm الذي له آثار جانبية أسوأ من shutdown. الخلاصة: لا توجد طريقة لمنع حدوث أشياء سيئة إذا استمر تشغيل الأوامر العشوائية كجذر. - Dmitry Grigoryev
كما لاحظ أشخاص آخرون بخصوص التعرّف ، فإن القيام بذلك يمكن أن يجعل الناس "يتصرفون عادةً في أمر يعمل بطريقة غير قياسية." فهل يبدو سيئًا لأي شخص آخر أن خادم NoSQL سخيف يستخدم هذا الأمر؟ - bmb
خادم NoSQL الذي كنت أستخدمه هو Redis. - MelodiousFires
فقط لا تعمل تحت الجذر الحساب. - alk
أجرؤ على القول أنك تعلمت الدرس لذلك لن تشعر بالحاجة إلى تعطيل أي أمر مرة أخرى. وأود أيضا أن أضيف أنك لا تخدع غنو / لينكس ، فأنت تحصل على أفضل من الأحمق.


الأجوبة:


الإجابة القياسية هي "لا تقم بتسجيل الدخول كجذر". جميع الأوامر التي تعمل كجذر مخيف. إذا لم يكن ذلك خيارًا ، يمكنك وضع بعض أوامر الاسم المستعار في حسابك .bashrc لتعطيل الأوامر التي تجدها مخيفة بشكل خاص. فمثلا:

for scary in shutdown halt  reboot rm
do
    alias $scary="echo If you really want to do that, type: `which $scary`"
done

بعد ذلك ، إذا كتبت إيقاف التشغيل ، فستتلقى الرسالة التالية:

If you really want to do that, type: /sbin/shutdown

(تأكد ك .bashrc حملت أولاً قبل أن تجرب هذا على خادم الإنتاج)

ترك موقعك الحالي ssh جلسة وتسجيل الدخول مرة أخرى ، أو باستخدام . ~/.bashrc يجب تحميل / تشغيل .bashrc. ربما حاول تشغيل rm بدون أي وسيطات للتأكد من عدم تعطيل الخادم تلقائيًا .bashrc على تسجيلات الدخول أو ما شابه ذلك.

لاحظ أنه إذا كنت مهتمًا في المقام الأول بالتوقف وإيقاف التشغيل ، فيمكنك التفكير في التثبيت مولي الحرس، مما سيجعلك اكتب اسم المضيف قبل إيقاف تشغيل الجهاز. يكون ذلك أكثر فائدة إذا قمت بإيقاف تشغيل OS'es بالكامل على سطر الأوامر ، ولكنك ترغب في التأكد من إغلاق نظام التشغيل الصحيح.

يمكنك أيضًا اختبار هذه التجربة باستخدام أمر أقل مخيفًا مثل الخروج أو الخروج.


204
2018-06-18 15:19



لا تسجيل الدخول كجذر: هذا لن يساعد إذا كنت تخلط بين الجهاز الذي قمت بتسجيل الدخول إليه. أنا أقترح تغيير الموجه إلى شيء من شأنه أن يمنحك جديلة بصرية. - isanae
إن تسمية أمر "مخيف" بالاستعانة بسلوك "آمن" هو ، في تجربتي ، فكرة سيئة. ويرجع ذلك إلى أن الناس يميلون إلى الاعتياد على أمر يعمل بطريقة غير قياسية ، الأمر الذي يجعلهم يفعلون بعض الأشياء المؤسفة للغاية عندما يكونون على نظام الفانيلا. الإجابة البسيطة هي أن تدوس بحذر شديد عند تسجيل الدخول كجذر. - TimGJ
isanae كان الاختصار الذي كنت أقوم باستخدامه لفتح محطة طرفية مع ssh إلى خادم الإنتاج يجعل لون خلفية المحطة الطرفية باللون الأحمر. هذا جعلني اهتماما. - Peter A. Schneider
source هو اسم مستعار ل . وغير مدعوم من جميع القذائف. - gronostaj
لاحظ أيضا أنه في حين أن دبيان ، وامتدادا لذلك ، فإن أوبونتو لديها defaullt ~/.bash_profile مصدر .bashrc، هذا ليس السلوك القياسي وعلى معظم الأنظمة ، .bashrc لا تقرأ عند تسجيل الدخول عبر ssh ، لذلك لن يحدث هذا الاختلاف. من الأفضل بكثير إضافة الأسماء المستعارة إلى ~/.profile أو ~/.bash_profile في حين أن. - terdon


sudo موجود لسبب ما - استخدمها. عند الانتهاء من الأمر (في هذه الحالة واجهة تفاعلية (CLI تفاعلية) ، يتم إلحاقك مرة أخرى بقسم المستخدم الخاص بك ، وليس shell shell. هناك عدد قليل جدًا من الأسباب الجديرة بأن تكون في قشرة الجذر. (أنا مندهش من أن هذا ليس جوابًا بالفعل ...)

بعد قولي هذا ، لا تكن دمية تستخدمها sudo إلى عن على كل شىء. فهم ما تفعله ، وفهم لماذا يفعل / لا يتطلب امتيازات الجذر.


بالإضافة إلى ذلك ، يمكنك تمييز المطالبة بأصداف الجذر / المستخدم. هذا أيضًا يجعل الأمر أكثر وضوحًا أنك عدت إلى مطالبة shell وليس "بعض CLI أخرى"المنجم ملون للغاية ، ويحتوي على الكثير من المعلومات المفيدة (مثل اسم المضيف) ، مما يجعله للغاية من السهل معرفة ما سيستضيفه الأمر الذي سيستضيفه ، ويسهل أيضًا استعراض السجل الخاص بك وتحديد موقع المطالبات - يستخدم shell root الدليل الافتراضي.

My PS1

هذا هو أكثر ملاءمة للاستخدام على "ك"حساب ، ولكن إذا كنت تأخذ الأمان / مسؤول النظام على محمل الجد ، فإنك لن تشارك كلمات المرور / الحسابات ، ولن تكون جالسًا في صدع الجذر دون أن تدرك تمامًا.


كما قال الناس مرارا وتكرارا ، ومرة ​​أخرى "أوامر مستعارة لجعل بيئة آمنة هي فكرة سيئة"سوف تشعر بالراحة في بيئتك الآمنة ، وكتابة تلك الأوامر" المخيفة "التي لا يجب عليك القيام بها. ثم في يوم من الأيام ستغير وظائفك ، أو تسجل الدخول إلى جهاز جديد ، ثم تنطلق"لم أكن أقصد ، أنا آسف"...


73
2018-06-19 11:40



sudo حان دورك للحصول على القهوة. - ivan_pozdeev
لن يكون لديه نفس المشكلة مع sudo shutdown؟ إذا نفذها على آلة خاطئة ، فستظل كارثة. - Barmar
Barmar هل NoSQL فهم الأمر sudo؟ - Taemyr
Taemyr sudo هو أمر shell ، ليس له علاقة بقاعدة البيانات. - Barmar
Barmar: في الواقع أعتقد أن البروتوكول الاختياري يقصد كتابته في برنامج cmdline NoSQL ، وليس في bash. لذلك لم يكونوا قد كتبوا sudo shutdown، لأنني أفترض sudo ليس أمر NoSQL. إن عدم التواجد في جذر أساسي كان سيحل المشكلة تمامًا وكان فكرة جيدة جدًا. لذلك سوف تبحث في الموجه بعناية قبل تشغيل الأوامر الهامة. - Peter Cordes


ستقوم الحزمة 'molly-guard' (على الأقل على أنظمة Debian المشتقة) بتثبيت مجمّع حول إيقاف التشغيل وإيقاف التشغيل والتشغيل وإعادة التشغيل. إذا اكتشفت أن الجهاز هو جهاز تحكم عن بعد ، فإنه سيطالب باسم المضيف. إذا لم يتطابق ، فسيتم إلغاء الأمر.


44
2018-06-18 16:18



ماذا عن أشياء أخرى (مثل أكثر مخيفًا) مثل rm -rf /؟ - marcellothearcane
marcellothearcane set -u قد يساعد في ذلك في بعض الحالات ، مثل عند الكتابة rm -rf /$SOME_VARIABLE_WHICH_I_THOUGHT_EXISTS_BUT_DOESNT. - Alex Hall
marcellothearcane على أي شيء يشبه نظام لينكس الحديثة ، التي تحتاج --no-preserve-root التي من غير المحتمل أن تكتبها عن طريق الصدفة. - α CVn
من هو مولي ، أتساءل ... ربما قطة لشخص ما. - the0ther
@ the0ther ، وهو طفل يبلغ من العمر 2 سنة ، الذي تسبب في التبديل SCRAM على آلة الديناصور ، مرتين في نفس اليوم. انهم الناس في الغرفة زورت غطاء على التبديل. catb.org/jargon/html/M/molly-guard.html - CSM


قبلت إجابة أحبها كثيرًا ، ولكن إذا كان أي شخص آخر يقرأ ويريد إجابة أكثر بساطة ، فهذه إجابة لي.

العثور على ملف .bashrc ووضع كخط الأخير:

alias shutdown=notforuse

ثم عند كتابة إيقاف التشغيل تحصل على شيء من هذا القبيل ~bash: notforuse is not a command

قد يكون هذا سخيفًا ولكنه بسيط ويعمل. أنا أقدر الإجابات مع طرق أفضل للقيام بذلك ولكن!


4
2018-06-18 15:29



جلالة الملك ، اعتدت على القيام بذلك مع rm القزم الناس - alias rm='echo "You can't use rm!" #' - MD XF
أعتقد أن هذه فكرة سيئة ، لثلاثة أسباب. أولاً ، إنه أمر مربك لأي شخص آخر لديه حق الوصول إلى الجهاز. ثانيًا ، إنه يدربك أنه من الأفضل كتابة "إيقاف التشغيل" والضغط على Enter ، مما يعني أنك من المحتمل أن ترتكب الخطأ نفسه في النظام التالي الذي لديك حق وصول أساسي إليه. ثالثًا ، سيصبح هذا مربكًا للغاية إذا كان هناك أمرًا صالحًا يدعى notforuse على الطريق. - David Richerby
أنا معDavidRicherby على هذا واحد. ليست فكرة جيدة. - Tico
إذا كنت تريد حقًا استخدام الأسماء المستعارة ، فيمكنك وضع كل هذه الأسماء على الأقل الأمر بالخوف الأسماء المستعارة في ملف ، دعونا نقول ~/.SaveMyReputation وأضف السطر الأخير من الخاص بك .bashrc خط [ -f ~/.SaveMyReputation ] && source ~/,SaveMyReputation. قد ترغب في النهاية في إضافة خط إضافي echo "#Scaring command protected shell, comment the last line of .bashrc and log again to have a full working shell" داخل هذا الملف. على الأقل قد تجلب لك هذا الاسم المستعار على جهاز آخر (يجب أن يكون .bash_aliasesولكن في هذا "إهمال" الحالة أفضل لاستخدام اسم آخر). - Hastur
إذا كنت ستفعل ذلك ، فجعله أقل إرباكًا باستخدام اسم مثل alias shutdown=shutdown-disabled-by-an-alias. (هذا يعالج فقط المشكلة الثالثة والأكثر طفيفة التي أشار إليهاDavidRicherby.) على الرغم من أنه سيستمر على الأرجح فقط 2 ثانية للشخص القادم من رؤية notforuse is not a command لتشغيل type -a shutdown والعثور على الاسم المستعار ، ثم الكتابة sudo \shutdown لتعطيل توسيع الاسم المستعار. (بافتراض أن لديهم sudo مستعار ل sudo='sudo ' لذلك يوسع الأسماء المستعارة في الارجاع الأول لها). - Peter Cordes


ربما سقطت ضحية لبعض غباء أوبونتو الجديد.

كان Ubuntu يستخدم العادي والكلاسيكي shutdown الأمر الذي يأخذ حجة وقت إلزامي.

إليك ما يحدث في Ubuntu 12 إذا كتبت shutdown، حتى كمستخدم عادي:

$ shutdown
shutdown: time expected
Try `shutdown --help' for more information.

ثم

$ shutdown +100
shutdown: need to be root.

الآن ، هنا هو أوبونتو 16.10. أنا لست الجذر:

$ date ; /sbin/shutdown
Fri Jun 23 16:00:16 PDT 2017
Shutdown scheduled for Fri 2017-06-23 16:01:16 PDT, use 'shutdown -c' to   cancel.

بدون أي وسيطات ، فإنه يقوم بجدولة إيقاف التشغيل لمدة 60 ثانية في وقت لاحق ، وحتى إذا لم تكن جذرًا — فقط حساب تم إنشاؤه باستخدام امتيازات المسؤول.

اللوم الكنسي.


2
2018-06-23 22:54



/sbin/shutdown  يتم توفيرها من قبل systemd-sysv صفقة افتراضيا ، لذلك ليس غباء أوبونتو ، هو systemd الغباء ، ولا يأتي من أوبونتو ، ولكن من دبيان على الأقل ، والذي بدوره ، يبدو أنه يأخذ الكل systemd حركة من ريد هات. عند إلقاء اللوم ، ألوم الكيان الصحيح - وليس فقط الكيان الذي لا يعجبك. - Ruslan
@ رسلان لا أحد يعبئ هذه الحماقة في توزيعاتها يهرب من اللوم. - Kaz


إلى عن على shutdown (reboot، halt وما يرتبط بهما): لدي نسخة تسألني إذا كنت متأكدًا بالفعل (ولا تفعل شيئًا على أي حال). أنا تخزين مثل هذه البرامج النصية في /usr/local/sbin. على دبيان هذا له أولوية أخرى /sbin (هذا هو الدليل الأول من PATH).

مخطوطات النظام تستخدم المسار الكامل ، لذلك من هذا القبيل الإختراق منعني من إيقاف خادم بعيد بدلا من الجهاز المحلي (سلوك سيء من رائع WM) ، ولكن ليس له تأثير آخر غير مباشر ، ولا يزال بإمكاني استخدامهم / sbin / shutdown عند الحاجة بالفعل.


1
2018-06-19 15:39



لا يعمل مثل هذا الاختراق إلا إذا قمت بتطبيقه على كل جهاز كمبيوتر تقوم بتسجيل الدخول إليه ... وهو أمر غير عملي إلى حد كبير ، ولن تجده إلا بعد فوات الأوان: بكتابة shutdown على نظام حرج يفعل ليس لديك الاختراق الخاص بك. - jpaugh
jpaugh: نعم ، إنه اختراق ، وأنا استخدمه فقط لخوادمي الشخصية ، حيث غالبًا ما أسجل الدخول ، وأبقى المحطات مفتوحة لوقت كثير جدًا. [ملاحظة: أستخدم أيضًا مطالبات مختلفة للألوان لأجهزةي الشخصية: جذر بعيد ، مستخدم عن بعد ، جذر محلي ، مستخدم محلي]. بالنسبة للخوادم الحقيقية والماكينة البعيدة ، أتجنب الجذر وأصل الجذر أقل قدر ممكن ، وبالتأكيد ، دون أن ننسى الخروج منها. فقط أنا أستخدم أجهزة التحكم عن بعد الخاصة بي "سحابة" (قبل الضجيج السحابية ، بحيث يتم التعامل معها بالطريقة القديمة). - Giacomo Catenazzi


يتيح ملف Sudoers مستوى أدق من الدقة عن "* مسموح باستخدام sudo" * ، على وجه الخصوص يمكنك استخدام أسماء مستعارة للأوامر لإنشاء قوائم بيضاء لمجموعات الأوامر التي يقتصر عليها مستخدم معين أو مجموعة معينة. لقد عملت مع الخوادم البعيدة التي كانت مقتصرة على الوصول إلى ssh وسمح sudo بكلمة مرور أقل (طلبنا مفاتيح ssh محمية بكلمة مرور). هناك بعض الأسباب الوجيهة للقيام بذلك ، ولكن لديه مخاطر ، لذلك استخدمنا الأسماء المستعارة للأوامر للسماح بالوصول غير المقيد إلى الأشياء التي يحتاجون إليها (إعادة تشغيل الخوادم إلخ) دون منحهم امتيازات لأشياء لم يفعلوها.

هناك أيضا بناء الجملة ليقول "لا يمكن تشغيل هذا الأمر". يمكن التعامل معه ، لذا لا ينبغي استخدامه كتدبير أمني حقيقي ولكنه سينجح في السيناريو الذي وصفته.

رجل sudoers لديه بعض الأمثلة الجيدة حول كيفية تعيين هذا كله.

بالطبع يتطلب ذلك استخدام sudo ، لكن هذا يجب أن يكون بدون قول.


1
2018-06-23 16:08





للاغلاق هناك مولي الحرس. تحتاج فقط إلى تثبيته وعند محاولة إيقاف التشغيل عبر ssh ، يطلب منك كتابة اسم المضيف.

لحذف الملفات هناك حلول مثل libtrash ، والتي تحاكي سلة المهملات عن طريق LD_PRELOAD مكتبة.

ويمكنك اختبار ما الملفات التي تقوم بتغيير / حذف / ... مع يمكن برنامج. هذا رائع عند اختبار شيء ما.


0
2018-06-23 19:18



هذه maybe يبدو أن شيء ما قد تم كسره بالتصميم: إن استبعاد بعض الحركات الطائشة مع عدم التشغيل سينتج عن أي برنامج غير تافه يعتمد على هذه الحلقات الناجحة. - Dmitry Grigoryev