Как мне вызвать исполняемый файл от имени root без использования sudo?

Вопрос или проблема

Я создал приложение, которое также использует TPM для подписи/шифрования/расшифрования (с библиотекой tss2-fapi)… Но я новичок, когда дело касается разрешений в Linux (Ubuntu). Теперь, когда я запускаю приложение, я всегда должен запускать его как:

sudo ./tpmProjectApp

Запуск приложения таким образом не создает никаких проблем.

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

Поэтому я задавался вопросом, есть ли способ, чтобы пользователь мог запускать это приложение без необходимости использовать sudo?

Я пытался назначить исполняемый файл пользователю root с помощью:

sudo chown root ./tpmProjectApp

и установив бит setuid (я также пробовал g+s):

sudo chmod u+s tpmProjectApp

Разрешения тогда выглядели так:

-rwsrwsrwx 1 root root 713608 apr 14 16:02 tpmProjectApp*

но когда я запускаю ./tpmProjectApp, я получаю ошибки, которые обычно не получаю.

Например:
Ключ P_RSA2048SHA256/HS/SRK/myRsaKey не найден.

Но я знаю, что ключ существует, потому что приложение работает, если я запускаю его с sudo.

Я думаю, что назначение прав root для этого исполняемого файла может быть менее болезненным, чем попытка изменить файлы TPM, в случае если проблема там.

но когда я запускаю ./tpmProjectApp, я получаю ошибки, которых обычно не бывает.
Например: Ключ P_RSA2048SHA256/HS/SRK/myRsaKey не найден.
Но я знаю, что ключ существует, потому что приложение работает, если я запускаю его с
sudo.

Возможно, уже немного поздно, но похоже, что вам следует использовать абсолютные пути в скрипте. Пример:

/home/fancyusername/P_RSA2048SHA256/HS/SRK/myRsaKey

Если вам нужен относительный путь к расположению скрипта, то что-то вроде этого может сработать:

$(dirname $(realpath "$0"))/P_RSA2048SHA256/HS/SRK/myRsaKey

Ответ или решение

Как запустить исполняемый файл от имени root без использования sudo

Запуск приложения от имени пользователя root без использования команды sudo может быть необходим в различных случаях, особенно когда требуется ограничить доступ к определенным ресурсам для других пользователей. Ваша задача – обеспечить запуск приложения, использующего библиотеку tss2-fapi для работы с TPM, без необходимости использования sudo, но с соблюдением всех необходимых мер безопасности.

1. Проблема с правами доступа

Предположим, что ваше приложение требует доступа к ресурсам, которые защищены, и для их использования нужно быть пользователем root. Вы уже пытались использовать бит setuid, что является правильным подходом. Однако, важно понимать, что не все программы могут корректно работать с установленным bit setuid из-за различных соображений безопасности и ограничений.

Краткий обзор команд, которые вы использовали:

sudo chown root ./tpmProjectApp
sudo chmod u+s tpmProjectApp

Эти команды сменили владельца файла на root и установили бит setuid. Кроме того, вы проверили права доступа, которые теперь выглядят следующим образом:

-rwsrwsrwx 1 root root 713608 апр 14 16:02 tpmProjectApp*

2. Проблемы при выполнении без sudo

Вы упомянули, что при попытке запустить приложение без sudo возникают ошибки, несмотря на то, что приложение успешно работает под правами root. Часто такая проблема может возникнуть из-за путей к ресурсам, которые используются в приложении. Когда вы запускаете его от имени root, у вас есть полный доступ к файловой системе, в отличие от стандартных пользователей.

3. Решение с абсолютными путями

Как указано в вашем втором сообщении, рекомендуется использовать абсолютные пути в вашем приложении, чтобы избежать проблем с определением файлов на уровне пользователя. Пример использования абсолютного пути выглядит так:

/home/ваш_пользователь/P_RSA2048SHA256/HS/SRK/myRsaKey

Если необходимо использовать относительные пути к расположению скрипта, можно применить следующую конструкцию:

$(dirname $(realpath "$0"))/P_RSA2048SHA256/HS/SRK/myRsaKey

Это гарантирует, что программа всегда будет находить необходимые ключи, независимо от того, от какого пользователя она запущена.

4. Дополнительные подходы

Если использование bit setuid не решает вашу проблему, рассмотрите возможность использования других методов:

A. Изменение группы

Если приложение должно запускаться от имени пользователя с определенной группой, вы можете изменить группу файла и добавить пользователей в эту группу. Сделайте следующее:

sudo chown :ваша_группа ./tpmProjectApp
sudo chmod g+s ./tpmProjectApp

Затем добавьте нужных пользователей в указанную вами группу:

sudo usermod -aG ваша_группа имя_пользователя

B. Использование PolicyKit

Если ваш приложение использует GUI или требуется более сложная настройка привилегий, вы можете рассмотреть возможность использования PolicyKit для определения правил доступа.

Заключение

Запуск вашего приложения как root без использования sudo может быть легко осуществлен с помощью установки bit setuid, освобождая от необходимости предоставлять разрешения через sudo. Однако для обеспечения безопасности и корректной работы программы вам следует убедиться, что все пути к ресурсам указаны корректно и проверены на наличие ошибок. Рассмотрите альтернативные методы управления доступом, такие как изменение группы или использование PolicyKit, в зависимости от ваших нужд и конфигурации системы.

Оцените материал
Добавить комментарий

Капча загружается...