ディレクトリまたはユーザーに別々のumaskを設定する方法は?

ディレクトリまたはユーザーに別々のumaskを設定する方法は?

ディレクトリまたはユーザーに対して別々のumaskが必要です。どうすればいいですか?

編集:私はDebian 6を使用しています。

私がこれをしたいのは、すべてのSFTPユーザーが書き込みグループを使用してファイルを生成したいからです。 umaskが正しく設定されているかどうかをテストするためにSFTPクライアントを使用しています。

答え1

ディレクトリの場合、Linux を使用する場合は、拡張 ACL とマスクを使用することが有効である可能性があります。

umask xxx各ユーザーの~/.profile

答え2

フォルダ内の特定のシステムグループのデフォルト権限を設定するには、この権限が必要です。そうですか?これを確認してください既存のスレッドこれを詳しく説明する同じ質問に。

答え3

修正する:申し訳ありません。私のソリューションはあなたの要件を満たしていません。次の回答は、umask他のユーザーが特定のディレクトリの下にあるように強制する管理者側ではなく、ユーザー側の要件のみを解決します。

別のソリューション実装を提供シェルフックそしてdirenv~のため特定のディレクトリsetfaclシステムで利用できない場合は、次の解決策がより互換性がある可能性があります。 (例:macOS)

direnvシェル環境スイッチャーです。 bash、zsh、tcsh、fish shell、elvishを接続してロードまたはロードする方法を知っています。削除する環境変数は次のように異なります。現在のディレクトリ

そのディレクトリを離れると、ed環境変数がアンロードされる特定のディレクトリのカスタム値です.envrcexportumaskexport

# 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

源泉:cwdベースの動的umask.md

関連情報