Как отключить страшные команды терминала?
Я использовал SSH для доступа к удаленному серверу Ubuntu без доступа к физическому серверу. Я думал, что набираю ' shutdown
' на сервере NoSQL, работающем в ОС Ubuntu, но на самом деле я сказал серверу Ubuntu завершить работу. Затем мне пришлось сообщить администратору сервера, что я сделал, чтобы он мог запустить физический сервер для меня. Это было неловко!
Как я могу предотвратить это снова?
rm
которых имеет худшие побочные эффекты, чемshutdown
. Итог: здесь нет способа предотвратить плохие вещи, если вы продолжаете выполнять случайные команды от имени пользователя root.Ответы:
Стандартный ответ: «не входить в систему как root». Все команды, запускаемые с правами root, страшны. Если это не вариант, вы можете добавить некоторые псевдонимы
.bashrc
для отключения команд, которые вы считаете особенно пугающими. Например:Затем, если вы введете shutdown, вы получите следующее сообщение:
( Убедитесь, что ваш
.bashrc
загружен в первую очередь, прежде чем попробовать это на рабочем сервере)Выход из текущего
ssh
сеанса и повторный вход в систему, или использование. ~/.bashrc
должны загрузить / запустить .bashrc. Возможно, попробуйте запуститьrm
без каких-либо аргументов, чтобы убедиться, что ваш сервер не отключил автоматическую загрузку.bashrc
при входе в систему или тому подобное.Обратите внимание, что если вас в первую очередь беспокоит остановка и выключение, вы можете подумать об установке molly-guard , который заставит вас ввести имя хоста перед выключением машины. Это более полезно, если вы регулярно выключаете целые ОС в командной строке, но хотите убедиться, что вы выключаете правильную.
Вы также можете проверить это с помощью менее пугающей команды, такой как выход или выход.
источник
source
является псевдонимом.
и поддерживается не всеми оболочками.~/.bash_profile
источник defaullt.bashrc
, который не является стандартным поведением и на большинстве систем.bashrc
не читается при входе через ssh, так что это не будет иметь значения. Гораздо лучше добавить псевдонимы~/.profile
или~/.bash_profile
вместо них.sudo
существует по причине - используйте это. Когда ваша команда (в данном случае интерактивный CLI) завершена, вы возвращаетесь обратно в оболочку уровня пользователя, а не в корневую оболочку. Есть очень мало достойных причин быть в корневой оболочке. (Я удивлен, что это еще не ответ ...)Сказав это, не будь маппетом, который использует
sudo
для всего . Понять, что вы делаете, и понять, почему это не требует / не требует привилегий root.Кроме того, вы можете различать ваше приглашение для корневых / пользовательских оболочек. Это также делает более очевидным, что вы вернулись к приглашению оболочки, а не к « некоторому другому CLI ». Мой очень красочный, и содержит много полезной информации (например, имя хоста), что позволяет очень просто узнать, на каком хосте будет выполняться команда, а также упростить просмотр истории и поиск приглашений - root оболочка использует приглашение по умолчанию.
Это больше подходит для использования в « вашей » учетной записи, но если вы серьезно относитесь к безопасности / системному администрированию, то вы не будете делиться паролями / учетными записями и не будете сидеть в корневой оболочке, не будучи полностью осведомленными.
Как говорили люди снова и снова и снова, « навязывание команд для создания безопасной среды - плохая идея ». Вы будете чувствовать себя комфортно в своей безопасной среде, печатая эти «страшные» команды там, где этого не следует делать. Затем однажды вы смените работу или войдете в систему на новом компьютере, а затем начнете греметь: « Черт возьми, я не хотел, прости » ...
источник
sudo
твоя очередь достать кофе.sudo shutdown
? Если он выполнит его не на той машине, это все равно будет катастрофой.sudo
- это команда оболочки, она не имеет ничего общего с базой данных.sudo shutdown
, так как я предполагаю, чтоsudo
это не команда NoSQL. Отсутствие в корневой оболочке полностью решило бы эту проблему и было бы очень хорошей идеей. Поэтому внимательно следите за подсказкой перед выполнением важных команд.Пакет 'molly-guard' (по крайней мере в системах, производных от Debian) установит оболочку вокруг shutdown, halt, poweroff и reboot. Если он обнаружит, что терминал является удаленным, он запросит имя хоста. Если он не совпадает, то команда отменяется.
источник
rm -rf /
?set -u
может помочь с этим в некоторых случаях, например, при написанииrm -rf /$SOME_VARIABLE_WHICH_I_THOUGHT_EXISTS_BUT_DOESNT
.--no-preserve-root
который вам нужен, который вы вряд ли наберете случайно.Я принял ответ, который мне очень нравится, однако, если кто-то еще читает и хочет получить более простой ответ, вот мой.
Найдите файл .bashrc и введите в качестве последней строки:
Затем, когда вы печатаете shutdown, вы получаете что-то вроде
~bash: notforuse is not a command
Это может быть глупо, но это просто, и это работает. Я ценю ответы с лучшими способами сделать это как бы то ни было!
источник
rm
чтобы троллить людейalias rm='echo "You can't use rm!" #'
notforuse
.~/.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
, но в этом «устаревшем» случае лучше использовать другое имя).alias shutdown=shutdown-disabled-by-an-alias
. (Это решает только третью и самую незначительную проблему, указанную @DavidRicherby.) Хотя, возможно, потребуется еще 2 секунды, чтобы следующий человек перешел от просмотраnotforuse is not a command
к выполнениюtype -a shutdown
и поиску псевдонима, а затем набрал,sudo \shutdown
чтобы отключить расширение псевдонима. (Предполагая, что они имеютsudo
псевдоним,sudo='sudo '
поэтому он расширяет псевдонимы в своем первом аргументе).Для
shutdown
(reboot
,halt
и связанных с ними ): У меня есть копия с спроси меня , если я действительно уверен (и это не делает ничего , во всяком случае). Я храню такие скрипты в/usr/local/sbin
. На Debian это имеет приоритет other/sbin
(это первый каталог PATH).Системные скрипты используют полный путь, поэтому такой хак не позволяет мне останавливать удаленный сервер вместо локальной машины (плохое поведение от Awesome WM), но не имеет другого косвенного эффекта, и я все еще могу использовать их как / sbin / shutdown, когда это действительно необходимо ,
источник
shutdown
на критической системе , которая никак не иметь свой хак.Файл Sudoers обеспечивает гораздо более высокий уровень детализации, чем просто * 'позволяет использовать sudo' *, в частности, вы можете использовать псевдонимы команд для создания белых списков групп команд, которым ограничен конкретный пользователь или группа. Я работал с удаленными серверами, которые были ограничены доступом по ssh и разрешали sudo без пароля (нам требовались ssh-ключи, защищенные паролем). Для этого есть несколько веских причин, но у этого есть свои опасности, поэтому мы использовали псевдонимы команд, чтобы разрешить неограниченный доступ к тому, что им нужно делать (перезапуск серверов и т. Д.), Не предоставляя им привилегий за то, чего они не делали.
Существует также синтаксис «не могу запустить эту команду» . Его можно обойти, поэтому его не следует использовать в качестве реальной меры безопасности, но он будет работать для описанного вами сценария.
У Man sudoers есть несколько хороших примеров того, как все это настроить.
Конечно, это требует использования sudo, но это само собой разумеется.
источник
Возможно, вы стали жертвой какой-то новой глупости Ubuntu.
В Ubuntu была обычная классическая
shutdown
команда, которая принимает обязательный аргумент времени.Вот что происходит в Ubuntu 12, если я печатаю
shutdown
, даже как обычный пользователь:затем
Теперь, вот Ubuntu 16.10. Я не рут
Без аргументов он планирует отключение на 60 секунд позже, и даже если вы не являетесь пользователем root - просто учетная запись, созданная с правами администратора.
Виноват канонический.
источник
/sbin/shutdown
systemd-sysv
по умолчанию предоставляется package , так что это не глупость Ubuntu, аsystemd
глупость, и она исходит не от Ubuntu, а, по крайней мере, от Debian, который, в свою очередь, похоже, берет всеsystemd
движение от Red Hat. Когда обвиняете, обвиняйте правильную сущность, а не только ту, которая вам не нравится.Для отключения есть Молли-охранник. Вам просто нужно установить его, и когда вы пытаетесь завершить работу через ssh, он просит вас ввести имя хоста.
Для удаления файлов существуют решения, такие как libtrash, который эмулирует мусорное ведро через
LD_PRELOAD
библиотеку.И вы можете проверить, какие файлы вы меняете / удаляете / ... с помощью программы возможно . Это довольно круто, когда что-то тестируешь.
источник
maybe
вещь, кажется, нарушена по замыслу: если заглушить некоторые системные вызовы с помощью no-ops, это приведет к сбою любой нетривиальной программы, которая для успеха использует эти системные вызовы.Попробуйте это: когда вы находитесь на удаленной оболочке, каждый раз, когда вы собираетесь набирать клавишу «return», останавливайтесь на 5 секунд, удерживая палец на клавише «return» и перечитывая команду, которую вы собираетесь отправить. Это нормально? Ты уверен?
Это кажется грубым, но, с другой стороны, мы не должны тратить много времени на удаленные оболочки. Мы должны найти все способы автоматизировать нашу работу по техническому обслуживанию, чтобы нам редко, если вообще когда-либо, приходилось вообще заходить на удаленный сервер.
источник
shutdown
, остановился на 5 секунд, перечитал команду (вслух!) И уверен, что она была правильной. Затем нажмите Enter, и команда только что выполнена. Так что это не отключило страшные команды, я боюсь. Я попробую с этим пальцем, возможно, расстояние было слишком маленьким / большим.