パーミッション管理-chmod
確認
ls -l
-rw-r--r-- 1 root root 38 10月 14 09:44 test.txt
もしくは
stat test.txt
File: test.txt
Size: 38 Blocks: 8 IO Block: 4096 通常ファイル
Device: fd00h/64768d Inode: 33583486 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-10-14 09:46:16.000000000 +0900
Modify: 2023-10-14 09:44:59.000000000 +0900
Change: 2023-10-14 11:13:50.341510281 +0900
Birth: -
-rw-r--r--が0644と同じことを指していますが、具体的な考え方が↓となる
rwxの値が↓となり、一つ目の[-]がファイルの種類を表示されているので、パーミッションには関係ないため、ここでは無視
読み取り:r:4
書き込み:w:2
実行:x:1
---が二進法であり、001が1、010が2、100が4なので、xが1、wが2、rが4となります。
一つ目の「-」を除いて、「-」が3つごとで「所有者」、「所有グループ」、「その他ユーザ」の考え方です。
上記「-rw-r--r--」の場合:
「rw-」:「r+w」=「4+2」= 6
「r--」:「r」=「4」= 4
「r--」:「r」=「4」= 4
なので、「-rw-r--r--」が644となります。
変更(chmod)
chmodでの変更が数字とアルファベット2つ方法があります。
数字
「-rw-r--r--」に実行権限(x)を付けたい場合
chmod 755 test.txt
「-rw-r--r--」からその他ユーザの読み取り権限を削除したい場合
chmod 640 test.txt
アルファベット
「対象」「操作」「パーミッション」
対象:
u:所有者
g:所有グループ
o:その他
a:上記のすべて
操作:
+:付ける
-:削除
=:にする
「-rw-r--r--」に実行権限(x)を付けたい場合
chmod a+x test.txt
「-rw-r--r--」からその他の読み取り権限を削除したい場合
chmod o-r test.txt
[,]を付けって、複数条件が書けます。
例:
「-rw-r--r--」に所有者に実行権限をつけて、所有グループの権限をrwにし、その他の読み取り権限を削除する。
chmod u+x,g=rw,o-r test.txt
また、-Rを付けることで、再帰的に変更することもできます。
「/var/tmp」配下の全ファイル、ディレクトリに対して、その他のアクセス権限を削除する。
chmod -R o= /var/tmp
umask
新しいファイル、ディレクトリを作る時のパーミッションはどうするのがumaskで管理する。
(ファイルの実行権限はumaskeでつけられない)
umask -Sで確認できる。
例:
umask -S
u=rwx,g=rx,o=rx
デフォルトの設定ファイル場所: /etc/profile
下記の処理で各ユーザのumaskを設定している。
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
ユーザIDが199より大きく、/usr/bin/id -gn(所有グループ)と/usr/bin/id -un(ユーザ名)が同じの場合、はumaskを002にする。
上記以外の場合、umaskを022にする。
(useraddの場合は、ユーザIDが1000となる)
umaskが002場合:
ファイル:777-002=775、775-111=664(-rw-rw-r--)
ディレクトリ:777-002=775(drwxrwxr-x)
022場合:
ファイル:777-022=755、755-111=644(-rw-r--r--)
ディレクトリ:777-022=755(drwxr-xr-x)
umask自体がumaskコマンドで変更できますが、ログアウトやOS再起動とかで設定が消えてしまうため、ユーザのホームディレクトリ配下の「.bash_profile」ファイルに追記した方がいいでしょう。