У меня есть система, в которой несколько пользователей запускают приложение, 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