いくつかの明らかな理由によりumask
、特定の1つのフォルダーに値を設定する必要があります。どうすればそれができますか?
事前に感謝します!
更新1
特定のフォルダーにumaskを使用する必要がある理由は次のとおりです。Webアプリケーションがあり、ファイルを作成するときのデフォルトのアクセス許可は700です。しかし、そのファイルには少なくとも755のアクセス許可が必要です。問題をより明確に説明できると思います。
いくつかの明らかな理由によりumask
、特定の1つのフォルダーに値を設定する必要があります。どうすればそれができますか?
事前に感謝します!
更新1
特定のフォルダーにumaskを使用する必要がある理由は次のとおりです。Webアプリケーションがあり、ファイルを作成するときのデフォルトのアクセス許可は700です。しかし、そのファイルには少なくとも755のアクセス許可が必要です。問題をより明確に説明できると思います。
回答:
あなたが使うことができます setfacl
setfacl -d -m group:name:rwx /path/to/your/dir
name
グループ名はどこですか
自分または特定のユーザーが属しているグループを見つけるには、unix / linuxでコマンドラインを使用して特定のユーザーがどのグループに属しているかをどのように確認しますか?
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のような別のファイルシステムタイプを使用することを強くお勧めします)。Webアプリケーションでそれを行う必要があります。WebアプリケーションがPHPでコーディングされている場合、次のumask
関数を使用してその場でumaskを変更できます。
<?php
umask(0022);
// other code
?>
データベース接続パスワードを含むファイルのような設定ファイルにこれを置くことができます(Wordpressのようなアプリで考えてください)。
これはプロセス値であり、一部のWebサーバーでは設定ファイルで設定できることを忘れないでください。そうでない場合は、起動スクリプトを変更して目的の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
します。そのディレクトリを離れると、ed env varはアンロードされます。export
umask
export
# 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
}
したがって、インタラクティブな使用では、そのようなものが機能します(ただし、セキュリティを提供しないことは明らかです)。