パーミッション
環境:CentOS Linux release 8.1.1911 (Core)
ファイルやディレクトリのパーミッションはchmodコマンドで変更するょ。
シンボリックモード
◎文字、記号で設定する。
パーミッション | |
r | 読み取り |
w | 書き込み |
x | 実行 |
ユーザ | |
u | 所有者 |
g | グループ |
o | その他 |
a | 全てのユーザ |
設定 | |
+ | 許可 |
– | 許可削除 |
= | 許可設定 |
$ chmod u+rwx,a+rx smp.txt
$ ls -l
-rwxrwxr-x 1 yumidon yumidon 78 Sep 7 16:53 smp.txt
オクタルモード
◎8進数の数値を用いて変更する。
ユーザ | グループ | その他 |
rwx | rw- | r– |
4+2+1 | 4+2+0 | 4+0+0 |
7 | 6 | 4 |
パーミッション | 数値 |
読み取り(r) | 4 |
書き込み(w) | 2 |
実行権(x) | 1 |
権限無し | 0 |
$ chmod 775 test3.txt
$ ls -l
-rwxrwxr-x. 1 hoge hoge 43 9月 26 11:25 test3.txt
デフォルトのパーミッション
ユーザがファイルやディレクトリを作成する時のデフォルトアクセス権の値は、マスク値で決まる!
現在のマスク値を確認する。
rootで実行
▼シンボリックモードで表示
# umask -S
u=rwx,g=rx,o=rx
▼オクタルモードで表示
# umask -p
umask 0022
ユーザで実行
$ umask -S
u=rwx,g=rwx,o=rx
$ umask -p
umask 0002
↑ 設定値を4桁で表示する。
※2~4桁目が「所有者」「グループ」「その他」のパーミッション!
※1桁目→0(ゼロ)ファイル、ディレクトリ、2→SGID、4→SUID
umask 002の場合
ファイル | ディレクトリ | |
初期パーミッション | 666 rw- rw- rw- | 777 rwx rwx rwx |
umask値 | 002 — — -w- | 002 — — -w- |
デフォルトパーミッション | 664 rw- rw- r– | 775 rwx rwx r-x |
初期のパーミッションからumask値を削除したのがデフォルトのパーミッションになる(*^^*)
例えば、umask を027に変更したらどうなる?
$ umask 027
$ umask -p
umask 0027
ファイルを作ってみる。
$ touch test.txt
$ ls -l
-rw-r----- 1 hoge hoge 0 Sep 27 15:31 test.txt
ディレクトリを作ってみる。
$ mkdir smpdir
$ ls -l
drwxr-x--- 2 hoge hoge 4096 Sep 27 15:43 smpdir
umask 027の場合
ファイル | ディレクトリ | |
初期パーミッション | 666 rw- rw- rw- | 777 rwx rwx rwx |
umask値 | 027 — -w- rwx | 027 — -w- rwx |
デフォルトパーミッション | 640 rw- r– — | 750 rwx r-x — |
ファイルの場合、umask 026でもデフォルトパーミンションは、640になる(^-^;
$ umask 026
$ umask -p
umask 0026
$ touch test2.txt
$ ls -l
-rw-r----- 1 hoge hoge 0 Sep 27 16:07 test2.txt
-rw-r----- 1 hoge hoge 0 Sep 27 15:31 test.txt
※umaskコマンドで変更した値は、変更したシェルと、その子プロセスのみ有効!ログインしなおすともとの値に戻ります。
umaskの設定ファイルは?
/etc/profile
# cat /etc/profile
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
/etc/bashrc
# By default, we want umask to get set. This sets it for non-login shell.
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
SHELL=/bin/bash
# Only display echos from profile.d scripts if we are no login shell
# and interactive - otherwise just process them to set envvars
for i in /etc/profile.d/*.sh; do
if [ -r "$i" ]; then
if [ "$PS1" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
unset i
unset -f pathmunge
fi
fi
# vim:ts=4:sw=4
/etc/csh.cshrc
# /etc/cshrc
#
# csh configuration for all shell invocations.
# By default, we want this to get set.
# Even for non-interactive, non-login shells.
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if ($uid > 199 && "`id -gn`" == "`id -un`") then
umask 002
else
umask 022
endif
if ($?prompt) then
if ($?tcsh) then
set promptchars='$#'
set prompt='[%n@%m %c]%# '
# make completion work better by default
set autolist
else
set prompt=\[$user@`hostname -s`\]\$\
endif
endif