Файл, доступный только с правами root

У меня есть двоичный файл, который нужно запускать при запуске на всех учетных записях (включая непривилегированные учетные записи пользователей), поэтому команда запускать его будет помещена в /etc/rc.local . Сама программа будет иметь только разрешения на выполнение, чтобы она не могла быть прочитана или изменена непривилегированным пользователем. Он находится в /usr/bin .

Тем не менее, он должен получить доступ к секретному ключу, когда он запускается (ключ находится в /usr/share ). Возможно ли создать файл, содержащий секретный ключ, который не будет доступен для чтения или записи для всех обычных пользователей, но доступен для чтения программой? Может ли файл использовать привилегированную программу?

Возможно, у него могут быть какие-то настройки с разрешениями на файлы (chmod)? Или есть способ, которым он должен быть зашифрован каким-то образом?

  • Что такое хороший баланс между надежным паролем sudo и длительной задержкой
  • Почему «sudo su» в сценарии оболочки не запускает остальную часть скрипта как root?
  • Как сделать редактирование sudo в MC?
  • «sudo» не установлен, я не могу его установить, и он спрашивает, я ли я root
  • исключить команды из прав пользователя sudo
  • Почему мне еще нужно запустить shutdown как sudo после этого?
  • Как sudo помнит, что вы уже ввели пароль root?
  • sudo: не спрашивайте пароль при входе в систему с помощью ssh key
  • One Solution collect form web for “Файл, доступный только с правами root”

    Если он, как вы говорите, «должен запускаться при запуске на непривилегированной учетной записи пользователя», тогда он обязательно будет иметь доступ ко всем файлам, к которым имеет доступ доступная учетная запись без права доступа.

    Вы можете создать выделенную неуправляемую учетную запись пользователя для запуска скрипта. Установите разрешения для файла секретного ключа, чтобы только эта специальная учетная запись пользователя могла ее прочитать. Но похоже, что вам нужно запустить программу под определенной ранее существующей учетной записью пользователя, чтобы она не работала для вас.

    Существуют и другие решения, такие как запуск его в chroot() который имеет доступ к секретному ключу, но независимо от того, зависит ли это от того, что он делает, и что еще, кроме файла секретного ключа, ему нужен доступ.

    Вам не нужно будет использовать sudo в любом случае, потому что /etc/rc.local работает от имени root, поэтому вы можете напрямую подключаться к той учетной записи, которую вы в конечном счете решили запустить в программе.

    EDIT после выяснения вопроса:

    Он должен выполняться каждый раз, когда пользователь любого типа регистрируется.

    Понимаю. Это сильно отличается от запуска его только при запуске с использованием /etc/rc.local как вы изначально заявляли!

    Лучше всего в этом случае, вероятно, попытаться внедрить секретный ключ в двоичный файл вместо того, чтобы обращаться к нему как к внешнему файлу, иметь двоичный файл, принадлежащий root и исполняемый, но не читаемый другими пользователями (разрешения, такие как rwx--x--x . Пользователи не смогут получить доступ к ключу (если только они не rwx--x--x root в системе), но они могут запускать двоичный файл.

    Если вы не можете вставить секретный ключ в двоичный код, вы можете сделать двоичный setuid для некоторого пользователя, который может получить доступ к секретному ключу … но примите все меры, чтобы идти с написанием двоичных файлов setuid.

    Linux и Unix - лучшая ОС в мире.