私のデフォルトのumaskはです077
。ディレクトリを作成すると権限があります700
。
mkdir AA
$ stat -c'%A %n' AA/
drwx------ AA/
では、デフォルトの権限を再帰的に750に設定したいと思います。
setfacl -R --default --modify g::rx,o::--- AA
そして期待どおりに機能していることを確認してください。
$ touch AA/zz
$ stat -c'%A %n' AA/zz
-rw-r----- AA/zz
ZZ
今、私は新しいディレクトリ内に別の既存のディレクトリをコピーしたいと思いますAA
。
$ stat -c'%A %n' ZZ ZZ/zz
drwx------ ZZ
-rw------- ZZ/zz
既存のディレクトリには権限があり、700
内部ファイルには600
。
$ cp -r --no-preserve=all ZZ/ AA/
$ stat -c'%A %n' AA/ZZ AA/ZZ/zz
drwx------ AA/ZZ
-rw------- AA/ZZ/zz
--no-preserve=all
しかし、私のumaskは、既存のumaskでない場合でも尊重されませんZZ
。
cp
新しいファイルの作成に使用したときと同じ動作を作成するにはどうすればよいですか?touch
元の権限に関係なく、デフォルトのumask / setfacl設定を維持しながら既存のディレクトリ構造をコピーしたいと思います。
答え1
解決策: Debian 11.5/cp (GNU coreutils) 8.32 を使用
1)これはユーザーumaskを使用します:
$ cp -r --no-preserve=all ZZ/ AA/
2)ターゲットディレクトリの有効なumaskを使用してください。
$ cp -r ZZ/ AA/
3)これはumaskを使用しません。
$ cp -r --preserve=all ZZ/ AA/
あなたは(AA ディレクトリにファイルを作成できるユーザー)には、作成したファイルのデフォルトモードをオーバーライドすることに制限はありません。これには、ユーティリティを使用するときも含まれます。CP。書き込み権限がある限り、Aclはファイル権限の生成を制限しません。
結論:すべてが期待どおりに機能します。実用的な事項CPまた、ユーザーumaskとacl(存在する場合)を使用するオプションも必要です。
#================================================= == ========
これは「acl」マニュアルの一部です。
ファイルユーティリティの変更
ACLをサポートするシステムでは、ファイルユーティリティls(1)、cp(1)、およびmv(1)は次のように動作を変更します。
•ls -lによって生成された長い形式のls(1)ユーティリティは、デフォルトのACLまたは3つ以上の必須ACLエントリを含むアクセスACLを含むファイルの権限文字列の後にプラス記号(+)を表示します。
• -pフラグが指定されている場合、cp(1)ユーティリティはACLも保持します。これが不可能な場合は警告が出されます。 ...
#------------------------------------------------ - ---------------
基準
IEEE 1003.1e Draft 17 ("POSIX.1e") ドキュメントでは、IEEE 1003.1 標準に対する複数のセキュリティ拡張について説明しています。 1003.1e の操作は中断されましたが、多くの UNIX スタイルシステムは POSIX.1e ドラフト 17 以前のドラフトの一部を実装しています。
Linuxアクセス制御リストは、POSIX.1eのアクセス制御リストに定義されている完全な機能とユーティリティのセットといくつかの拡張機能を実装しています。この実装はPOSIX.1eドラフト17に完全に準拠しています。アクセス制御リスト操作機能は、ACLライブラリー(libacl、-lacl)で定義されています。 POSIX 準拠のインターフェースは <sys/acl.h> ヘッダーで宣言されます。これらの関数のLinux固有の拡張は、<acl / libacl.h>ヘッダーで宣言されています。