かなり制限されたumask設定(0077)があります。これは問題ありませんが、そのディレクトリの下に作成されたすべてのファイルに対して、より寛容な設定(0002)が必要なディレクトリが1つあります。特定のディレクトリにumaskを設定して、その下に作成されたすべてのファイルが同じアクセス許可を継承するようにする方法はありますか?
ACLを使用する
setfacl -d -m mask:002/your/dir/here /
http://man-wiki.net/index.php/1:setfacl
ログインのデフォルトを設定したい場合は、.bashrc(または使用するシェル)に「umask002」を追加するだけです。その環境でログインした場合、すべての新しいdirはこれを使用します。
シェルフックおよび direnv
で実装された別のソリューションを提供します。システムでsetfacl
が使用できない場合は、次のソリューションの方が互換性が高い可能性があります。 (例:macOS)
direnv
は、シェルの環境スイッチャーです。 に応じて、bash、zsh、tcsh、fish Shell、elvishにフックしてロードまたはアンロード環境変数を作成する方法を知っています。カレントディレクトリ。
特定のディレクトリに_.envrc
_からexport
カスタムumask
値を使用すると、そのディレクトリを離れるとexport
ed envvarがアンロードされます。
_# example .envrc file
export UMASK=0022
_
作業ディレクトリが変更されたら、umask
値を変更するフックを定義します。
_function _umask_hook {
if [[ -n $UMASK ]]; then
umask "$UMASK"
Elif [[ $OSTYPE == darwin* ]]; then
umask 0077
else
umask 0022
fi
}
# To make the code more reliable on detecting the default umask
function _umask_hook {
# Record the default umask value on the 1st run
[[ -z $DEFAULT_UMASK ]] && export DEFAULT_UMASK="$(builtin umask)"
if [[ -n $UMASK ]]; then
umask "$UMASK"
else
umask "$DEFAULT_UMASK"
fi
}
# zsh hooks
# trigger _umask_hook once working dir is changed
add-zsh-hook chpwd _umask_hook
# bash
# Append `;` if Prompt_COMMAND is not empty
Prompt_COMMAND="${Prompt_COMMAND:+$Prompt_COMMAND;}_umask_hook"
_
当面、zshのdirenvフックの初期化はchpwd
フックをサポートしていません。このページが表示されたときにプルリクエスト GH-514 がマージされていない場合。 eval "$(direnv hook zsh)"
をコメントアウトし、次のコードを使用してdirenv
にchpwd
を手動でフックしてください。
_if (( $+commands[direnv] )) && ! (( $+functions[_direnv_hook] )); then
_direnv_hook() {
eval "$(command "direnv" export zsh)";
}
typeset -agU precmd_functions;
if [[ -z ${precmd_functions[(r)_direnv_hook]} ]]; then
precmd_functions=( _direnv_hook ${precmd_functions[@]} )
fi
typeset -agU chpwd_functions;
if [[ -z ${chpwd_functions[(r)_direnv_hook]} ]]; then
chpwd_functions=( _direnv_hook ${chpwd_functions[@]} )
fi
fi
_