У меня есть скрипт, который дает мне детальный контроль над яркостью подсветки и требует sudo
запуска. Это по сути это:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | tee $backlight
и живет в ~/bin/backlight-adjust
. Сценарию нужны sudo
привилегии, потому что tee $backlight
он пишет в привилегированное местоположение. Так что он потерпит неудачу, если не будет работать с sudo
.
У этого подхода есть проблема, потому что я не могу просто запустить sudo backlight-adjust
, потому что ~/bin
его нет $PATH
в sudo
среде, только в моей среде. Так что мне придется бежать sudo env "PATH=$PATH" backlight-adjust
или что-то подобное.
В качестве альтернативы я мог бы написать это так:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | sudo tee $backlight
и предложите мне пароль.
Второй подход работает лучше для меня, потому что я не должен помнить, чтобы напечатать sudo; это подскажет мне. И я могу сохранить свои $PATH
нетронутыми. В целом это кажется более удобным, но есть ли причины, по которым я не должен делать это вторым способом?
(Я использую Xubuntu 14.04, а моя оболочка - GNU bash 4.2.45, если это имеет значение.)
источник
sudo
фактически сохраняет мой$PATH
по умолчанию, поэтому у меня нет этой проблемы.Ответы:
Лично я бы использовал другой подход. Сделайте псевдоним для вашего скрипта. Добавьте эту строку в ваш
~/.bashrc
(или эквивалент в других оболочках)Таким образом, вам не нужно беспокоиться о том, чтобы не забыть запустить его,
sudo
и вам не нужно добавлятьsudo
скрипт в скрипт. Он будет полностью прозрачен для вас и просто спросит ваш пароль, когда вы попытаетесь запуститьbacklight-adjust
.источник
sudo
в настоящий скрипт, тем более что это позволяет легко увидеть, какие элементы скрипта действительно требуют корневых разрешений.Я не могу понять, почему это может быть неправильно - хотя я обычно предпочитаю, чтобы команды не задавали мне вопросы, чтобы они могли быть написаны в сценариях. Вы можете настроить
/etc/sudoers
егоsudo
без пароля.Но ... почему бы не добавить
по твоему
/etc/rc.local
и забыть проsudo
?(В Ubuntu, если вы можете использовать его,
sudo
вы входите в группу sudo , так что вы можете использовать егоchgrp sudo /sys...
и быть счастливым.)источник
В качестве альтернативы, вы можете добавить
в ваш
/etc/sudoers
файл.источник
Вы указываете sudo backlight-Adjust, потому что ~ / bin отсутствует в $ PATH в среде sudo.
Так зачем зависеть от этого? Я думаю, что вы должны просто изменить эту строку,
/home/user/bin/backlight-adjust
и она будет работать.Но мне бы очень хотелось, чтобы решение Тердона использовать псевдоним тоже. Или вы можете поместить свой скрипт в
/usr/bin/
и он будет доступен для каждого пользователя (включая root)источник
~/bin
потому что тогда он находится в репозитории точечных файлов моего дома, поэтому он остается под контролем версий.-E
флаг, чтобы сохранить окружающую среду:sudo -E command
sudo env "PATH=$PATH" ...
).Не может дать общее правило ... если сценарий / программа предназначена для выполнения некоторой перенастройки (например, принтера) и вызывается обычными пользователями, это должно быть. В противном случае, я бы оставил достаточно хорошо в покое: если обычный пользователь запускает его, просто не работает (либо в результате явной проверки, либо просто потому, что ему не разрешено что-либо делать).
Повышенные привилегии должны быть выданы экономно, если вообще. Переключиться на более высокую привилегию сложно, лучше оставить это экспертам (т.е.
sudo(1)
).источник
Лично я использую что-то подобное
${SUDO}
в своих сценариях, чтобы вызывающий мог установить его при необходимости или${SUDO:-sudo}
использовать по умолчанию.В вашем конкретном случае, я с принятым ответом.
источник
Поместите скрипт (без
sudo
) в подходящее место для всего пользователя, например/bin
, и затем сделайте следующее:Это работает путем установки флага setuid, что означает, что он всегда будет запускаться как владелец файла. Для получения дополнительной информации, пожалуйста, прочитайте http://major.io/2007/02/13/chmod-and-the-mysterious-first-octet/ . Я на самом деле не очень много знаю о том, как это работает, я просто нашел, что это гуглится, основываясь на том, что я думал, что читал несколько лет назад.
источник
4755
означает, что всегда выполняется как владелец, владелец может читать, писать и выполнять, группа может читать и выполнять, а пользователи могут читать и выполнять, что является стандартным уровнем разрешений для вещей, которые любой пользователь должен иметь право делать с правами root.