На самом деле делалось не для совсем сервера, но тем не менее. Стоит, в общем, на одном заводике в одной из стран СНГ аппарат по переработке пластиковых отходов в пластиковые полезности, управляет им комп с Linux на борту, а компом из будочки рядом управляет оператор с рабочего места с обыкновенной виндой. Комп с Линуксом надо иногда перезагружать, отключать, а в штатном ПО аппарата эту возможность почему-то не встроили. Раньше оператором был довольно умный парень, которому и root-пароль можно было доверить, и ssh, но он уволился, напоследок создав два батника примерно такого содержания:plink -ssh -P 22 -l root -pw rutoviiparol 192.168.0.40 reboot
plink -ssh -P 22 -l root -pw rutoviiparol 192.168.0.40 poweroff
Бардак сущий, под root ходить для перезагрузки никуда не годится, да еще и хранить рутовый пароль в открытом виде. Можно, конечно, было бы подправить батник, сделав вход под юзерской учеткой, но sudo было криво настроено и все равно оператору бы пришлось для перезагрузки вводить пароль.
Завести на сервере отдельных пользователей "для отключения" и "для перезагрузки" и настроить все так, чтобы при входе этих пользователей по ssh автоматически выполнялось выключение или перезагрузка, при этом не требовался ввод пароля, создать соответствующие bat-файлы на операторском рабочем месте.
Первым делом понадобится группа для этих пользователей. Самая простая операция. Назовем группу, например
powermanager и создадим ее (естественно, здесь и далее все команды, требующие root-доступа делаются из-под учетки root или через sudo).groupadd powermanagerВ файле
/etc/sudoers как раз и описывается, какие пользователи и группы имеют возможность пользоваться утилитой sudo, временно повышая свои права до root, и какие команды им разрешено выполнять без пароля.Этот файл руками лучше не редактировать, а всегда делать это с помощью команды
visudo:Файл настроек /etc/sudoers всегда следует редактировать с помощью команды visudo. visudo блокирует файл sudoers, сохраняет изменения во временный файл и проверяет, что файл грамматически корректен, перед тем как скопировать его в /etc/sudoers.
Важно:
Крайне важно, чтобы файл sudoers был без синтаксических ошибок! Любая ошибка делает sudo неработоспособным. Всегда редактируйте его только с помощью visudo для предотвращения ошибок. [1]
Но есть небольшая проблема,
visudo, в качестве вызываемого ей редактора, использует неудобный vi, который без стакана и длительной практики может только "пищать и портить". Слава Ктулху, на компьютере стоял mc, и, соответственно, mcedit, поэтому:1. Переопределение редактора для
visudo при однократном запуске:EDITOR=mcedit visudoУфф,
/etc/sudoers открылся в человеческом mcedit.2. Постоянная замена редактора для
visudoДля этого добавляем в
sudoers следующие строки:Defaults env_reset
Defaults editor=/usr/bin/mcedit, !env_editorгде
editor=/usr/bin/mcedit указание, какой редактор использовать!env_editor - запрет использования редактора, установленного переменными окружения (подробности смотрите по ссылке на детальное описание файла sudoers в конце заметки).Для разрешения пользоваться командой
shutdown без ввода пароля для пользователей группы powermanager, в sudoers следует добавить следующую конструкцию:%powermanager ALL=NOPASSWD: /sbin/shutdownВнимание! Для более полного понимания
sudoers настоятельно рекомендую ознакомиться со статьей по ссылке в конце заметки!Внимание! Все пути в файле
sudoers должны быть полнымиПример файла
sudoers можно посмотреть здесь.Создание пользователя для удаленной перезагрузки.
1. Создаем пользователя:
useradd -g powermanager -d /home/rebootusr -s /home/rebootusr/reboot.sh rebootusrгде:
-g powermanager группа пользователя (ранее созданная powermanager)-d /home/rebootusr домашний каталог пользователя-s /home/rebootusr/reboot.sh - оболочка для пользователя. Обычно здесь прописывается /bin/sh, /bin/bash для интерактивных пользователей, или /bin/false для неинтерактивных, например пользователя FTP, но можно задать и собственный скрипт, команды которого будут выполнены при входе пользователя в систему.2. Задаем пользователю пароль (иначе не сможем залогиниться по ssh):
passwd rebootusr3. Создаем домашний каталог:
mkdir /home/rebootusr4. Меняем владельца каталога на пользователя
rebootusrchown rebootusr:powermanager /home/rebootusr5. Меняем права доступа на каталог:
chmod 500 /home/rebootusr6. Создаем в домашнем каталоге скрипт
reboot.sh со следующим содержимым:#!/bin/sh
echo "Rebooting..."
sudo /sbin/shutdown -r now
где
-r - указание программе shutdown выполнить перезагрузкуnow - указание временного интервала - немедленно (можно еще выставить число в минутах, тогда перезагрузка произойдет через указанное время)7. Меняем владельца и права доступа для скрипта
reboot.shchown rebootusr:powermanager /home/rebootusr/reboot.sh
chmod 500 /home/rebootusr/reboot.shАналогично создаем пользователя для выключения, меняя только имя, пароль, домашний каталог, название скрипта и команды в скрипте.
Содержимое скрипта для отключения питания
poweroff.sh:#!/bin/sh
echo "Power off"
sudo /sbin/shutdown -hP nowДля Windows понадобится утилита
plink, обычно она идет вместе с ssh-клиентом PuTTY. В каталоге с ней создаем два bat-файла следующего содержания.rebootsrv.bat:
plink -ssh -P 22 -l rebootusr -pw rebootpass 192.168.0.40
pwroffsrv.bat:
plink -ssh -P 22 -l pwroffusr -pw pwroffpass 192.168.0.40где вместо
rebootusr и pwroffusr надо подставить имена пользователей для удаленной перезагрузки и отключения питания соответственно, вместо rebootpass и pwroffpass - заданные пароли, а вместо 192.168.0.40 настоящий адрес удаленного компьютера.1.
sudo [Копия]2. Как перезагрузить компьютер без прав root [Копия]
Заметка в PDF
Это репост заметки из моего блога на сайте http://tolik-punkoff.com
Оригинал заметки находится здесь: http://tolik-punkoff.com/2017/01/11/udal