디렉토리 또는 사용자에 대해 별도의 umask를 설정하는 방법은 무엇입니까?

디렉토리 또는 사용자에 대해 별도의 umask를 설정하는 방법은 무엇입니까?

디렉토리나 사용자에 대해 별도의 umask를 원합니다. 어떻게 해야 하나요?

편집: 저는 데비안 6을 사용하고 있습니다.

내가 이렇게 하고 싶은 이유는 모든 SFTP 사용자가 쓰기 그룹을 사용하여 파일을 생성하기를 원하기 때문입니다. umask가 올바르게 설정되었는지 테스트하기 위해 SFTP 클라이언트를 사용하고 있습니다.

답변1

디렉터리의 경우 Linux를 사용하는 경우 확장 ACL 및 마스크를 사용하는 것이 효과적일 수 있습니다.

umask xxx각 사용자 의 ~/.profile.

답변2

폴더의 특정 시스템 그룹에 대한 기본 권한을 설정하려면 이 권한이 필요합니다. 그렇죠? 이것을 확인하세요기존 스레드이것을 자세히 설명하는 동일한 질문에.

답변3

고쳐 쓰다: 죄송합니다. 내 솔루션이 귀하의 요구 사항을 충족하지 않습니다. 다음 답변은 umask다른 사용자를 특정 디렉터리 아래에 있도록 강제하는 관리자 측이 아닌 사용자 측의 요구 사항만 해결합니다 .

또 다른 솔루션 구현 제공쉘 후크그리고direnv~을 위한특정 디렉토리. setfacl시스템에서 사용할 수 없는 경우 다음 솔루션이 더 호환될 수 있습니다. (예: macOS)

direnv쉘 환경 전환기입니다. bash, zsh, tcsh, fish shell 및 elvish를 연결하여 로드하거나 로드하는 방법을 알고 있습니다.제거하다환경 변수는 다음에 따라 달라집니다.현재 디렉터리.

해당 디렉토리를 떠날 때 ed 환경 변수가 언로드되는 특정 디렉토리에 대한 사용자 정의 값입니다 .envrc.exportumaskexport

# 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

관련 정보