web-dev-qa-db-ja.com

特定のディレクトリにumaskを設定できますか?

かなり制限されたumask設定(0077)があります。これは問題ありませんが、そのディレクトリの下に作成されたすべてのファイルに対して、より寛容な設定(0002)が必要なディレクトリが1つあります。特定のディレクトリにumaskを設定して、その下に作成されたすべてのファイルが同じアクセス許可を継承するようにする方法はありますか?

8
mipadi

ACLを使用する

setfacl -d -m mask:002/your/dir/here /

http://man-wiki.net/index.php/1:setfacl

ログインのデフォルトを設定したい場合は、.bashrc(または使用するシェル)に「umask002」を追加するだけです。その環境でログインした場合、すべての新しいdirはこれを使用します。

6
bshea

シェルフックおよび direnv で実装された別のソリューションを提供します。システムでsetfaclが使用できない場合は、次のソリューションの方が互換性が高い可能性があります。 (例:macOS)

direnvは、シェルの環境スイッチャーです。 に応じて、bash、zsh、tcsh、fish Shell、elvishにフックしてロードまたはアンロード環境変数を作成する方法を知っています。カレントディレクトリ

特定のディレクトリに_.envrc_からexportカスタムumask値を使用すると、そのディレクトリを離れるとexported 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)"をコメントアウトし、次のコードを使用してdirenvchpwdを手動でフックしてください。

_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
_

ソース: dynamic-umask-based-on-cwd.md

0
Simba