複数のユーザーが同じファイルを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
Linux ACLでは、ユーザーを追加するときに、ファイルの所有者としてユーザーを追加しません。そのファイルを開いたり、変更したり、書き込んだりするのは特権です。chown
またはchmod
を呼び出すと、有効なユーザーIDは次のようになります。 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