Обновление пользовательских файлов без учетной записи в 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
вместо)