Linuxのユーザー、ユーザー権限周りまとめ
Linuxのユーザーについて
42のセキュリティ系の課題でLinuxのユーザーに関していろいろ触る機会があったのでまとめました。
LinuxはマルチユーザーなOS
Linuxは「マルチユーザー」と呼ばれるOSです。
これは1台のマシン上で動作しているLinuxのシステムを、複数のユーザーが同時に利用できるという意味です。同時に実行できるということは、1台のマシンでバックエンドでタスクを実行しながら、別の作業をしたり、SSHでログインして作業をしたりできるということです。
Point: Linuxはマルチユーザー、マルチプロセスのOSです。
特権ユーザー
Linuxシステムのすべてをコントロールできるユーザー。システムの設定の変更も可能。
一般ユーザー
許可された範囲内でのみ操作が可能なユーザー。
suコマンド
ユーザーrootとして各種操作を行うには、最初からrootユーザーでログインするか、suコマンドを使ってrootユーザーに切り替える必要があります。
# suコマンドを使ってrootユーザーに切り替える
su
Password: (rootのパスワードを入力)
# suコマンドを使って特定のユーザーに切り替える
su ユーザー名
# そのユーザーでログインし直したのと同じ挙動をさせるオプション
su -
suコマンドは「substitute」、「替える」という意味の単語から取られています。「switch user」の頭文字を取ったと言われることもあります。
sudoコマンド
引数に指定したコマンドを、指定したユーザー権限で実行するコマンドです。
ログが残るので、セキュリティの観点からもsudoコマンドを使うことが推奨されています。
sudo command
特定のユーザーに対して制限なくsudoを使えるようにしたり、特定のコマンドのみsudoを使えるようにしたりすることができます。
sudoersファイル
sudoコマンドの設定は/etc/sudoersファイルに記述されています。
visudoコマンドを使って編集します。rootユーザーでもエディタなどで編集することはできません。
# 特権ユーザーに対して制限なくsudoを使えるようにする
root ALL=(ALL:ALL) ALL
# %はグループを指定する
%admin ALL=(ALL) ALL
# 特定のユーザーに対して特定のコマンドのみsudoを使えるようにする
# 以下の例では、usersグループのユーザーに対して、localhost(ホスト名)でのみshutdownコマンドを実行できるようにしている
%users localhost=/sbin/shutdown -h now
# See sudoers(5) for more information on "#include" directives:
ユーザーとグループ
Linuxのアクセス権は、ユーザーそのものと、そのユーザーが所属するグループ、そしてそれ以外のユーザーの3種類に区別されます。グループは、所属しているすべてのユーザーに対してまとめてアクセス権を与えるために使われます。
ユーザーは、かならず1つのグループに所属します。さらに複数のサブグループにかけもちで所属することができます。
idコマンド
ユーザーが所属しているグループを表示するコマンドです。
id
uid=2000(level00) gid=2000(level00) groups=2000(level00),100(users)
uid: ユーザーID
gid: グループID
groups: 所属しているグループID
2000(level00)はユーザーIDとグループIDです。100(users)はサブグループです。
ファイルに対するアクセス
ファイルとユーザーとの関係
Linuxのファイルには、所有者(u)、所有グループ(g)、その他のユーザー(o)の3つのアクセス権があります。
-rwxr-xr-x 1 root root 340 Aug 30 2015 ..
-r-x------ 1 level03 level03 220 Apr 3 2012 .bash_logout
-r-x------ 1 level03 level03 3518 Aug 30 2015 .bashrc
-rwsr-sr-x 1 flag03 level03 8627 Mar 5 2016 level03
-r-x------ 1 level03 level03 675 Apr 3 2012 .profile
- 1列目: ファイルの種類とアクセス権
- ファイルの種類
-
- : 通常ファイル
- d : ディレクトリ
- l : シンボリックリンク
-
- アクセス権
- r : 読み込み
- w : 書き込み
- x : 実行
- s : SUID/SGID
- 3つのグループに分かれている
- 所有者: ファイルを作成したユーザー
- 所属グループ: ファイルを作成したユーザーが所属しているグループ
- その他のユーザー: その他のユーザー
- ファイルの種類
- 2列目: ハードリンク数
- 3列目: ファイル所有者
- ファイルの所有者は、ファイルを作成したユーザーです
- 4列目: ファイルの所属グループ
- ファイルの所属グループは、ファイルを作成したユーザーが所属しているグループです
- ファイルの所属グループは、ファイルのアクセス権を変更できます
- 5列目: ファイルサイズ
- 6列目: 最終更新日時
- 7列目: ファイル名
ファイルのアクセス権
- ファイルからの読み出し (r)
- ファイルへの書き込み (w)
- ファイルをプログラムとして実行する (x)
- SUID (s in owner権限位置)
- プログラム実行時、実行者は一時的にファイル所有者の権限で実行できます
- SGID (s in group権限位置)
- プログラム実行時、実行者は一時的にファイルのグループの権限で実行できます
SUID(Set User ID)とSGID(Set Group ID)
SUIDとSGIDは、ファイルの実行時に、実行者に一時的にファイル所有者やファイルのグループの権限を与える機能です。SUIDが設定されているファイルは実行権限が「s」と表記されます。
level00@SnowCrash:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 41284 Sep 13 2012 /usr/bin/passwd
ファイルのアクセス権の変更
chmodコマンドを使ってファイルのアクセス権を変更できます。
# 所有者に読み込み権限を与える
chmod u+r file
# グループに読み込み権限を与える
chmod g+r file
# その他のユーザーに読み込み権限を与える
chmod o+r file
# 数字での指定
chmod 644 file
実ユーザーと実効ユーザーについて
プログラムを実行したユーザーと、そのユーザーが所属しているグループのことを「実ユーザー」といいます。
sudoコマンドのように、実行したユーザーと異なるユーザーで実行される場合、そのユーザーのことを「実効ユーザー」といいます。sudoコマンドを使うと、実行ユーザーはrootユーザーになります。
実効ユーザーの確認方法
# 実効ユーザーの確認
level00@SnowCrash:~$ ps -u
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
level00 1873 0.0 0.1 9596 5936 tty1 S+ 11:14 0:00 -bash
level00 30699 0.0 0.1 9588 5976 pts/1 Ss 16:27 0:00 -bash
level00 30906 0.0 0.0 4936 1148 pts/1 R+ 16:58 0:00 ps -u
参考文献
主にこちらを参考にまとめました。
Discussion