4

Я хотел бы перезагрузить мой Linux из скрипта. Скрипт не запускается как root.

Использование sudo reboot производит

sudo: извините, у вас должен быть tty для запуска sudo.

Простая reboot выдает ошибку

Нужно быть root

Я знаю, что могу редактировать файл sudoers , но есть ли более простой способ?

2 ответа2

2

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

Вы можете использовать ec2-reboot-instances instance_id чтобы запросить EC2 перезагрузить любой экземпляр, включая его самого. Экземпляр может получить свой собственный идентификатор, используя либо:

curl -s http://169.254.169.254/latest/meta-data/instance-id

или же

ec2-metadata -i

так что в качестве одной строки в командной строке вы должны использовать это:

ec2-reboot-instances -O YOURAWSKEY -W YOURAWSSECRET --region=YOURREGION $(ec2-metadata -i |cut -d':' -f 2)

Полный список функций EC2 находится здесь.

1

Команды reboot , halt и shutdown обычно требуют root для обеспечения безопасности [ 1 ].
Написание на Google, how to run sudo in a script он отвечает с

Добавьте ваш скрипт в файл /etc /sudoers с атрибутом NOPASSWD, чтобы он мог запускаться без запроса пароля. Вы можете привязать это к определенному пользователю (или группе пользователей) или разрешить запускать его с помощью sudo любым пользователем в вашей системе.

Достаточно справедливо, если вы можете ограничить вышеприведенное сценарием в одну строку, который запускает только команду reboot. Однако это приведет к перезагрузке компьютера без пароля из этого сценария + пользовательской конфигурации.

В качестве альтернативы это подвергнет вас риску того, что у всех будет возможность перезагрузить вашу машину. Прочитайте, например, ответы [ 2, 4, 5 ]

... вам нужно добавить suid-Bit [ 3, 4, 5 ] к этим командам. Но имейте в виду, что каждый в вашей системе, имеющий доступ к оболочке, может отключить вашу машину.

Но я также убежден, что использовать suid - плохая идея.
В комментарии к [ 2 ] снова предлагается изменить с помощью visudo ...

%sudo ALL = NOPASSWD: /sbin/reboot 

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .