Лучший способ ...
Да, есть лучший способ сделать это. Сделайте так, чтобы выключение не требовало привилегий суперпользователя.
Это требует предварительной настройки. Тогда это сводит к минимуму, кто может выполнить привилегированное действие, и только то, что может быть достигнуто человеком, который использует этот метод. (Другими словами, потенциальное злоупотребление властью ограничено некоторыми другими существующими ограничениями.)
Я предполагаю установку некоторого распространенного программного обеспечения, включая sudo
(кажется безопасным предположением, учитывая вопрос) и OpenSSH (или, вероятно, более вероятно, "OpenSSH Portable").
Создать учетную запись пользователя
Поскольку у вас, похоже, есть доступ к sudo
, я полагаю, что у вас, вероятно, есть возможность создать пользователя.
Вы можете позвонить пользователю _sysstop или _sysoff и т.д. Хотя "shutdown" составляет восемь символов или менее, это также имя команды для запуска, поэтому использование другого имени может быть полезным. Мне также нравится стандарт запуска полностью автоматизированных учетных записей, таких как эта, с подчеркиванием, чтобы визуально эта учетная запись выглядела иначе, чем стандартная учетная запись пользователя.
Позвольте пользователю отключиться без пароля
Измените / etc / sudoers и вставьте это:
_sysstop ALL=(ALL) NOPASSWD:/sbin/shutdown -h*, SETENV: ALL
Естественно, вы можете настроить эту первую часть, которая является именем созданной вами учетной записи.
Похоже, что многие люди выступают против использования NOPASSWD, возможно, потому, что им не нравится идея предоставления полного доступа для выполнения каких-либо действий в системе. Однако это дает довольно ограниченный доступ. Единственное, что этот человек сможет сделать - это запустить команду, начинающуюся с "/sbin/shutdown -h", которая остановит систему. Если неавторизованному человеку удастся воспользоваться этой линией без пароля, он может отключить систему, но это не значит, что такой злоумышленник будет неограниченно способен наносить множество других типов урона (например, настройка дополнительных учетных записей пользователей и т. д.) Таким образом, использование NOPASSWD довольно безопасно, в отличие от того, что большинство людей пытается отговорить.
«/ Sbin / shutdown -h» - это то, что я хотел использовать. В зависимости от вашей операционной системы и того, что вы хотите, вы можете использовать другую команду, такую как "halt" или "reboot", и вам могут потребоваться другие параметры. Поскольку вы уже практикуете отключение системы так, как вам этого хочется, то, вероятно, вы уже знаете, как хотите это делать.
Создать ключ SSH
ssh-keygen -t rsa -vvv -f mykey -N "" -C "mykey" | tee mykey.fng
Некоторым людям не понравится -N ""
. Что ж, это совершенно другое обсуждение, которое я предпочитаю не вдаваться в подробности, помимо остальной части этого утверждения: настраивать в соответствии с любой практикой безопасности, которая сделает вас более комфортной.
В приведенном выше примере могут быть другие изменения, которые некоторые люди порекомендуют. Опять же, это может быть отлично, но это отдельная тема от сути этого ответа. Настройте вышеупомянутое однако соответствующим
Обратите внимание, что "mykey" появляется три раза в приведенном выше примере. Вы можете настроить первый пример, а затем другие вхождения должны соответствовать тому, что говорит первое вхождение.
Вам не нужен файл mykey.fng. Я просто приобрел привычку сохранять его, чтобы иметь возможность записать VisualHostKey (он же «random-art»), прежде чем я узнал, что такие ключи можно увидеть позже, например, «ssh-keygen -lvf /etc /». SSH /ssh_host_ecdsa_key»
Ограничить то, что можно сделать с помощью ключа
Измените файл ~$( echo username-just-created )/.ssh/authorized_keys*
. (например, ~_sysstop/.ssh/authorized_keys
хотя некоторые системы могут использовать ~_sysstop/.ssh/authorized_keys2
, хотя вы, вероятно, хотите использовать authorized_keys )
Реализуйте ключ ssh, вставив в файл строку, которая выглядит примерно так:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAA... Optional-comment-after-the-space
Для «Необязательного комментария после пробела» я хотел бы включить имя файла закрытого ключа. Если я когда-нибудь захочу добавить дополнительный ключ (что, возможно, не для этого конкретного типа пользователя, но по привычке некоторые пользователи могут захотеть дополнительные ключи), то в файле author_keys может быть много строк, которые можно определить по тексту ключа. , Если у меня есть несколько ключей, а затем через несколько месяцев я хочу удалить один, мне может быть трудно вспомнить, какой открытый ключ связан с каким файлом ключа, и поэтому я не знаю, какой открытый ключ удалить. Используя дополнительный комментарий, я могу сохранить этот комментарий в будущем.
Примечание: если вы автоматически добавляете ключ (возможно, с помощью ssh-add), возможно, у вас есть комментарий по умолчанию, содержащий имя пользователя. Такие комментарии часто довольно бесполезны. Настройте таким образом, чтобы это было полезно в будущем.
Убедитесь, что ~/.ssh/authorized_keys
имеет необходимые разрешения, чтобы сделать OpenSSH счастливым.
Проверьте одиночные шаги
Можете ли вы проверить это (выключив систему)? Если это так, то это может проверить отдельные компоненты по отдельности, что может привести к более узкой проблеме в случае поломки.
-
Проверьте, что ключ настроен правильно.
-
На клиенте используйте
ssh -i ~/keys/privkey-file _sysstop@localhost
-
Если вы используете PuTTY, PuTTY также поддерживает
-i filename
(и -ssh
) или использует графический интерфейс для указания имени файла в Connection\SSH\auth (в левом фрейме параметров), что вы можете сделать только в "Новом сеансе". экран. (В частности, я говорю "только", потому что экран "auth" не появляется при попытке использовать "системное меню" PuTTY и использовании "Change session" в существующем сеансе)
-
На этой стадии процесса это должно дать вам оболочку. Если нет, вам может потребоваться настроить реализацию с использованием ключей SSH.
-
После входа в систему проверьте, что sudo работает (без пароля), чтобы завершить работу системы.
Ограничить ключ
Смотрите файл ~/.ssh/authorized_keys*
? Отлично. Теперь измените его.
Найдите строку, начинающуюся с ssh-rsa
Вставьте текст перед ним, чтобы строка выглядела примерно так:
command="sudo /sbin/shutdown -hp now Shutdown initiated with SSH by \\"$USER\\" CONN rem/lcl=\\"$SSH_CONNECTION\\" CLI rem/lcl=\\"$SSH_CLIENT\\" CMD=\\"$SSH_ORIGINAL_COMMAND\\"",no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAA... Optional-comment-after-the-space
Результат
Защитите этот файл закрытого ключа SSH. С его помощью любой может отключить систему. Тем не менее, это действительно все, что они могут сделать.
Теперь для завершения работы системы просто необходимо запустить непривилегированную команду "ssh" и получить доступ к этому файлу. Пока вы контролируете доступ к этому файлу, вы сохраняете вещи настолько безопасными, насколько это необходимо. Однако, даже если файл скомпрометирован, количество ущерба, которое может быть нанесено, довольно ограничено.
Теперь вам даже не нужно вводить sudo, когда вы хотите выключить систему. Вы должны убедиться, что никто неавторизованный не получит этот ключ (иначе они могут выключить систему). Предположительно, любой, кто мог бы использовать "sudo" для кражи этого файла, мог бы также просто использовать "sudo" для выключения системы, поэтому во многих случаях хранение файла в частной области компьютера, вероятно, является относительно безопасным и разумным риском.