Основной вопрос:
Есть ли способ, которым я могу выполнить «полностью» один из моих сценариев, когда рабочий стол Ubuntu появляется независимо от того, вошли ли пользователь root, администратор, пользователь рабочего стола или непривилегированный пользователь?
Что делает скрипт?
Сценарий монтирует раздел, ищет файл в этом разделе и, наконец, на основе этого файла принимается решение о копировании раздела в другой раздел. Это копирование осуществляется через
dd if=/dev/sda2 of=/dev/sda5
Когда скрипт работает нормально?
Скрипт работает без проблем, когда я запускаю его из терминала
sudo ./my_copying_script
Эта команда запрашивает у меня пароль пользователя, вошедшего в систему. Я ввожу пароль и скрипт начинает работать.
Когда скрипт НЕ работает нормально?
Я хочу запустить скрипт при запуске. Я установил программу запуска с помощью Запуск приложений Утилита Ubuntu. Скрипт запускается при запуске, но завершается по команде dd, возвращая следующую ошибку:
dd: opening '/dev/sda2': Permission denied
На ЕДК Я установил владельца my_copying_script как root и установил SUID. Теперь разрешения my_copying_script (-rwsr-sr-x). ЕДК Точка зрения заключалась в том, что после установки suid запускаемая программа будет запускаться с разрешениями ее владельца. Я сделал это, но возникла та же самая ошибка доступа / dev / sda2.
Затем я добавил префикс sudo, как указано ниже
sudo dd if=/dev/sda2 of=/dev/sda5
но это вернуло следующую ошибку:
sudo: no tty present and no askpass program specified
источник
Ответы:
Усман, я думаю, у тебя есть как минимум два варианта, которые я уже упоминал.
Самый простой способ
Создайте двоичный файл set-UID, который (проверит, кто его запустил и разрешит использование, если владелец родительского процесса может его запустить) запустит подготовленный скрипт и завершит работу. Поместите в автозагрузку в вашем менеджере рабочего стола, вот и все. Просто имейте в виду, что это не самый лучший способ, и он требует немного программирования на языке Си. В основном вам нужно сделать код, подобный этому примеру:
Имейте в виду, что это взлом, а не решение, на самом деле. И обязательно используйте root: allow_group и 4750 прав на двоичный если вам не нужно, чтобы им управляли все. Не забудьте добавить всех пользователей, которые могут начать это, в allow_group (выберите ваше имя).
Хороший способ
Другой, гораздо лучший способ - сделать своего рода демона, порожденного @ system boot (скажем, из init-скриптов), но я не уверен, как именно вы собираетесь определять, когда начинается новый сеанс X, я не был в этом тема пока не могу дать Чисто советы здесь.
источник
Установите правильные права доступа к подключенному пути, и все готово.
источник
sudo будет запускать программу от имени другого пользователя, только если было выполнено одно из этих 3 условий (в отношении паролей):
Так как варианты 2 и 3 требуют TTY (sudo не читает из канала), он не запустится, если не сможет его найти. Проверьте ваш сценарий, если в какой-то момент вы запускаете сценарий удаленно, используя ssh, поскольку возможно, что он не выделит TTY для неинтерактивной удаленной команды.
Цитируется из: Вот
источник
Добавьте запись в / etc / fstab, используйте chown и chmod, чтобы изменить разрешения, чтобы предоставить только root-доступ к смонтированному разделу.
источник
Возможным решением будет добавить вашего пользователя и команду, которую он пытается вызвать, в / etc / sudoers с параметром NOPASSWD. Вырезать из / etc / sudoers:
Так что, возможно, вам понадобится что-то вроде:
myuser ALL=NOPASSWD: mount
Я не очень уверен насчет точного синтаксиса, вам лучше поискать его в Google.
РЕДАКТИРОВАТЬ: Если вы пытаетесь подключить сетевой диск, добавление записи в / etc / fstab, вероятно, не будет работать, поскольку сетевые службы не загружаются во время выполнения fstab.
источник