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

Как обеспечить доступ нескольких пользователей к одному и тому же файлу chmod ()?

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

См. Пример:

[jacob@macbook-debian ~/Projects/test] getfacl bin/testfile
# file: bin/testfile
# owner: root
# group: root
user::rwx
user:jacob:rwx
user:jason:rwx
group::r-x
group:www-data:rwx
mask::rwx
other::r-x


[jacob@macbook-debian ~/Projects/test] chmod 0755 bin/testfile
chmod: changing permissions of 'bin/testfile': Operation not permitted

В списках ACL Linux при добавлении пользователей вы не добавляете их в качестве владельцев файла. Это просто привилегия открывать / изменять и записывать в этот файл.
При вызове chown или chmod эффективный идентификатор пользователя будет, например, jacob и этот будет сопоставлен со значением в owner. Если это не совпадает, ваша команда завершится ошибкой.

Из man 2 chmod.

Эффективный UID вызывающего процесса должен соответствовать владельцу файла, или процесс должен быть привилегированным (Linux: он должен иметь возможность CAP_FOWNER).

Альтернативой может быть установка возможности, как описано для вызывающего процесса / двоичного файла. chmod. Но это создало бы большую проблему безопасности, так как каждый мог бы использовать эту команду для изменения разрешений.
Вот - это ветка о более детальном доступе к возможностям для пользователей, но она кажется не очень простой.

В зависимости от ограничений вашего варианта использования вы можете добавить sudo правила для пользователей, чтобы использовать chmod или вы оцениваете, почему пользователи должны запускать chmod в файлах, которыми они не владеют. Может быть, используя umask во время создания файла достаточно.

Если ваши пользователи принадлежат к группе, у которой есть разрешения на запись в каталог, вы также можете скопировать рассматриваемый файл, удалить оригинал и переместить копию с исходным именем. Это приведет к тому, что пользователь станет владельцем скопированного файла и сможет делать chmod.

[user@localhost testdir]$ ll
total 12K
drwxrwxr-x  2 root user 4.0K Jul 14 11:49 .
drwxr-xr-x  3 user user 4.0K Jul 14 11:47 ..
-rw-rw----+ 1 root user    5 Jul 14 11:41 testfile
[user@localhost testdir]$ getfacl testfile 
# file: testfile
# owner: root
# group: user
user::rw-
user:user:rw-
group::rw-
group:user:rw-
mask::rw-
other::---

[user@localhost testdir]$ chmod 777 testfile
chmod: changing permissions of 'testfile': Operation not permitted
[user@localhost testdir]$ cp -a testfile testfile.copy
[user@localhost testdir]$ getfacl *
# file: testfile
# owner: root
# group: user
user::rw-
user:user:rw-
group::rw-
group:user:rw-
mask::rw-
other::---

# file: testfile.copy
# owner: user
# group: user
user::rw-
user:user:rw-
group::rw-
group:user:rw-
mask::rw-
other::---

[user@localhost testdir]$ mv testfile.copy testfile
[user@localhost testdir]$ ll
total 12K
drwxrwxr-x  2 root user 4.0K Jul 14 11:50 .
drwxr-xr-x  3 user user 4.0K Jul 14 11:47 ..
-rw-rw----+ 1 user user    5 Jul 14 11:41 testfile

[user@localhost testdir]$ chmod 777 testfile
[user@localhost testdir]$ ll
total 12K
drwxrwxr-x  2 root user 4.0K Jul 14 11:50 .
drwxr-xr-x  3 user user 4.0K Jul 14 11:47 ..
-rwxrwxrwx+ 1 user user    5 Jul 14 11:41 testfile