【Linux】パーミションとは?設定や変更方法/chmodコマンドの使い方
この記事からわかること
- Linux:パーミション(アクセス権)とは?
- パーミションの設定/変更方法
- chmodコマンドなどの使い方
- umaskコマンドでデフォルトのパーミションを変更する
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
パーミション(アクセス権限)とは?
Linuxを始めとするOS(オペレーティングシステム)では複数のユーザーを登録(マルチユーザーシステム)できるため、ユーザーに対してファイルにアクセスできる制限を設けることが重要になってきます。
パーミションとはまさしくファイルに対して付与する、ユーザーに対してのアクセス権限のことです。読み取りのみ許可したり、書き込みも許可したりと設定を変更することで予期せぬユーザーからの変更や削除を防ぐことができるようになります。
Linuxにおけるユーザーの管理
Linuxにおいてもマルチユーザーシステムを導入しているため複数のユーザーを作成可能です。作成されているユーザーは「管理者ユーザー(スーパーユーザー)」と「一般ユーザー」に分かれます。
管理者ユーザー(スーパーユーザー)とは
管理者ユーザー(スーパーユーザー)は「root」という名前で最初から登録されており、システムやソフトウェア、ファイルに対して自由に設定、変更、操作できる強い権限を付与されているユーザーです。またファイルに対して付与されるパーミション(アクセス権)を無視して実行できてしまうため基本的な操作は一般ユーザーを作成して行うのが定石です。
一般ユーザーとは
一般ユーザーは1つのOSに対して何個でも作成可能なユーザーです。家族で使う場合など1つのPCに複数アカウントを作っているのがまさしく複数のユーザーを登録していることになります。
一般ユーザーはGUIでもCUIでも作成可能です。「ユーザー名」と「パスワード」を登録すれば作成でき、自動で/home/user名
のディレクトリが作成されます。GUIでもデスクトップ部分がまさしくuser名ディレクトリ
の中の領域になります。
├── Home
│ ├── ame
│ ├── Documents
│ ├── Public
│ ├── Movies
│ ├── vendor
│ ├── Applications
│ ├── Downloads
│ └── Desktop
│ ├── taro
│ ├── Documents
│ ├── :
│ └── Desktop
│ └── yuki
│ ├── Documents
│ ├── :
│ └── Desktop
CUI操作でのユーザ作成方法
CUIでユーザーを新規作成する場合は管理者ユーザー(スーパーユーザー)でなければ実行できません。
$ su - // スーパーユーザーに切り替え
Password: // スーパーユーザーのパス入力
# useradd ユーザ名 // ユーザー作成
# passwd ユーザ名 // ユーザーパスワード設定
# exit // 一般ユーザーに戻る
作成しているユーザーを確認したい時は管理者ユーザー(スーパーユーザー)でログイン後ls /home
で表示させることができます。
$ su - // スーパーユーザーに切り替え
Password: // スーパーユーザーのパス入力
# ls /home // ユーザーを確認
ame taro yuki
ユーザー(所有者)とグループ
ユーザ名ディレクトリ配下はそのユーザーが「所有者」のファイルやディレクトリになります。なので作成したファイルは基本読み取り、書き込み、実行が可能になります。
また一般ユーザーはグループにまとめて管理することもできます。ユーザー作成時は自動でユーザー名と同名のグループ(グループだけど1人だけ)が作成され所属することになります。グループも新規作成やユーザーの追加などが行えます。自分がどこのグループに属しているかはユーザー情報を取得できるid
コマンドで確認できます。
$ id
uid=501(ame) gid=20(ame) groups=20(ame) ...
uid
とgid
はユーザーとグループに自動で付与される固有のidです。
所有者ではないユーザー(一般ユーザー)は「その他のユーザー」として扱われます。スーパーユーザーはこれに属しません。
要点
- パーミションとはアクセス権のこと
- マルチユーザーシステムの場合に必須
- 管理者(スーパー)ユーザーはパーミションを無視
- 一般ユーザーは複数作成可能
- ユーザーごとに/home/ユーザ名のディレクトリが作成される
- ユーザ名ディレクトリ配下はそのユーザーが所有者
- 作成時にユーザ名のグループに自動で所属
- グループごとにもパーミションを設定できる
パーミションの表示方法
ファイルにかけられているパーミションを確認するにはls
コマンドのオプション-l
で確認できます。
$ ls -l
-rwxr-xr-x 4 user staff 128 3 4 21:15 sample.txt
パーミションは左端の先頭を除いたrwxr-xr-x
部分に表示されます。先頭部分はファイル種別を表しています。
- rwx r-x r-x
ファイル種別 所有者 グループ その他のユーザー
表示は3つずつのブロックに分かれており左から「所有者」「グループ」「その他のユーザー」のアクセス権限を表しています。
パーミションの表示形態
パーミションの種類
- 読み取り権:r(Read)
- 書き込み権:w(Write)
- 実行権:x(eXecute)
パーミションは上記の3つの種類に分かれそれぞれ記号で表されrwx
の順番に左から対応しています。付与されていない場合は「-
」で表示されます。
r-- : 読み取り権のみ
r-x : 読み取り/実行
rw- : 読み取り/書き込み
rwx : 読み取り/書き込み/実行
上記のような権限をブロック(所有者/グループ/その他)ごとに指定されているのでrwxr-xr-x
のような長い文字列になります。
数値で指定するパーミション
また記号ではなく数値で表すことも可能で、ls
の確認時ではなく後述するchmod
コマンドの引数に使う場合に使用することができます。
- 読み取り権:4
- 書き込み権:2
- 実行権:1
4 : 読み取り権のみ
5 : 読み取り/実行
6 : 読み取り/書き込み
7 : 読み取り/書き込み/実行
数値の場合も3つのブロックごとに順番に対応します。755や600などと言った3桁の数値で指定(表示)します。
パーミションを変更するchmodコマンド
パーミション指定(変更)するのはchmod
コマンド(change mode)の役割です。
$ chmod [-R] アクセス権 ファイル名/ディレクトリ名
オプション-R
を指定すると引数に指定したディレクトリだけでなくその配下のファイル全てのアクセス権を変更できます。
アクセス権は先ほど説明した数値(755や600など)で指定するのが一番直感的で分かりやすいです。
$ chmod 755 sample.txt
もちろん記号形式でも変更できますが記号の場合は「変更対象」「変更」「アクセス権(rwx)」の3つを指定します。
変更対象
記号 | 概要 |
---|---|
u | 所有者 |
g | グループ |
o | その他のユーザー |
a | 全てのユーザー |
変更
記号 | 概要 |
---|---|
+ | 追加 |
- | 削除 |
= | 指定 |
$ chmod g+w sample.txt
複数の記号を連ねることでまとめて指定すること可能です。
$ chmod ug-wx sample.txt
umaskコマンド:アクセス権のデフォルト値を設定する
ファイルやディレクトリを新規作成する時はumask
コマンドで定義されている値に基づいてパーミションが自動設定されています。umask
の値を変更すればファイル作成時に自動設定されるパーミションを任意の値に変更することが可能になります。
デフォルトのumask値を確認する
$ umask
022
umask値は3桁(または4桁)の数値でこれ自体がパーミションを表している訳ではありません。ファイルなら「666」、ディレクトリなら「777」からumask値を引いた値がパーミションとして設定されます。例えば上記の通りumask値が「022」なら新規作成時のパーミションはファイルが「644」、ディレクトリが「755」で自動で設定されます。
// ファイルのアクセス権
-rw-r--r-- 1 usr staff 0 4 28 06:20 sample.txt
// ディレクトリのアクセス権
drwxr-xr-x 28 usr staff 896 4 28 06:20 laravel
umask
コマンドの引数に数値を渡せばumask値を変更できます。ユーザーごとに設定されているので変更しても影響があるのは自身のみです。
umask値を変更する
// 変更
$ umask 002
// 確認
$ umask
002
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。