(Linuxの基本)ファイル・ディレクトリのアクセス許可属性

1.ファイルのオーナー

(1)ユーザとグループ

予備知識として、ユーザやグループを確認する方法を調べてみた。

▶どんなユーザがいるのか

$ cat /etc/passwd

root:x:0:0:root:/root:/bin/bash
(以下略)

見方は、ユーザ名:暗号化されたパスワード:ユーザID:ユーザグループID:ホームディレクトリ:ユーザが使用するシェル

▶ ユーザの所属するグループは?

$ groups user

root bin daemon sys adm disk wheel log

 ▶そのグループに所属するユーザは

$ getent group group名

root:x:0:root

(2)すべてのファイル(ディレクトリ)には所有者と所有グループがある(誰のものか?)

  シンボリックモード
所有者 u
グループ g
その他のユーザ o
すべて a( =u+g+o  )

2.許可属性(パーミッション)

(1)ファイル、ディレクトリには、各ユーザ、グループ、その他の者にそれに応じた許可(権限)属性がついている。

アクセス権 ファイル ディレクトリ
r 4 読み込み ディレクトリ内の一覧
w 2 変更(書き込み) ディレクトリ内にサブディレクトリを作成(削除)、ファイルの作成(削除)
x 1 実行 ディレクトリにアクセス許可
0 不許可 不許可

▶例1 ファイルの読み込みを行うには、ディレクトリのアクセスできて、かつファイル自体の読み込みが許可されている必要がある。

dr-x(ディレクトリでr-x)かつ r(ファイルでr)

(8進数標記ではディレクトリは500番台、ファイルは400番台)

▶例2

ファイルの改漏をを防止するには、ディレクトリにアクセスさえないこととファイル自体の変更を不許可にしなければならない(すなわち、ユーザのみに変更を許すということを意味する)。

drwx——(ディレクトリでrwx)かつrwx——(ファイルでrwx)

(8進数標記では700)

3.ファイルのオーナーとグループの変更

$ sudo chown http:http  ~/data.txt

書式は、 chown 新所有者:新グループ 変更するファイル(ディレクトリ)

4.パーミッションの変更

▶シンボリックモード

$ chmod  +x ~/data.txt

書式は、 chmod +-= rwx   変更するファイル(ディレクトリ)

+ は 与える

–  は 剥奪する

= は 指定する

▶8進数モード

$ chomd 644 ~/data.txt

書式は、chmod 所有者の8進数グループの8進数その他の8進数 変更するファイル(ディレクトリ)となります。

上の644は(4+2)(4)(4)の意味で、所有者は読み書き、グループ、その他は読み取りのみを意味します。

5.デフォルトのパーミッション

あるユーザがファイルを作成すると、そのパーミッションは644となる。

$ touch ~/test.txt

$ ls -al ~/test.txt

-rw-r--r-- 1 user名 group名 0 Oct 19 14:55 /home/user名/test.txt

これを決めているのは、umask というコマンドだ。

標準では、

$ umask

0022

 これは、666(ファイルの場合。ディレクトリの場合は777)から、許可するパーミッションの8進数644(ここではグループとその他には読み込みのみ)を引いて出た数字です。

 わかりにくい場合は S オプションをつけるとよい。

$ umask -S ← シンボリックモード表示オプション

u=rwx,g=rx,o=rx

上記の数字を変更すれば デフォルトの値を変更できる。

$ umask 027

$ touch ~/testx.txt

$ ls -al ~/test.txt

-rw-r----- 1 user名 group名 0 Oct 19 15:18 /home/user/test2.txt
↑
グループには読み込みのみ。その他には一切の権限を与えていない。

6.共有ディレクトリーの設定

(1)一般的には、ディレクトリーを同一グループに属させ、グループに対して書き込み許可を与えるよう設定するが、各人が作成したファイルの所有者とグループは、プライマリーグループになる。だから所有とグループが各人ごとに異なってくる。同一のグループに属させようとしても、いちいち管理者がファイルの属性を変更しなければなくなり、共有ディレクトリの旨味が無くなってしまう。

これを防止するため、「setgid」というフラグ(旗印)をつけて、親ディレクトリのグループを承継させる 方法を取る。

(2)作成方法

# テスト用にpublic というディレクトリーを作成

$ mkdir public

$ ls -al

drwxr-xr-x  2 作成者名 作成者の属するグループ名   4096 Oct 19 15:53  public

# この時点でファイルを作るとファイルは作成者のグループになってしまうのでsetgidフラグを立てる。

自由にできるグループを作成していないので、すでにあるftpグループを使用して、ディレクトリのグループにsetgidフラグを立てる。

$ sudo chgrp ftp public

$ sudo chmod g+s public

(フラグを立てる書式は chmod g+s ディレクトリ名)

$ ls -ld public

drwxr-sr-x 2 所有者名 ftp 4096 Oct 19 15:53 public
↑
グループが所有者の属するグループからftpに変更された。
グループのアクセス権に「s」が入っている。

$ touch ~/public/test.txt

$ ls -al ~/public/test.txt 

-rw-r--r-- 1 user名 ftp 0 Oct 19 16:00 /home/user/public/test.txt
↑
作成されたファイルのグループはftpに属している。

 # おまけ 最後にテスト用のディレクトリは消去しておいた。

$ sudo rm -r public

コメント

タイトルとURLをコピーしました