Мне нужно wget
что-то (приводит к сжатому файлу в cwd), затем я должен извлечь его, затем выполнить некоторые операции копирования / перемещения / модификации и, возможно, наконец выполнить скрипт (из загруженного архива).
Теперь все эти задачи либо напрямую ( wget
извлечение и т. Д.), Либо косвенно (запуск сценария) приводят к созданию файлов и каталогов (все в текущем рабочем каталоге). Я делаю все это как root
(без способа сделать это с конечным, желаемым пользователем).
Проблема в том, что все, что создано в процессе, принадлежит пользователю root или пользователю sudo. Когда я закончу (а иногда и на полпути), я должен выполнить серию команд chmod
и chown
команд, чтобы все исправить.
Теперь было бы неплохо, если бы можно было как-то сказать системе: «С этого момента любые файлы или каталоги, которые вы создаете, когда я запускаю команды от имени root, вы будете создавать с такими-то правами владения и правами».
chown
отправлять файлы другому пользователю, и установка значения по умолчанию может привести к ошибкам пользователя, предоставляя разрешения другим пользователям безroot
понимания пользователя.Есть другой способ, довольно элегантный, я думаю. Использование install (1)
Например, zabbix-agentd нужна подпапка внутри / var / run, но последние дистрибутивы используют tmpfs для / var / run, поэтому каталог не перезагружается. Я решил это, создав файл / etc / sysconfig / zabbix-agentd, содержащий:
источник
-m 0700
например. Ответ.install
создает каталог, а затем меняет владельца / группу. Таким образом, существует короткое время, когда каталог не имеет указанного владельца / группы. В некоторых контекстах это может иметь значение.В Unix-подобных системах вновь созданные файлы и каталоги принадлежат владельцу процесса, который их создал. Стандартные утилиты обычно не имеют возможности сменить владельца созданных файлов.
Переменные с UID и GID исходного пользователя
Если вы запускаете несколько команд несколько раз, вы можете использовать переменные
$SUDO_UID
и$SUDO_GID
ссылаться на пользователя, который вызвалsudo
:Получение списка созданных файлов и каталогов автоматически
Если вы хотите получить список созданных (и, возможно, измененных) файлов и каталогов автоматически, вы можете запускать команды под
strace
наблюдением, основанным наptrace()
системном вызове:или вы можете использовать, например, Installwatch, который основан на
LD_PRELOAD
механизме.Идеи для дальнейшей работы
На основе методов, упомянутых выше, можно создать инструмент, который будет автоматически менять владельца и, возможно, права доступа к созданным / измененным файлам. Использование может быть так просто, как:
источник