所有者を変える
ファイル・ディレクトリの所有者は簡単に変えることができます。
これは、ちょっと私にはショッキングな出来事です。簡単に変えれるんですから・・・
sudo chown 新しい所有者 所有権を変えるパス
で変えることができます。
この chown というコマンド change file owner and group の略です。
ファイルモード
ファイル・ディレクトリはファイルモードという情報を持っています。
ファイルモードは、パーミッション(アクセス権)と特殊なアクセス権3つ(SUID、SGID、stickyビット)の4つの情報からなっています。
パーミッション(アクセス権)
パーミッションはコマンド ls -l ファイルパス の結果で確認出来ます。
以下の例で説明します。
-rw-rw-r–(1) 1(2) guest(3) guest(4) 162(5) 2月 15 16:12(6) test(7)
概容は次のようになっています。
(1)パーミッション
(2)リンク数(ファイルへのハードリンク数)
(3)所有者
(4)所有グループ
(5)ファイルサイズ
(6)更新日時
(7)ファイル名
パーミッション
すべてのファイル・ディレクトリにはパーミッション(アクセス権)が設定できます。
アクセス権には、読み取り(read)、書き込み(write)、実行(execute)の3種類があります。
このアクセス権は、ファイルとディレクトリで意味合いが異なっています。
以下の表のようになっています。
パーミッション |
ファイル |
ディレクトリ |
読取権限 |
ファイルを読み取ることができるか |
ディレクトリ内のファイル、サブディレクトリをリスト表示できるか |
書込権限 |
ファイルを変更できるか |
ディレクトリ内でファイル・サブディレクトリを作成あるいは削除できるか |
実行権限 |
ファイルを実行できるか |
cdコマンドでそのディレクトリに移動できるか |
パーミッションの記号表記(シンボリックモード)
上の例だとパーミッションが -rw-rw-r–となっていますが
ひと桁目の-はファイルの種類を表しています。
-:通常ファイル d:ディレクトリ l:シンボリックリンク
以下 rw- rw- r– の3つにわけられ、
それぞれ
所有者のパーミッション
所有グループのパーミッション
所有者でもなく所有グループでもないその他のアカウント(以下その他と表記)のパーミッション
を意味します。
ここでは、それぞれ
所有者のパーミッションは、
r:読取権限あり w:書込権限あり -:実行権限なし
所有グループのパーミッションは、
r:読取権限あり w:書込権限あり -:実行権限なし
その他のパーミッションは、
r:読取権限あり -:書込権限なし -:実行権限なし
を意味しています。
パーミッションの指定方法
chmod(change file mode bits)コマンドを使用することにより、パーミッションの変更が可能です。
「記号表記(シンボリックモード)による指定方法」、「数値による指定方法」の2つがあります。
記号表記(シンボリックモード)による指定方法
chown コマンド を使い
chown アカウント 演算子 パーミッションの記号表記 ファイルパス の形で使います
(ここで、大事なのはアカウント、演算子、記号表記の間にはスペースを入れないこと)
例えば chown o+r fairu
では、その他に読込権限を付加しています。
アカウントには
u;ユーザー
g:グループ
o:その他
a:すべて。u,g,oすべてを選択
省略:aを指定していることと同じ。※umaskで設定のパーミッションは変化しないので注意。
の意味を持ちます
演算子は
+ :アクセス権を与える
- :アクセス権を削除する
= :指定したアクセス権にする
の機能を持ちます。
パーミッションの記号表記は
r w x -
を選んで指定します。
また chown u=rwx,g+w,o=r– fairu
のようにカンマで区切って同時に指定することも出来ます。
数値による指定方法
シンボリックモードのパーミッションは下記のように、8進数の数字で表すことが出来ます。
r 読取権限 4
w 書込権限 2
x 実行権限 1
– 権限なし 0
例えば、ファイルtestのアクセス権が「-rw-rw-r–」だった場合、数値(8進数)で表してみると、
所有者(rw-)→4+2+0=6
所有グループ(rw-)→4+2+0=6
その他のユーザー(r–)→4+0+0=4
664となります。
これを”755″に変更するには
chmod 755 test
とします。
変更対象がディレクトリの場合、オプションに「-R」をつけるだけで、そのディレクトリの
配下のファイル、ディレクトリのパーミッションが一気に変更されます。
パーミッションの間違いやすい2つのポイント
1.ファイルの削除権は、ディレクトリの書き込み権限による!
ファイルだけに、書き込み権限を制限しても、属するディレクトリの書き込み権が制限されていなければ削除されてしまいます。
2.シンボリックリンクのパーミッションは常にrwxrwxrwxだが・・・・・
シンボリックリンクのパーミッションは、常にリンク先のパーミッションに依存します。
ls -lで表示されるものとは違います。単にパスの情報を持ったファイルといえどもリンク先と同じパーミッションが適用されます。
特殊なアクセス権
SUID(Set User ID)
通常、実行ファイルを実行すると、そのファイルを実行したユーザーの権限で実行されますが、SUID(Set User ID)が設定されたファイルでは、その実行ファイルの所有者のアカウント権限で実行されます。
例として、passwdコマンドがあります。
パラメータなしでpasswdコマンドを実行して、他のユーザーのパスワードを変更できるのはこのためです。
passwdコマンドのパーミッションを確認してみます。
user@Dimension-2400C:~$ find / -name “passwd” -type f 2> /dev/null
/usr/share/bash-completion/completions/passwd
/usr/share/lintian/overrides/passwd
/usr/bin/passwd
/etc/passwd
/etc/cron.daily/passwd
/etc/pam.d/passwd
上のfindコマンドの -type オプションで、検索するファイルの種類を指定しています。
選択できる種類は
b … ブロックデバイス
c … キャラクタデバイス
d … ディレクトリ
p … 名前付きパイプ
f … ファイル
l … シンボリックリンク
s … ソケット
となっています。
2> /dev/null は、標準エラー出力を捨てるという意味です。
コマンドが入っているのはbinディレクトリなので、/usr/bin/passwdになります。
ls -l で情報を調べてみます。
上のようにパーミッションが -rwsr-xr-x となっていて 所有者の実行権がsと特殊なものになっていて、SUIDが設定されていることを意味しています。また、ファイル名も赤背景/白文字になっています。これもまた、SUIDがセットされていることを示しています。
SUID(Set User ID)の設定
chmod u+s ファイルパス で設定できます。
chmod u-s ファイルパス で削除できます。
数値モードで設定するには、パーミッション値に4000を足します。
例えば、パーミッション値が755の場合、
chmod 4755 ファイルパス で設定できます。
SUIDが設定されているファイルの検索
SUIDが設定されているファイルを検索してみます
root@Dimension-2400C:/# find / -perm -4000 -user root 2> /dev/null
/sbin/mount.cifs
/usr/sbin/userhelper
/usr/sbin/pppd
/usr/lib/snapd/snap-confine
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/i386-linux-gnu/opera/opera_sandbox
/usr/lib/i386-linux-gnu/oxide-qt/chrome-sandbox
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/pkexec
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/sudo
/usr/bin/chfn
/bin/su
/bin/ntfs-3g
/bin/fusermount
/bin/ping6
/bin/ping
/bin/mount
/bin/umount
SUIDはできるだけ設定しない
SUIDの設定された、実行ファイルは、設計が悪ければ、セキュリティー上の穴となりやすくなります。安易な設定は避けるべきです。
SGID(Set Group ID)
実行ファイルにSGID(Set Group ID)が設定されている場合は、その実行ファイルを実行すると、実行ファイルの所有グループの権限でファイルが実行されます。
ディレクトリにSGID(Set Group ID)が設定されている場合は、そのディレクトリ配下に作成されたファイル・ディレクトリの所有グループが、SGID(Set Group ID)を設定されたディレクトリの所有グループと同じものになります。
SGID(Set Group ID)を設定
chmod g+s ファイルパス
削除は
chmod g-s ファイルパス
数値モードでアクセス権を設定する場合には、数値に2000を足します。
スティッキービット(Sticky Bit)
スティッキービット(Sticky Bit)とは、ディレクトリに設定される特殊なアクセス権の事です。
スティッキービット(Sticky Bit)が設定されたディレクトリでは、すべてのユーザーがファイル・ディレクトリを書き込めますが、所有者だけ(rootは除く)しか削除できなくなります。
/tmp ディレクトリは、スティッキービット(Sticky Bit)が設定されています
スティッキービット(Sticky Bit)が設定されていると、実行権部分が「t」と表示されます。
スティッキービットの設定方法
chmod o+t ディレクトリパス
削除は
chmod o-t ディレクトリパス です
数値モードでの設定は、アクセス権に、1000を足します。
デフォルトのパーミッションと謎
ユーザーがOSにログインするとumaskという値が割り当てられます。
ファイルの場合パーミッション666からumask値を引いたものがデフォルトのパーミッションになります。ディレクトリの場合、パーミッション777からumask値を引いたものがデフォルトのパーミッションになります。
それでは、実際にホームディレクトリにtestというフォルダを作成して、確認してみます。
umask値は、umask(set file mode creation mask)コマンドで確認出来ます。
user@Dimension-2400C:~$ umask
0002
user@Dimension-2400C:~$ mkdir test
user@Dimension-2400C:~$ ls -l
合計 520
-rw-rw-r– 1 user user 282265 5月 9 23:47 2017-05-09-234730_1360x768_scrot.png
-rw-rw-r– 1 user user 176370 5月 11 06:47 2017-05-11-064702_1360x768_scrot.png
drwxr-xr-x 2 user user 4096 5月 8 00:12 Desktop
drwxr-xr-x 3 user user 4096 5月 14 09:20 Documents
drwxr-xr-x 3 user user 4096 5月 13 19:39 Downloads
drwx—— 3 user user 4096 5月 13 19:42 Dropbox
drwxr-xr-x 2 user user 4096 5月 13 10:06 Music
drwxr-xr-x 2 user user 4096 5月 10 22:20 Pictures
drwxr-xr-x 2 user user 4096 5月 3 14:17 Public
drwxr-xr-x 2 user user 4096 5月 3 14:17 Templates
drwxr-xr-x 2 user user 4096 5月 3 14:17 Videos
drwxrwxr-x 2 user user 4096 5月 6 09:59 delorio_video
-rw-r–r– 1 user user 8980 5月 3 11:37 examples.desktop
-rw-rw-r– 1 user user 11092 5月 7 22:57 fairu .odt
drwxrwxr-x 2 user user 4096 5月 14 09:34 test
user@Dimension-2400C:~$ cd ./test
user@Dimension-2400C:~/test$ mkdir test
user@Dimension-2400C:~/test$ ls -l
合計 4
drwxrwxr-x 2 user user 4096 5月 14 09:36 test
user@Dimension-2400C:~/test$ cd ./test
user@Dimension-2400C:~/test/test$ mkdir test
user@Dimension-2400C:~/test/test$ ls -l
合計 4
drwxrwxr-x 2 user user 4096 5月 14 09:37 test
user@Dimension-2400C:~/test/test$ cd ./test
user@Dimension-2400C:~/test/test/test$ mkdir test
user@Dimension-2400C:~/test/test/test$ ls -l
合計 4
drwxrwxr-x 2 user user 4096 5月 14 09:39 test
user@Dimension-2400C:~/test/test/test$ cd ./test
user@Dimension-2400C:~/test/test/test/test$ mkdir test
user@Dimension-2400C:~/test/test/test/test$ ls -l
合計 4
drwxrwxr-x 2 user user 4096 5月 14 09:41 test
user@Dimension-2400C:~/test/test/test/test$
上の例では、ホームディレクトリ配下に/test/test/test/testというディレクトリを作成してパーミッションを確認しています。どれも、777-0002 = 775(rwxrwxr-x)になっています。
なぜ、そのようなことをするか説明します。
先日、新たにユーザを追加して、現在は新しいユーザーでログインして使用しているのですが、前に使っていたユーザーのMusicフォルダの音楽を、新しいユーザにコピーしてこようとして、Musicフォルダの孫フォルダを開こうとすると、権限がなく開けないという現象が起こったためです。実際、フォルダを作ったのはGUI上の操作でしたのでそちらで検証してみます。
結果
user@Dimension-2400C:~$ ls -l /home/user/test/test/test
合計 4
drwxrwxr-x 2 user user 4096 5月 14 10:06 test
ちゃんと理論通り、775になっています。
デフォルトパーミッションの謎については、今後も調査していきます。