Я работаю со встроенной системой Linux. У него есть специальная учетная запись, которая используется для запуска программного обеспечения, скомпилированного программной средой производителя. У этой учетной записи намеренно отключен вход в систему. Учетная запись имеет все разрешения и принадлежит к тем группам, которые необходимы для работы установленного программного обеспечения. Установленное программное обеспечение находится в подкаталоге учетной записи пользователя, и система знает, что нужно запускать такую-то программу в таком-то каталоге после загрузки.
Допустим, мы развертываем эту штуку в «поле», где мало администраторов Linux. Мы не хотим давать пароли root для полевых специалистов.
Как бы они установили обновление программного обеспечения?
Обновление поставляется в виде двоичного файла. В настройках разработчика вы можете просто перезаписать старый двоичный файл новым, а затем перезагрузиться. Но у разработчиков есть пароль root в системах разработчиков.
Я бы подумал о следующих вариантах:
У вас может быть пользователь-оператор с ограниченными правами, но с разрешением sudo («запускать от имени»). Таким образом, этот пользователь-оператор может войти в систему с собственными учетными данными / ключом ssh и выполнить свою работу. Вы также можете ограничить разрешение на уровне sudo (sudoers) и / или в случае ключа ssh на уровне ssh - вы можете ограничить сеанс только для некоторой команды в случае использования определенного ключа для входа в систему ssh.
В случае, если вы можете подготовить двоичный файл для обновления (файлы сценариев часто не принимаются для этого подхода по соображениям безопасности), вы можете установить файл с владельцем «специальной учетной записи» и правильным битом (например, с помощью 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
вместо)