Linux共通

Linuxコマンド「chown」「chmod」ファイルとディレクトリのアクセス権限について

今回はファイルやディレクトリに対するアクセス権限を利用し、必要なユーザ以外アクセスできない方法を紹介していきたいと思います。

ファイルやディレクトリにはアクセス権限が設定されており、特定のユーザやグループしかアクセスできないようになっております。

これは一般ユーザが管理者権限でのみ操作可能なファイルなどを編集させないようにしたりします。それらはすべてあらかじめ設定されており、またこれから作成するものもファイルやディレクトリの種類によってどの程度までのアクセス権限かユーザによって決めることができます。

本記事ではそういったアクセス権限に関して紹介していきたいと思います。

アクセス権限について

ファイルやディレクトリに対して思い通りにアクセス制御する際には適切な「ユーザとグループ」と「パーミッション」を設定する必要があります。

例としてファイルに特定のユーザのみアクセス可能とし、ディレクトリには特定のグループのみアクセス可能といった形したりできます。

それらを可能にするコマンドについては後ほど紹介していきます、

ユーザとグループについて

ユーザは必ず1つ以上のグループに所属します。ユーザが作成される際に1つ以上のグループには所属されていることになります。「groups」コマンドで所属しているグループがわかります。「groups」コマンドについては後ほど紹介します。

グループには1次グループと2次グループの2種類があります。2次グループは任意で設定することができます。

グループ 説明
1次グループ(必須) ログイン直後の作業グループです。ファイルやディレクトリを新規作成した際には、それを所有するグループとしてデフォルトで使用されます。
2次グループ(任意) 1次グループ以外のグループを割り当てることができ、必要に応じて利用します。複数の割り当ても可能ですので、特定のユーザに複数の権限を付与する際にに利用します。

自分の所属グループを表示するには「groups」コマンドを使用します。ユーザ名を指定しない場合は、コマンドを実行するユーザの所属グループを表示します。

mitsublog@mitsublog:~$ groups
mitsublog adm cdrom sudo dip plugdev lpadmin sambashare
mitsublog@mitsublog:~$

「mitsublog adm cdrom sudo dip plugdev lpadmin sambashare」という「mitsublog」は1次グループ、それ以外は2次グループとして所属しています。

chown:所有者ユーザの変更

「chown」コマンドはファイルやディレクトリの「ユーザとグループ」の所有者を変更することができます。特定のファイルは「user1」から「user2」に所有者を変更したい場合このコマンドを使用します。

chown:書式

chown [オプション] ユーザ名[.グループ名]

chown オプション

オプション 説明
-R オプションをつけてディレクトリを指定した場合は、サブディレクトリを含めて再起的にパーミッションが変更されます

所有者のみ変更するだけでなく、グループも合わせて変更する場合は、「chown」コマンドの引数に「変更後の所有者名.グループ名」と指定します。

グループ名の前には「.」もしくは「:」を指定します。「chown」コマンドでグループのみを変更する場合は、ユーザ名を指定せずに、「chown :グループ名 ファイル名」のように指定します。

ユーザ名変更

root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 0
-rw-rw-r-- 1 mitsublog mitsublog 0 7月 14 13:36 file1
-rw-rw-r-- 1 mitsublog mitsublog 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# chown user1 file1
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# chown user2 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire#
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 0
-rw-rw-r-- 1 user1 mitsublog 0 7月 14 13:36 file1
-rw-rw-r-- 1 user2 mitsublog 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire#

グループ名も変更したい場合は「.」または「:」つける必要があります。

root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 0
-rw-rw-r-- 1 user1 mitsublog 0 7月 14 13:36 file1
-rw-rw-r-- 1 user2 mitsublog 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# chown user1 file1
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# chown .group1 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 0
-rw-rw-r-- 1 user1 mitsublog 0 7月 14 13:36 file1
-rw-rw-r-- 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire#

groups:所属しているグループを表示

ログインしているユーザの所属グループが表示されます。

groups:書式

groups [ユーザ名]

mitsublog@mitsublog:~/デスクトップ/accessdire$ groups
mitsublog adm cdrom sudo dip plugdev lpadmin sambashare
mitsublog@mitsublog:~/デスクトップ/accessdire$

id:ログインしているユーザと所属しているグループを表示

自分がどのユーザでログインしているかわからないとき、またどのグループに属しているかわからないときはidコマンドで確認できます。

id:書式

id [オプション] [ユーザ名]

id:オプション

オプション 説明
-a 詳細な情報を表示できる

mitsublog@mitsublog:~/デスクトップ/accessdire$ id
uid=1000(mitsublog) gid=1000(mitsublog) groups=1000(mitsublog),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),121(lpadmin),132(sambashare)
mitsublog@mitsublog:~/デスクトップ/accessdire$ id -a
uid=1000(mitsublog) gid=1000(mitsublog) groups=1000(mitsublog),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),121(lpadmin),132(sambashare)
mitsublog@mitsublog:~/デスクトップ/accessdire$

このように所属するユーザやグループの情報が表示されます。

パーミッションの確認

ファイルやディレクトリには「誰に」「どこまでの操作」許可するのか、細かに設定できます。これを「パーミッション」と呼びます。設定されたパーミッションは「ls -l」コマンドで調べられます。

mitsublog@mitsublog:~/デスクトップ/accessdire$ ls -l
合計 0
-rw-rw-r-- 1 user1 mitsublog 0 7月 14 13:36 file1
-rw-rw-r-- 1 user2 group1 0 7月 14 13:36 file2
mitsublog@mitsublog:~/デスクトップ/accessdire$

 

パーミッション見方

Linuxで作成されるファイルやディレクトリにはパーミッション(アクセス権)が設定されます。これでユーザやグループごとに読み取り可能や、書き込み禁止といった設定ができます。

アクセス権には、以下の3種類があります。アクセス権の意味合いについて紹介していきます。

ファイルとディレクトリでは動作に若干違いがあるので、ご注意ください。

ファイルの種別を表す記号は「ファイル(-)」、「ディレクトリ(-d)」、「シンボリックリンク(-l)」があります。

アクセス権 表記 説明
読み取り r ファイルへの読み取りが可能。動作としてcatコマンドなどによるファイル閲覧。
書き込み w ファイルへの書き込みが可能。動作として内容の書き換え。
実行 x ファイルの実行が可能。シェルスクリプトなどによる実行ファイルの実行権限。

※ファイルへの読み取り権限や書き込み権限があっても、ディレクトリの実行権限がなければ移動できないし、実行できない。

アクセス権 表記 説明
読み取り r ディレクトリ内のファイルの読み取りが可能。
書き込み w ディレクトリ内の書き込みが可能。(新規ファイルの作成、ファイルの削除・変更)
実行 x ディレクトリ内のファイルのアクセスが可能になります。この権限がないとディレクトリ移動などできません。

 

よく使われるパーミッション

パーミッションをよく使用するパターンがあります。定番としては下記となります。

よく使用されるパターン 説明
--- どのユーザやグループも許可されていない。 chmod 000 file1
755 ユーザのみすべての権限、グループやその他のユーザは読み取りと実行のみ chmod 755 directory1
777 どのユーザも許可されている chmod 777 directory1
644 ユーザのみ読み取りと書き込み権限、、グループとその他のユーザは読み取り権限のみ。 chmod 644 file1

 

パーミッション変更について

chmod:パーミッション変更

「chmod」はファイルやディレクトリのパーミッションの変更します。

chmod:書式

数字とアルファベットによる指定の2パターンがあります。主に数字による指定を利用します。

①chmod [オプション] 権限 ファイル名

②chmod [オプション] 対象 定義 権限 対象ファイル

※①が数字による書式、②がアルファベットによる書式

chmod:オプション

オプション 説明
-R  ディレクトリを指定した場合、サブディレクトリ含めて再帰的にパーミッションが変更されます。

下記表は数字によるパーミッションの指定の際に用いる数字です。

数字(権限) 説明
4 読み取り
2 書き込み
1 実行

パーミッション変更について用いる記号について紹介していきます。

対象 説明
u 所有者
g グループ
o その他のユーザ
a すべてのユーザ
定義 説明
アクセス権の追加
- アクセス権の削除
アクセス権の指定
権限(モード) 説明
r 読み取り権限
w 書き込み権限
x 実行権限
s SUIDまたはSGID
t スティッキービット

※s,tに関しては本記事では説明は省かせていただきます。

下記のように「file1」をどのユーザからでもアクセスできるようにアクセス権を変更します。

root@mitsublog:/home/mitsublog/デスクトップ/accessdire# chmod 777 file1
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 0
-rwxrwxrwx 1 user1 mitsublog 0 7月 14 13:36 file1
-rw-rw-r-- 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire#

次に「accessdire」ディレクトリ内を自身のみアクセスできるようにします。

root@mitsublog:/home/mitsublog/デスクトップ# chmod -R 700 accessdire/
root@mitsublog:/home/mitsublog/デスクトップ# ls -l accessdire/
合計 0
-rwx------ 1 user1 mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ#

このようにユーザのアクセスのみ許可されます。

記号のを用いた場合

「file1」の「グループ」と「他のユーザ」の権限に「読み取り」「書き込み」「実行」の権限を付与します。

root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 4
drwx---r-x 3 user3 group3 4096 7月 14 21:16 directory1
-r-x------ 1 mitsublog mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# chmod go+rwx file1
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 4
drwx---r-x 3 user3 group3 4096 7月 14 21:16 directory1
-r-xrwxrwx 1 mitsublog mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire#

umask:デフォルトのパーミッション値を決める

ファイルやディレクトリ作成時におけるデフォルト値を設定するには「umask」コマンドを使用します。

「umask」コマンドを利用することでファイルやディレクトリを作成するごとにアクセス権を設定する必要はなく、作成時に決めることができます。

ユーザのデフォルトパーミッションはシェルに設定されたumask値で決まります。

「umask」コマンドを実行すると現在設定されてumask値を確認できます。

umask:書式

umask [値]

umask:値確認

現在の「umask」の値を確認するには「umask」コマンドを実行します。

一般ユーザの場合

mitsublog@mitsublog:~$ umask
0002
mitsublog@mitsublog:~$

管理者ユーザの場合

root@mitsublog:/home/mitsublog# umask
0022
root@mitsublog:/home/mitsublog#

実行例:活用例の紹介

「ユーザとグループ」と「パーミッション」を使用しいくつかの活用例として紹介していきたいと思います。

特定のユーザにのみファイルを操作

ユーザ「user1」にのみ「読み取り」「書き込み」「実行」の権限を与える設定をします。

root@mitsublog:/home/mitsublog/デスクトップ/accessdire# chmod 777 file1
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l file1
-rwxrwxrwx 1 user1 mitsublog 0 7月 14 13:36 file1
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# chmod 700 file1
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l file1
-rwx------ 1 user1 mitsublog 0 7月 14 13:36 file1
root@mitsublog:/home/mitsublog/デスクトップ/accessdire#

このように「user1」にのみすべての権限があたえられます。

特定のグループのみ操作可能

今回は「directory1」というディレクトリに対しては「root」グループのみアクセス可能の状態にします。

root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 4
drwxrwxrwx 2 root root 4096 7月 14 21:05 directory1
-rwx------ 1 user1 mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# chmod -R 070 directory1

root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 4
d---rwx--- 2 root root 4096 7月 14 21:05 directory1
-rwx------ 1 user1 mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire#

「root」グループに属するユーザのみすべての権限が与えられます。

ファイルへの書き込み制限の場合

書き込み権限がない場合下記のように「許可がありません」と表示されます。

mitsublog@mitsublog:~/デスクトップ/accessdire$ id
uid=1000(mitsublog) gid=1000(mitsublog) groups=1000(mitsublog),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),121(lpadmin),132(sambashare)
mitsublog@mitsublog:~/デスクトップ/accessdire$ ls -l
合計 4
d---rwx--- 2 root root 4096 7月 14 21:05 directory1
-r-x------ 1 user1 mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
mitsublog@mitsublog:~/デスクトップ/accessdire$ echo test >> file1
-bash: file1: 許可がありません
mitsublog@mitsublog:~/デスクトップ/accessdire$

ディレクトリの移動は実行権限(x)が必要

ディレクトリ間を移動するには「x」実行権限が必要です。「ls」 などの読み取りをするには「r」権限が必要です。つまりディレクトリ間の移動、移動後のディレクトリに何が入っているのか閲覧したい場合は「rx」のみ付与します。ファイルを追加したりなど書き込みが不要であれば「w」は不必要です。

下記のようにディレクトリ間の移動と読み取りのみ可能です。書き込みをしようとしていますが、ファイルを作成すると「許可がありません」と表示されます。

root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 4
drwx---r-x 3 root root 4096 7月 14 21:16 directory1
-r-x------ 1 user1 mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# exit
exit
mitsublog@mitsublog:~/デスクトップ/accessdire$ ls -l
合計 4
drwx---r-x 3 root root 4096 7月 14 21:16 directory1
-r-x------ 1 user1 mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
mitsublog@mitsublog:~/デスクトップ/accessdire$ cd directory1/
mitsublog@mitsublog:~/デスクトップ/accessdire/directory1$ ls -l
合計 4
drwx---r-x 2 root root 4096 7月 14 21:16 directory2
mitsublog@mitsublog:~/デスクトップ/accessdire/directory1$

mitsublog@mitsublog:~/デスクトップ/accessdire/directory1$ echo test >> file3
-bash: file3: 許可がありません
mitsublog@mitsublog:~/デスクトップ/accessdire/directory1$

chownによるユーザを変更する

ユーザ権限を持つユーザを変更する場合は「chown」を使用します。権限がないとがないと下記のようにはじかれます。

root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 4
drwx---r-x 3 root root 4096 7月 14 21:16 directory1
-r-x------ 1 user1 mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# sudo su mitsublog
mitsublog@mitsublog:~/デスクトップ/accessdire$ ls -l
合計 4
drwx---r-x 3 root root 4096 7月 14 21:16 directory1
-r-x------ 1 user1 mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
mitsublog@mitsublog:~/デスクトップ/accessdire$ cat file1
cat: file1: 許可がありません
mitsublog@mitsublog:~/デスクトップ/accessdire$

ユーザ権限を持つユーザを「mitsublog」に変更します。

所有者を「mitsublog」に変更

root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 4
drwx---r-x 3 root root 4096 7月 14 21:16 directory1
-r-x------ 1 user1 mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# chown mitsublog file1
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 4
drwx---r-x 3 root root 4096 7月 14 21:16 directory1
-r-x------ 1 mitsublog mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# exit
exit
mitsublog@mitsublog:~/デスクトップ/accessdire$ ls -l
合計 4
drwx---r-x 3 root root 4096 7月 14 21:16 directory1
-r-x------ 1 mitsublog mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
mitsublog@mitsublog:~/デスクトップ/accessdire$ cat file1
mitsublog@mitsublog:~/デスクトップ/accessdire$

アクセスできました。

chown -R:ディレクトリを含め再帰的にパーミッションを変更

特定のディレクトリ以下を再起的にユーザとグループを変更します。chownで「.」を指定した後にグループを指定するとグループ名もまとめて変更できます。

root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 4
drwx---r-x 3 root root 4096 7月 14 21:16 directory1
-r-x------ 1 mitsublog mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# chown -R user3.group3 directory1/
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# ls -l
合計 4
drwx---r-x 3 user3 group3 4096 7月 14 21:16 directory1
-r-x------ 1 mitsublog mitsublog 0 7月 14 13:36 file1
-rwx------ 1 user2 group1 0 7月 14 13:36 file2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire# cd directory1/
root@mitsublog:/home/mitsublog/デスクトップ/accessdire/directory1# ls -l
合計 4
drwx---r-x 2 user3 group3 4096 7月 14 21:16 directory2
root@mitsublog:/home/mitsublog/デスクトップ/accessdire/directory1#

まとめ

今回の記事は以上になります。

ファイルやディレクトリに対するアクセス権限はLinuxを扱う上で必須な知識となりますので、ぜひ覚えていってください。

それではまとめになります。

・ファイルやディレクトリに対して思い通りにアクセス制御する際には「ユーザとグループ」と「パーミッション」を設定する必要があります。

・コマンドは「chown」「chmod」を利用してアクセス制御を行う。

以上になります。当ブログではLinuxを含めた記事を執筆しております、興味がある方はぜひご覧ください。

  • この記事を書いた人
  • 最新記事

ミツ

サーバ初心者向け「server-beginner」を運営する「ミツ」と申します。 Linux系やwindows系などのサーバに関する部分をメインで執筆していきますので、興味ある方はぜひご覧いただけますと幸いです。 <経歴> 専門学校卒業後、ネットワーク、インフラ、プログラミングを一通り経験。 当メディアでは主にLinux分野に関する内容を発信していきます。

-Linux共通