У меня есть скрипт, работающий с пользователем user1:user1 , делающий операции внутри директории dir . В конце скрипта я хотел бы использовать chown, чтобы изменить владельца скрипта на user2:user2

Но это не работает. Я попробовал ту же операцию, вошел как user1:

$ ls -l
drwxr-xr-x 5 user1 user1 4096 Jan 11 10:58 dir
$ chown -R user2:user2 dir
chown: changing ownership of dir: Operation not permitted

Почему я не могу сменить владельца своих собственных файлов / реперториев? Есть ли другой способ, кроме как использовать рут-доступ для этого?

ОБНОВИТЬ

Сценарий создает git-клон, а затем rsync с каталогом Apache. Новые файлы имеют владельца для текущего пользователя, но вместо этого мне нужен Apache.

1 ответ1

2

Команда chown доступна только для root по соображениям безопасности, поэтому, если вы хотите это сделать, вам придется сделать это как root.

На мой взгляд, есть 2 вещи, которые вы можете сделать:

  • Используйте бит SETUID . Таким образом, вы позволяете пользователям запускать скрипт от имени пользователя root (хотя он также имеет проблемы с безопасностью, в зависимости от того, что делает ваш скрипт). Подробнее об этом здесь .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .