몇 가지 명백한 이유로 umask
하나의 특정 폴더에 대한 값 을 설정해야 합니다. 어떻게 할 수 있습니까?
미리 감사드립니다!
업데이트 1
특정 폴더에 umask를 사용해야하는 이유는 다음과 같습니다. 웹 응용 프로그램이 있으며 파일을 만들 때 기본 권한은 700입니다. 그러나 해당 파일에 대해 755 이상의 권한이 필요합니다. 문제를 더 명확하게 설명 할 수 있다고 생각합니다.
몇 가지 명백한 이유로 umask
하나의 특정 폴더에 대한 값 을 설정해야 합니다. 어떻게 할 수 있습니까?
미리 감사드립니다!
업데이트 1
특정 폴더에 umask를 사용해야하는 이유는 다음과 같습니다. 웹 응용 프로그램이 있으며 파일을 만들 때 기본 권한은 700입니다. 그러나 해당 파일에 대해 755 이상의 권한이 필요합니다. 문제를 더 명확하게 설명 할 수 있다고 생각합니다.
답변:
당신은 사용할 수 있습니다 setfacl
setfacl -d -m group:name:rwx /path/to/your/dir
name
그룹 이름은 어디에 있습니까
귀하 또는 특정 사용자가 속한 그룹을 찾으려면 유닉스 / 리눅스에서 명령 행을 통해 특정 사용자가 어떤 그룹에 속 하는지 어떻게 알 수 있습니까?
setfacl
바뀌었을 것입니다. -m
유효한 옵션이 아니라는 오류가 발생 합니다.
setfacl
은 바뀌지 않았습니다. 올바른 그룹 이름을 제공하지 않은 것 같습니다 ( -m
).
setfacl
에 대한 것이지 확실 하지 않습니다 umask
. 더 나은 해결책이지만 실제로 묻지 않은 것은 아닙니다.
sudo setfacl -Rdm ...
(재귀를 위해 R을 생략하십시오) 작동합니다. @ Wyatt8740 (올바른). 특정 실행하려면 : man setfacl
을 입력하십시오 /-modify
. 을 사용해야 sudo
합니다.
디렉토리 당 umask를 설정할 수 없으며 이는 프로세스 레벨 값입니다. 다른 사람이 디렉토리의 파일을 읽지 못하게하려면 해당 권한 비트를 취소하십시오.
예를 들어, /home/user/directory
프로세스에서 777과 같은 권한을 얻을 수있는 일부 파일과 디렉토리가있는 디렉토리의 경우 권한 비트를 /home/user/directory
700과 같이 설정하십시오 . 그러면 다른 사용자 (슈퍼 유저 루트 제외)가 다운 될 수 없습니다. 에서 /home/user/directory
.
편집증이고 권한 /home/user
을 750으로 설정하므로 홈 디렉토리에서 읽고 쓰거나 내릴 수 있습니다. 결과적 /home/user/Public
으로 다른 사람이 같은 폴더에 액세스 할 수는 없지만 그와 함께 살 수는 있습니다.
질문 업데이트 당 : 여전히, 당신은 파일 시스템에서 그것을 제어 할 수 없습니다 (강력하게 낙담 된 FAT와 같은 다른 파일 시스템 유형을 사용하는 것을 제외하고), 당신은 webapp에서 그렇게해야합니다. webapp가 PHP로 코딩 된 경우 다음 umask
함수를 사용하여 umask를 즉시 변경할 수 있습니다 .
<?php
umask(0022);
// other code
?>
데이터베이스 연결 암호가 포함 된 파일 (Wordpress와 같은 앱에서 생각)과 같은 구성 파일에이를 넣을 수 있습니다.
프로세스 값이며 일부 웹 서버에서는 구성 파일에서이를 설정할 수 있습니다. 그렇지 않으면 시작 스크립트를 수정하여 원하는 umask를 설정할 수 있습니다. 코드가 민감한 경우 모든 사람이 읽을 수 있는 권한 은 웹앱 755
과 유사 하고 644
매우 위험하다는 점을 기억하십시오 .
/home/user/Public
( mount -o bind /home/user/Public /some/other/place
)를 바인딩 할 수 있습니다 .
폴더의 권한을 변경하려면 chmod를 사용하십시오. umask는 파일 용입니다.
필요에 따라 umask를 설정하십시오.
umask xxx
완료되면 다시 변경
umask 022
umask
아님). 혼란스러운 정보를 추가하여 죄송합니다.
또 다른 해결책은 디렉토리에서 작성된 파일에 그룹 ID를 설정하는 것입니다. 그러면 파일을 작성한 사용자의 그룹 ID 대신 디렉토리 그룹 ID가 새 파일을 소유하게됩니다. 그래서 나는 당신이 할 수 있다고 생각합니다.
chown www-data:www-data /my/folder
chmod 4755 /my/folder
이렇게하면 setgid 특수 파일 권한이 설정되어 생성 된 모든 파일 /my/folder
이 www-data
그룹에서 소유하게되며 , 상위 디렉토리로 인해 rx (5) 권한이 있습니다.
쉘 후크 및로 구현 된 다른 솔루션을 제공하십시오 direnv
. setfacl
시스템에서 사용할 수없는 경우 다음 솔루션이 더 호환 될 수 있습니다 . (예 : macOS)
direnv
쉘의 환경 전환기입니다. 현재 디렉토리 에 따라 환경 변수 를로드하거나 언로드 하기 위해 bash, zsh, tcsh, fish shell 및 elvish에 연결하는 방법을 알고 있습니다.
사용 .envrc
에 대한 export
사용자 정의 umask
특정 해줄 가치, 그리고 export
당신이 그 디렉토리를 떠날 때 에드 ENV var에 언로드됩니다.
# 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
관련이 있지만이 경우 적용되지 않는 다음 클립은 다음과 같습니다 .zshrc
.
# Change the umask automatically for some directories; use 0022 as the default
chpwd () {
case $PWD in
$HOME/[Dd]ocuments*)
if [[ $(umask) -ne 077 ]]; then
umask 0077
echo -e "\033[01;32mumask: private \033[m"
fi;;
*/[Ww]eb*)
if [[ $(umask) -ne 072 ]]; then
umask 0072
echo -e "\033[01;33mumask: other readable \033[m"
fi;;
/vol/nothing)
if [[ $(umask) -ne 002 ]]; then
umask 0002
echo -e "\033[01;35mumask: group writable \033[m"
fi;;
*)
if [[ $(umask) -ne 022 ]]; then
umask 0022
echo -e "\033[01;31mumask: world readable \033[m"
fi;;
esac
}
따라서 대화식 사용의 경우 이와 같은 것이 작동하지만 분명히 보안을 제공하지는 않습니다.