Обновление пользовательских файлов без учетной записи в Linux без использования root?

Я работаю со встроенной системой Linux. Он имеет специальную учетную запись, которая используется для запуска программного обеспечения, скомпилированного в среде программирования производителя. Эта учетная запись намеренно отключена. Учетная запись имеет все разрешения и входит в группы, необходимые для работы установленного программного обеспечения. Установленное программное обеспечение находится в подкаталоге учетной записи пользователя, и система знает, как запускать такую-то и такую-то программу в такой-то директории после загрузки.

Итак, позвольте нам сказать, что мы развернем эту вещь в "поле", где администраторы Linux не хватает. Мы не хотим давать полевым паролям root-пароли.

Как они установят обновление программного обеспечения?

Обновление приходит в виде двоичного файла. В настройках разработчика вы можете просто перезаписать старый двоичный файл новым и затем перезагрузить компьютер. Но разработчики имеют пароль root на системах разработчиков.

2 ответа

Я бы подумал о следующих вариантах:

  • Судо

У вас может быть какой-то пользователь-оператор с ограниченными разрешениями, но с разрешением sudo ("запускать как"). Таким образом, этот пользователь-оператор может войти в систему со своими учетными данными / ключом ssh и выполнить работу. Вы также можете ограничить разрешение на уровне sudo (sudoers) и / или в случае использования ключа ssh на уровне ssh - вы можете ограничить сеанс только для некоторой команды в случае использования специального ключа для входа в систему через ssh.

  • бит setuid

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

chmod 4755 <file>

Это установит (по порядку):

  • 4... бит setuid

  • 7 ... читать и писать и выполнять для владельца

  • 5 ... чтение и выполнение для группы (владельца)

  • 5 ... читать и выполнять для других

Когда "другой" (скажем, операционная учетная запись - для обновления) запустит файл, он будет выполнен так же, как и владелец (пользователь приложения). Файл может быть, например, update_binary.


operator@box$ ls -la

-rws r-xr-x 1 техник... update_binary

Как только файл будет выполнен оператором (без каких-либо дополнительных требований), он все равно будет запущен в качестве техника

operator@box$ ./update_binary <parameters>

Процесс и любая операция с файловой системой будут реализованы как технический специалист.

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

Ваш бинарный файл:

ls -ld /home/app/subdir/a.out     # -rwxr-x--- app app  (example)

Добавить пользователя technician группировать app:

usermod -a -G app technician  

Пусть вся группа модифицирует бинарный файл:

chmod g+rwx a.out     # makes it -rwxrwx---

Позвольте всей группе получить доступ к двоичному файлу через каталог в своем пути (x для каталога):

chmod g+x  /home/app/subdir
chmod g+x  /home/app
# repeat for each subdirectory of the path, if owned by app:app

Попробуйте - войдите как technician

cat new.binary > /home/app/subdir/a.out

(Это не позволяет вам перемещать или удалять файл a.out, только для записи в него. Это операции над каталогом, а не над файлом, поэтому вам нужно chmod g+rwx /home/app/subdir вместо)

Другие вопросы по тегам