Назад | Перейти на главную страницу

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

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

Допустим, мы развертываем эту штуку в «поле», где мало администраторов Linux. Мы не хотим давать пароли root для полевых специалистов.

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

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

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

  • судо

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

  • бит setuid

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

chmod 4755 <file>

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

  • 4 ... бит setuid

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

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

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

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


operator@box$ ls -la

-rwsr-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 вместо)