LPIC Level1 復習ラジオ 06:ユーザーと権限
音声
目次
Linuxのユーザーとグループ
Linuxは、複数の利用者が同じシステムを利用できるマルチユーザーOSです。
利用者ごとにユーザーアカウントを分け、ファイルの所有者や実行中のプロセスを区別します。これにより、ある利用者のファイルを別の利用者が勝手に変更することを防ぎやすくなります。
グループは、複数のユーザーをまとめて権限を与えるための仕組みです。例えば、同じ部署や同じ作業チームの利用者に、共通ディレクトリへのアクセス権を設定できます。
UIDとGID
UID
UIDは、User IDの略です。Linuxがユーザーを識別するための数値です。
画面上ではユーザー名を使いますが、カーネルやファイルシステムでは、基本的にUIDによって所有者を管理します。
GID
GIDは、Group IDの略です。Linuxがグループを識別するための数値です。
ユーザーには通常、主となるプライマリグループが一つあり、さらに複数の補助グループへ所属できます。
ユーザー情報を保存する主なファイル
| ファイル | 主な内容 |
|---|---|
/etc/passwd |
ユーザー名、UID、GID、ホームディレクトリ、ログインシェルなど |
/etc/shadow |
パスワードハッシュやパスワード有効期限に関する情報 |
/etc/group |
グループ名、GID、所属ユーザーなど |
/etc/passwdのパスワード欄にxが入っている場合、実際のパスワード情報は通常/etc/shadow側で管理されます。
id
id alice
getent passwd alice
getent group developers
idは、UID、プライマリGID、補助グループを確認するコマンドです。
getentは、ローカルファイルだけでなく、システムに設定された名前サービスを通してユーザーやグループ情報を取得できます。
rootとsudo
root
rootは、Linuxの管理者ユーザーです。通常、UIDは0です。
一般ユーザーでは実行できないシステム設定の変更、パッケージの導入、サービスの操作などを行えます。
強い権限を持つため、普段の作業を常にrootで行うと、入力ミスによる影響も大きくなります。
sudo
sudoは、設定されたポリシーに従って、別のユーザーとしてコマンドを実行するための仕組みです。対象を指定しなければ、通常はrootとして実行します。
sudo systemctl restart sshd
sudo -u alice id
sudo -l
sudo コマンド:通常はroot権限で、そのコマンドだけを実行するsudo -u ユーザー名 コマンド:指定したユーザーとして実行するsudo -l:現在のユーザーに許可されたsudo操作を確認する
sudoの設定は、主に/etc/sudoersや/etc/sudoers.d/で管理されます。編集するときは、構文確認を行うvisudoを利用します。
パーミッションの見方
ファイルやディレクトリには、所有者、所有グループ、その他のユーザーに対する権限が設定されています。
ls -l report.txt
-rw-r----- 1 alice developers 1200 Jul 11 10:00 report.txt
先頭の-rw-r-----を分解します。
| 位置 | 意味 | 例 |
|---|---|---|
| 1文字目 | ファイルの種類 | -は通常ファイル、dはディレクトリ |
| 2~4文字目 | 所有者の権限 | rw- |
| 5~7文字目 | 所有グループの権限 | r-- |
| 8~10文字目 | その他のユーザーの権限 | --- |
この例では、所有者aliceは読み書きでき、developersグループは読み取りだけでき、その他のユーザーはアクセスできません。
権限判定では、まず所有者に一致するか、次に対象グループに該当するか、それ以外かが確認されます。三つの権限を足し合わせて使うわけではありません。
rwxの意味
r、w、xは、ファイルとディレクトリで意味が少し異なります。
| 権限 | 通常ファイル | ディレクトリ |
|---|---|---|
r |
内容を読み取る | ディレクトリ内の名前一覧を読む |
w |
内容を書き換える | ファイル名などの項目を作成・削除する |
x |
プログラムとして実行する | 中へ移動し、配下の項目へアクセスする |
ディレクトリのxは、通過や検索の権限と考えると分かりやすくなります。ファイル名が分かっていても、親ディレクトリにxがなければ、そのファイルへ到達できません。
また、ファイルを削除できるかどうかは、ファイル自身のwだけではなく、主に親ディレクトリのwとxによって決まります。
chmod
chmodは、ファイルやディレクトリのモード、つまりパーミッションを変更するコマンドです。
記号で指定する
chmod u+x script.sh
chmod g-w report.txt
chmod o=r public.txt
| 記号 | 意味 |
|---|---|
u |
所有者 |
g |
所有グループ |
o |
その他のユーザー |
a |
すべて |
+ |
権限を追加する |
- |
権限を外す |
= |
指定した権限にそろえる |
数値で指定する
数値表記では、r=4、w=2、x=1として足し合わせます。
| 数値 | 権限 |
|---|---|
0 | --- |
1 | --x |
2 | -w- |
3 | -wx |
4 | r-- |
5 | r-x |
6 | rw- |
7 | rwx |
chmod 640 report.txt
chmod 755 script.sh
640は、所有者が読み書き、グループが読み取り、その他は権限なしです。
755は、所有者が読み書き実行、グループとその他が読み取り実行です。
chown
chownは、ファイルやディレクトリの所有者や所有グループを変更するコマンドです。
sudo chown alice report.txt
sudo chown alice:developers report.txt
sudo chown :developers report.txt
alice:所有者だけをaliceへ変更するalice:developers:所有者をalice、所有グループをdevelopersへ変更する:developers:所有グループだけをdevelopersへ変更する
所有グループだけを変更する場合は、chgrpも利用できます。
chgrp developers report.txt
一般ユーザーが自由に所有者を変更できると、ディスク使用量やアクセス制御を回避できる可能性があります。このため、所有者の変更には通常、管理者権限が必要です。
umask
umaskは、新しく作るファイルやディレクトリから、どの権限を外すかを指定するマスクです。
umask
umask -S
一般的な作成時の基準は、通常ファイルが666、ディレクトリが777です。通常ファイルには、最初から実行権限を付けないのが基本です。
umaskが022の場合、グループとその他の書き込み権限を外します。
| 対象 | 基準 | umask | 結果 |
|---|---|---|---|
| 通常ファイル | 666 |
022 |
644 |
| ディレクトリ | 777 |
022 |
755 |
学習上は引き算のように見える例が多いですが、正確には、umaskで立っているビットを作成時のモードから消します。
umaskは新規作成時に影響するもので、既存ファイルの権限を変更するものではありません。既存の権限はchmodで変更します。
SUID・SGID・Sticky Bit
通常のrwxに加えて、特殊なモードビットがあります。
SUID
SUIDは、Set User IDの略です。実行ファイルに設定すると、そのファイルを実行したプロセスが、ファイル所有者の実効UIDを使って動作します。
chmod u+s program
chmod 4755 program
ls -lでは、所有者の実行位置にsが表示されます。
SGID
SGIDは、Set Group IDの略です。実行ファイルに設定すると、実行時にファイル所有グループの実効GIDを使います。
ディレクトリに設定した場合、その中で新しく作成したファイルやディレクトリが、親ディレクトリのグループを引き継ぎやすくなります。共同作業用ディレクトリで利用されます。
chmod g+s shared
chmod 2775 shared
Sticky Bit
Sticky Bitをディレクトリに設定すると、書き込み可能な共有ディレクトリでも、原則として自分が所有するファイル以外を削除・名前変更できないようにします。
chmod +t shared
chmod 1777 shared
ls -ld /tmp
/tmpは、複数ユーザーが書き込める一方で他人のファイルを勝手に削除しにくくするため、通常Sticky Bitが設定されています。
| 特殊ビット | 数値 | 主な表示位置 | 主な用途 |
|---|---|---|---|
| SUID | 4 |
所有者のx位置にs |
所有者の実効UIDで実行 |
| SGID | 2 |
グループのx位置にs |
所有グループの実効GIDで実行、またはグループ継承 |
| Sticky Bit | 1 |
その他のx位置にt |
共有ディレクトリで他人の項目を削除しにくくする |
実行権限が付いていない位置に特殊ビットだけが設定されている場合、SやTの大文字で表示されます。
確認コマンド
ユーザーや権限を調べるときは、次の順番で確認すると整理しやすくなります。
whoami
id
groups
ls -l 対象
ls -ld ディレクトリ
stat 対象
namei -l /path/to/file
whoami:現在の実効ユーザー名を表示するid:UID、GID、所属グループを表示するgroups:所属グループを表示するls -l:所有者、所有グループ、パーミッションを確認するls -ld:ディレクトリ自身の情報を確認するstat:数値表記を含む詳しい属性を確認するnamei -l:パスの途中にある各ディレクトリの権限を確認する
「Permission denied」が出たときは、対象ファイルだけでなく、親ディレクトリのx、現在のUIDとGID、所有者と所有グループを順番に確認します。
詳しい使い方は、次のマニュアルでも確認できます。
man 5 passwd
man 5 group
man 8 sudo
man chmod
man chown
man 2 umask
man 7 inode
30秒チェック
- Linuxがユーザーとグループを識別する数値を、それぞれ何と呼ぶでしょうか。
- rootユーザーのUIDは通常いくつでしょうか。
chmod 640 fileでは、所有者、グループ、その他にどの権限が設定されるでしょうか。- ディレクトリの
xは、主に何を許可する権限でしょうか。 - umaskが
022の場合、通常ファイルとディレクトリは一般に何の権限で作られるでしょうか。 - 共有ディレクトリで、他人のファイルを削除しにくくする特殊ビットは何でしょうか。
答えを表示
- UIDとGID
0- 所有者は読み書き、グループは読み取り、その他は権限なし
- ディレクトリを通過し、配下の項目へアクセスする権限
- 通常ファイルは
644、ディレクトリは755 - Sticky Bit
要約
- LinuxはUIDとGIDを使ってユーザーとグループを識別します。
- ユーザー情報は主に
/etc/passwd、パスワード情報は/etc/shadow、グループ情報は/etc/groupで管理されます。 - rootは通常UID 0の管理者ユーザーで、sudoは許可された操作を別ユーザーとして実行する仕組みです。
- パーミッションは、所有者、所有グループ、その他の三つに分かれます。
r、w、xは、通常ファイルとディレクトリで意味が異なります。chmodは権限、chownは所有者や所有グループを変更します。- umaskは、新規作成時に外す権限を指定します。
- SUID、SGID、Sticky Bitは、通常のrwxに追加される特殊なモードビットです。
- 権限エラーでは、現在のUID・GID、対象の所有者、パーミッション、親ディレクトリのxを順番に確認します。