cpを使用してコピーされたファイルにデフォルトのACLに従って設定された権限がないのはなぜですか?

cpを使用してコピーされたファイルにデフォルトのACLに従って設定された権限がないのはなぜですか?

質問は次のとおりです。cpがACLを尊重しないのはなぜですか?サーバー障害について/home/myuserしかし、1つは異なります。フォルダとサブフォルダに作成された新しいファイルのデフォルト権限を設定しました。

setfacl -dR -m u::rwx,g::rx,o::rx ~ 2> /dev/null

このgetfacl ~コマンドは、次の出力を提供します。

getfacl: Removing leading '/' from absolute path names
# file: home/lohacker
# owner: lohacker
# group: lohacker
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:other::r-x

cpフォルダACL権限は新しいファイルを作成するときに適用されますが、ソースファイルに対する権限は保持しなくてもコマンドを使用して新しいファイルをコピーしません。
たとえば、次のような関数があります。

cp () {
    command cp -a --no-preserve=mode,ownership --remove-destination "$@"
    return $?
}

私が現在の場所にいるとしましょう~

> file.txt
cp file.txt file2.txt
ls -l file.txt file2.txt
getfacl file.txt file2.txt

私に出力を与える:

-rw-rw-r-- 1 lohacker lohacker 0 Jul 26 13:05 file2.txt
-rw-r--r-- 1 lohacker lohacker 0 Jul 26 13:05 file.txt

# file: file.txt
# owner: lohacker
# group: lohacker
user::rw-
group::r--
other::r--

# file: file2.txt
# owner: lohacker
# group: lohacker
user::rw-
group::rw-
other::r--

私は両方のファイルを期待しましたが、-rw-r--r--残念ながらそうではありません。ソースファイルの権限を保持せずに
コマンドを使用して問題を解決する方法はありますか?cp

答え1

setfacl -bR ~ 2> /dev/nullACLを使用せずにコマンドを使用してデフォルトの権限を変更できたため、解決策はファイルの1行をumaskコメントアウトすることでした。/etc/login.defsこれ:

UMASK       022

になる:

#UMASK      022

UMASKで設定を解除すると、/etc/login.defs値がこれ以上にUSERGROUPS_ENAB設定された変数valueの影響を受けないためyes便利です。これは、コマンドの実行時にdeluserユーザーuidと同じgidとユーザーと同じ名前のグループが作成されるためです。も削除されます(グループに他のメンバーがない場合)。後で削除する必要はありません。

# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
# for private user groups, i. e. the uid is the same as gid, and username is
# the same as the primary group name: for these, the user permissions will be
# used as group permissions, e. g. 022 will become 002.

このように、cpコマンドは、-rw-r--r--権限が保持されていなくてもコピーされたファイルに権限を付与します。

これは一般式です:

perl -pi -e 's/^\h*(UMASK\h+.*[^\h])\h*$/#\1/i' /etc/login.defs

関連情報