Утилита Linux для отслеживания глупых /, вероятно, опрометчивых команд

sudoИнг добавляет немного препятствий на пути к потенциально глупым и опасным вещам в оболочке Linux, но это слабый сдерживающий фактор для новых пользователей Linux. Тем не менее, многие пользователи входят как root или стали нечувствительными к sudoи может иногда делать плохие вещи, такие как:

  • chmod 777 /
  • rm -rf /
  • doh_oops > /dev/sda

Кажется, что есть несколько случаев, когда пользователь действительно хотел бы сделать это - его использование, вероятно, составляет около 1% преднамеренного и 99% случайного. Конечно, было бы лучше сделать резервную копию ваших систем и не делать такие опасные вещи - но новички делают ошибки, и Linux не прощает.

Я не спрашиваю UAC, но есть ли какая-то утилита, которая может отслеживать консольные /SSH/ другие интерактивные сеансы для ввода команд и запускать их через какой-то валидатор перед выполнением? Несколько правил регулярных выражений могут предотвратить большую боль, особенно для новых администраторов Linux, и, поскольку большую часть времени вы не выполняете большое количество команд из интерактивного сеанса, это не будет слишком большим препятствием. В идеале утилита должна генерировать дополнительное подтверждающее сообщение - "ВЫ УВЕРЕНЫ, что хотите пройти через это, потому что это выглядит действительно глупо" - и требовать от администратора ввода чего-то, признающего опасность, выходящую за рамки стандартного "да", чтобы он вынужден это прочитать.

Существует ли этот тип утилиты? Если так, я хотел бы знать, где это взять.

Если это не так, и это плохая идея, пожалуйста, объясните, почему.

4 ответа

Хотя я понимаю, чего вы пытаетесь избежать и почему вам может понадобиться такая утилита, подумайте о следующем: что вы делаете с ожидаемыми диалоговыми подсказками? Вы быстро закрываете / подтверждаете их без дополнительного рассмотрения. Добавление ожидаемого "нажмите Y, чтобы серьезно выполнить эту команду" будет просто еще одним "да, я уверен, отклонить".

К сожалению, отлов потенциально опасных или уничтожающих данные команд не так прост, как "несколько правил регулярных выражений". Чтобы сделать это, вам нужно перечислить довольно полный список команд и комбинаций для защиты от "упадков" (учитывая, что каждый канал, перенаправление, копирование файла, средство связывания имеет значение для потери данных / безопасности).

Таким образом, я не знаю существующего инструмента, который бы достиг этого. Тем не менее, может быть, это отличная идея, в которой люди найдут большую пользу. Если вы действительно хотите поэкспериментировать со своей идеей, вы можете начать с псевдонимов некоторых "опасных" команд, которые должны запускаться после "подтверждения оболочки".

Чтобы начать работу со сценариями, воспользуйтесь этой простой функцией, которую я взломал для автоматического установщика: https://github.com/tristanfisher/culinary/blob/master/culinary.bash#L42-52

редактировать: я на самом деле думаю, что это довольно крутая идея, особенно если она была доступна в виде пакета, который можно легко установить. У вас есть новый пользователь Linux CLI? apt-get install cli-seatbelt и добавьте строку в его / ее $SHELLrc. Я бы не стал доверять этому, чтобы предотвратить случайное увольнение моей мамой с МБР через BASH, но ввод случайного двузначного числа может действовать как "могут быть драконы с этой командой".

Я не думаю, что такая утилита существует. Я бы не сказал, что это плохая идея, но установка подобного костыля привела бы к неаккуратным / дурным советам, которые "система поймает для меня".

Отсутствие корневого доступа, правильное использование sudo (не вслепую предоставляя всем все: все) и т. Д. Будет иметь большое значение для защиты вас, но на самом деле ничто не заменит компетентности, когда вы являетесь системным администратором.

  • Довольно сложно составить полный список "плохих вещей".
  • Та же проблема, что и в случае с UAC: люди "учат" себя говорить да, не читая и не думая
  • Это не поможет вам, если вы собираетесь делать "плохую" вещь, и в результате вы получите неправильный эффект

Сказав это, я думаю, что есть некоторые вещи, которые можно сделать, чтобы сделать его лучше. Давным-давно у меня был патч для ядра, который принудительно убивал любую программу, которая пыталась удалить файл с именем "UNDELETABLE", и разбрасывал файлы с этим именем в ключевые каталоги.

Существует также система возможностей SElinux. Использовать его нелегко, но я бы подумал, что можно сделать так, чтобы ему потребовались особые дополнительные возможности для изменения определенных файлов или каталогов. Тогда "root" не будет полностью привилегированным пользователем, если вы не сделаете что-то, чтобы получить дополнительные возможности.

Редактировать: Linux: Создавать файлы и директории, но не удалять их, говорит, что "chattr +i" сделает файлы неизменяемыми даже пользователем root.

Фильтр Пэм предназначен для этой цели. На самом деле он не получил большого развития и не может делать то, что вы хотите, без добавления кода для фильтрации, которая ему требуется.

pam_filter

Я должен отметить, что даже с чем-то подобным, не стоит недооценивать силу глупых людей делать глупости.

Другие вопросы по тегам