はじめに
今回はLInuxのパーミッションについて学んだことをまとめていきたいと思います!
パーミッションの理解には
- ファイルオーナー
- グループ
- パーミッション
- スーパーユーザ
について知る必要があるので順番に解説していきます!
ファイルオーナーとは?
Linux で扱われるすべてのファイルには、**所有者(ファイルオーナー)**が設定されています。ファイルのオーナーは、ファイルへのアクセス権限(パーミッション)を自由に設定することができます。
所有者の確認方法
ls -l
コマンドを使用すると、ファイルやディレクトリの所有者(オーナー)を確認できます。
ls -l
drwxr-xr-x@ 12 [所有者] [グループ] 384 Sep 10 08:41 memos
上記の[所有者]の部分にファイルオーナー名が表示されます。
グループとは?
グループとは、複数のユーザをまとめた集合のことです。例えば、複数のユーザを「groupA」というグループに所属させ、そのグループに対してアクセス権限を付与することで、同じ役割を持つユーザに一括して権限を設定することができます。
drwxr-xr-x@ 12 [所有者] [グループ] 384 Sep 10 08:41 memos
さっきのls -l
の例でいうと上記の[グループ]の部分にグループ名が表示されます。
パーミッションとは?
パーミッションとは、誰に対してどのような操作を許可するかを定義する情報のことです。
ls -l
コマンドの結果の先頭に表示される3文字ごとのブロックは、ファイルのパーミッションを表しています。
パーミッションの構造
drwxr-xr-x@ 12 [所有者] [グループ] 384 Sep 10 08:41 memos
例えば上記の例だといかの 意味になります
-
ファイル種別:
-
d
はディレクトリを表します(-
ならファイル、l
ならシンボリックリンク)
-
-
パーミッション:
- 所有者(オーナー):
rwx
→ 読み取り・書き込み・実行のすべてを許可。 - グループ:
r-x
→ 読み取りと実行を許可、書き込みは不可。 - その他ユーザ:
r-x
→ 読み取りと実行を許可、書き込みは不可。
- 所有者(オーナー):
パーミッションの文字の意味
-
r
: 読み取り権限 (Read) -
w
: 書き込み権限 (Write) -
x
: 実行権限 (Execute)
パーミッションの設定方法
chmod
コマンド
パーミッションは、ファイルオーナーもしくはスーパーユーザのみ変更することができます。chmod
コマンドには2つの指定方法があって シンボルモードと数値モードがあります
シンボルモードでの指定
chmod [ugoa][+-=][rwx] [ファイル名]
記号 | 意味 |
---|---|
u | オーナー |
g | グループ |
o | その他ユーザ |
a | ugo すべて |
演算子の意味
記号 | 意味 |
---|---|
+ | 権限を追加 |
- | 権限を取り除く |
= | 権限を指定通りにする |
例:
- オーナーの書き込み権限を追加:
chmod u+w hoge.txt
- その他ユーザの実行権限を禁止:
chmod o-x hoge.txt
- グループとその他ユーザに読み取り権限を付与:
chmod go=r hoge.txt
数値モードでの指定
chmod [8進数の数値] [ファイル名]
各権限の数値対応表
記号 | 数値 |
---|---|
r (読み取り) | 4 |
w (書き込み) | 2 |
x (実行) | 1 |
例:
パーミッション rwxr-xr-x
を指定する場合、以下のように数値で表します。
- 所有者:
rwx
→4+2+1 = 7
- グループ:
r-x
→4+1 = 5
- その他ユーザ:
r-x
→4+1 = 5
この場合、chmod 755 ファイル名
で設定できます。
こう見ると数値モードの方が短くかけて使い勝手が良さそうですね笑
スーパーユーザとは?
スーパーユーザは、管理者権限を持つ特別なユーザです。
通常は root
ユーザとも呼ばれます
システム全体にアクセスできるため、本来削除ができないように権限が制御されているファイルも削除することもできてしまいます。そういったファイルを消すとLinuxシステムが壊れてしまったりするので注意が必要です。
スーパーユーザができること
- システム設定の変更
- ファイルやディレクトリのアクセス権限の変更
- すべてのファイルに対する読み込み・書き込み・削除・実行
スーパーユーザになる方法
su
コマンド
スーパーユーザになるには、su
コマンドを使用します。
su
-
オプションを付けると、スーパーユーザの環境が初期化されます!
つまりログインしているユーザの環境変数とか引き継がずにできるということです
su -
スーパーユーザの環境に入ると、プロンプトが $
から #
に変わります(ただし設定で変えられていたりすると異なる場合がある)
スーパーユーザを終了する
スーパーユーザ状態を終了するには、exit
コマンドを使います。
exit
sudo
コマンド
sudo
の使い方
sudo
は、1つのコマンドに対してスーパーユーザの権限で実行する際に使用します。
sudo [コマンド名]
sudo
と su
の違い
-
su
: スーパーユーザのセッションが続くため、コマンドを複数連続して実行できる。 -
sudo
: 指定した1つのコマンドのみスーパーユーザ権限で実行し、その後は一般ユーザに戻る。
sudoers
ファイル
/etc/sudoers
ファイルを編集することで、誰がどのコマンドを実行できるかを管理します。
例:
hoge ALL=(ALL) ALL
この設定は、hoge
ユーザがすべてのコマンドを実行できることを示します。
sudoers ファイルの編集
sudoers
ファイルを編集する際は、visudo
コマンドを使用することが推奨されるようですvisudo
を使用することで、ファイル保存前に文法チェックが行われ、安全に編集ができます。
使わないと、文法がおかしくても設定を上書きされてしまいます。
visudo
を使ったとしても文法チェックでエラーがでたときにQ
を入力してしまうと誤りがあっても強制的に保存されてしまうため注意がいるようです。
sudo visudo
ただ、そもそもsudoersファイルなどは編集しない方が良いみたいですね。
間違った設定とかしてしまうと再度スーパーユーザになれなくなってしまうこともあるみたいなので
su と sudo どちらを使うべきか?
- 基本的には
sudo
を使用する方が安全なようです。
理由はシンプルにsu
コマンドを使用するとスーパーユーザの状態が長く続くため、誤操作のリスクが高まるからですね。 - ただし、
sudo
がデフォルトで使用できない環境や、設定が難しい場合にはsu
を使用することもあるみたいです。
まとめ
以上Linuxのパーミッションについてでした。
例えばsshキーとか作る時、適切な権限をファイルに付与したりする理由とか、今まで何となくしか理解してなかった権限や設定について理解できたように思います。
参考書籍