📚

Linuxのユーザー、ユーザー権限周りまとめ

2024/11/01に公開

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

参考文献

主にこちらを参考にまとめました。

https://linuc.org/study/column/3609/
https://www.infraexpert.com/infra/linux31.html

Discussion