ユーザ、グループ管理とアクセス権管理(3章)

ファイル、パーミッション、ユーザ

ユーザ、グループ、パーミッションの関係


コンピュータのOSには、ユーザ、グループ、パーミッションという概念があります。これらは、個別の機能として提供さ
れていますが、連携して動作しています。

  • ユーザ
  • ユーザは、OSやアプリケーションが、ユーザを区別するための機能で、一般的にはユーザ名とパスワードの組み
    合わせによって表現されます。
    これは、個人を識別することによってユーザごとの個人環境を提供したり、そのユーザに許可された範囲での操
    作やファイルへのアクセスをさせるためです。
    ユーザ名やパスワードなどの「ユーザアカウント」情報は、ローカルに登録する方法と、サーバで集中管理する方
    法があります。一般的に、企業ではサーバで集中管理する方法を採用していますが、本演習では各Linux仮
    想マシンの中に保存されているユーザを管理する方法を学習します。

  • スーパーユーザー
  •   Linuxをインストールすると、すべての権限を持ち、すべての操作が実行できるスーパーユーザーが root という
      ユーザ名で作成されます。rootのパスワードは、Linuxのインストール時に指定します。

  • パーミッション(アクセス権)
  •   どのユーザが、「どのファイルやディレクトリ」に「どの程度アクセス」できるかを決定するための機能です。
      通常は、ファイルやディレクトリを作成したユーザが「オーナー(所有者)」となり、そのファイルやディレクトリの
      パーミッションを設定できます。
      すべての権限を持つスーパーユーザ(root)はすべてのファイルやディレクトリのパーミッションを変更できます。

  • グループ
  •   ユーザーをひとまとめにして扱うための機能がグループです。たとえば、ユーザに個別にパーミッションを設定すると、
      人事異動などで役割が変更になった時に、パーミッションの割り当てをし直す必要があります。これでは管理が
      大変になるので、ユーザをグループにまとめて、グループにパーミッションを与えるようにします。この場合は、グルー
      プ内のユーザを入れ替えれば良く、パーミッションの割り当て直しは不要になります(詳しくは後述します)。

スーパーユーザとsuコマンド


スーパーユーザとは、管理者権限を持つ特別なユーザのことで、Linuxのインストール時に rootという名前のスー
パーユーザが自動的に作成されます。
スーパーユーザ rootは、あらゆる操作が許可された、強い権限を持つユーザーなので、通常は一般ユーザーでロ
グインしてさまざまな操作を行い、必要な時にだけスーパーユーザーに切り替えて操作を行うことが推奨されていま
す。

このとき、ユーザを切り替えるのがsuコマンドです。
suコマンドには以下のような使い方があります。

  • スーパーユーザに切り替える(プロンプトが#に変わります)
  •   $ su
      #

  • 指定したユーザ(以下の例ではyamaguchi)に切り替える
  •   $ su yamaguchi 

  • 切り替えたユーザから元のユーザに戻す
  •   $ exit
      または
      # exit

ユーザの作成(参考)



Linuxでのユーザの作成方法を確認します(ユーザは、何人作成しても構いません)。

1. スーパーユーザに切り替えます(パスワードはroot)。
  $ su

2. ユーザyamaguchiを作成します(yamaguchiは、ご自分の名前などに自由に変えてください)。
  # useradd yamaguchi

3. セキュリティのため、ユーザーyamaguchiの初期パスワードを設定します。
  # passwd yamaguchi
  新しいパスワード:abc1234   ※この文字列は画面には表示されませんが入力は認識されています
  よくないパスワード: このパスワードは辞書チェックに失敗しました。 - 単純/系統的すぎます
  新しいパスワードを再入力してください:abc1234   ※同じ文字列を入力します。
  passwd: すべての認証トークンが正しく更新できました。

  パスワードは単純なためにLinuxのセキュリティチェックで警告されますが、rootユーザは警告を無視してセキュリティ違反の単純
  なパスワードも設定できてしまいます
(実際にはこのようなことは推奨されていません)

4. yamaguchiの設定を確認します
  # id yamaguchi

5. スーパーユーザから元のユーザに戻ります。
  # exit

6. yamaguchiユーザに切り替え(パスワードは abc1234 )
  $ su yamaguchi

7. 現在のユーザの情報を確認します。
  $ id

8. user01に戻ります。
  $ exit ※ yamaguchiからuser01に戻ります

オーナーとパーミッション


LinuxやWindowsなどのコンピュータで使用しているOSは、ファイルやディレクトリを「パーミッション(アクセス
権)」という機能で保護しており、すべてのファイルやディレクトリにオーナーとアクセス権限が設定されています。

オーナー(owner)は、ファイルやディレクトリの「所有者」のことです。
オーナーは所有しているファイルやディレクトリに自由にアクセスでき、パーミッションも自由に変更できます。

WindowsやLinuxでは、ファイルやディレクトリを作成すると、作成者が自動的にオーナーになります。
ファイルを作成し、ファイルのオーナーが誰になっているかを確認します。

1. idコマンドで、現在のユーザを確認します。以下の例では、user01であることを前提にしています。
  $ id
  uid=1000(user01) gid=1000(user01) groups=1000(user01)

2. ホームディレクトリにtouchコマンドでファイルを作成し、オーナーを確認します。
  $ cd
  $ touch owner
  $ ls -l owner

  -rw-rw-r– 1 user01 user01 0 12月 21 20:44 owner
         ↑ここに注目します。オーナーはファイルを作成したユーザ(user01)であることがわかります。

3. ls –l コマンドで、ルートディレクトリのサブディレクトリやファイルのオーナーを確認します。
  Linuxインストール時に作成されたディレクトリやファイルは、オーナーがrootになっていることが確認できます。
  $ ls -l /
  合計 32
  lrwxrwxrwx.  1 root root  7 1月 14 2016 bin -> usr/bin
  dr-xr-xr-x.  4 root root 4096 2月 3 2016 boot
  drwxr-xr-x  20 root root 3180 1月 24 19:57 dev
  drwxr-xr-x. 132 root root 8192 1月 26 18:13 etc
  (以下省略)

オーナーの変更(参考)


人事異動になるユーザが作成したファイルのオーナーを、後任のuser01に変更する例を通じて、オーナーの変更方法
を確認します。
この方法は元のオーナーのユーザアカウントを削除してしまい、オーナーが不在になってしまった場合などにも利用できま
す。

1. yamaguchiユーザに切り替えます(パスワードは abc1234)。
  $ su yamaguchi

2. カレントディレクトリを/usr/tmp/に変更します。
  $ cd /usr/tmp/

3. 確認用ファイルown1を作成します。
  $ touch own1

4. own1の現在のオーナーを確認します。
  $ ls -l own1
  - rw- r-- r-- 1 yamaguchi yamaguchi 0 X月 XX XX:XX own1

5. rootユーザに切り替えます(パスワードは root)。
  $ su

6. オーナーユーザとグループを変更します。
  # chown –v user01:user01 own1
  *-vコマンドは、どんな場合でも実行状況を表示するコマンド、使わなくてもよい

7. own1の現在のオーナーを確認します。
  # ls -l own1
  - rw- r-- r-- 1 user01 user01 0 X月 XX XX:XX own1

8. 元のユーザであるuser01に戻ります。
  # exit ※yamaguchiに戻ります
  $ exit ※user01に戻ります

グループ


グループは、ユーザをまとめて扱うための機能です。
ユーザーは同時に複数のグループに所属できます。たとえば、yamadaというユーザは、salesグループと
managersグループというグループに所属できます。
Linuxでは、どのユーザも、最低1つのグループに所属しています。最初に所属するグループは、ユーザを新規作成
するときに指定します。ユーザーの新規作成時に所属するグループを指定しない場合は、自動的にユーザー名と
同じグループが作成され、そのグループに自動的に所属します。

groupsコマンドやidコマンドで、現在自分が所属しているグループの名前を確認できます。

1. 端末を開きます。以下は、user01としてログインしているときの例です。

2. idコマンドを実行します。
  $ id
  uid=1000(user01) gid=1000(user01) groups=1000(user01)

3. groupsコマンドを実行します。
  $ groups
  user01

idコマンドでは、uidやgidなどのLinux内部でユーザを区別するときのID番号も表示されます(uidやgidは、ユー
ザやグループを新規作成するときに、自動的にLinuxが割り当てます)。

グループの作成(参考)


たとえば、sales(営業部)グループを作成し、ユーザyamaguchiを追加する例を通じて、グループの作成や編
集方法を確認しましょう。

1. スーパーユーザに切り替えます(パスワードはroot)。
  $ su

2. salesグループを作成します。
  # groupadd sales

3. yamaguchiをsalesグループに追加します。成功すると、「ユーザ ○○ をグループ ×× に追加」というメッ
セージが表示されます。
  # gpasswd -a yamaguchi sales
  ユーザ yamaguchi をグループ sales に追加

4. yamaguchiの所属グループを確認します。yamaguchiがデフォルトのグループyamaguchiに加え、sales
  グループにも所属していることがわかります。
  # groups yamaguchi
  yamaguchi : yamaguchi sales

5. 元のユーザに戻ります。
# exit

=======================
OnePoint
グループ
グループは、ファイルやディレクトリへのパーミッションの割り当てを簡単にし、管理しやすくするための手段です。何の
ためにグループを作成、管理するのか?を意識しながら作業を進めましょう。
=======================

ファイルのパーミッション


パーミッション(permission)とはアクセス権のことで、「誰に、どのような操作を許可するか」という権限を設定
する機能です。ファイルやディレクトリごとに定義された「保護モード」のことを指します。
パーミッションを適切に設定することで、ファイルやディレクトリを勝手に削除されたり、ファイルの内容を書き換えられ
たり、などのトラブルを防止できます。

Linuxのパーミッション機能では、「読み(read)」、「書き(write)」、「実行(execute)」の3種類が、「所
有者(owner)」、「グループ(group)」、「その他(other)」に対して個別に指定されます。

ホームディレクトリにファイルを作成し、パーミッションを確認してみましょう。
1. 現在のユーザを確認します。
  $ id
  uid=1000(user01) gid=1000(user01) groups=1000(user01)

2. ホームディレクトリにperm.txtというファイルを作成し、パーミッションを確認します。
  $ cd
  $ touch perm.txt
  $ ls -l perm.txt
  -rw-rw-r-- 1 user01 user01 0 12月 22 10:49 perm.txt

    -rw-rw-r— は、左から順に以下のように読み取れます。
    -    :ファイルタイプは「ファイル」
    rw- :オーナーuser01のパーミッションは、読み取りと書き込み
    rw- :グループuser01のパーミッションは、読み取りと書き込み
    r-- :その他のユーザのパーミッションは読み取り

ディレクトリのパーミッション


ディレクトリにもパーミッションが存在します。ディレクトリのパーミッションも rwx ですが、ファイルのパーミッションと
は意味が若干異なります。

  • r(読み取り) ディレクトリに含まれるファイル一覧の取得
  • w(書き込み) ディレクトリ内へのファイルやサブディレクトリの作成・削除
  • x(実行) ディレクトリをカレントディレクトリにする

カレントディレクトリのパーミッションを表示する場合は、lsコマンド実行時に –l だけでなく –d オプションも指定しま
す。

たとえば、各ユーザのホームディレクトリには、本人しかアクセスできないようなパーミッションがあらかじめ割り当てられ
ています。
以下の手順を実行し、ホームディレクトリのデフォルトのパーミッションを確認してみましょう。

1. 各ユーザのホームディレクトリのパーミッションを表示します。
  以下の例では、user01とyamaguchiのホームディレクトリが表示されていますが、パーミッションの構成はい
  ずれも本人にはrwxが割り当てられており、グループやその他のユーザには何も割り当てられていない、という
  状態であることが確認できます。
  $ ls -l /home
  合計 3
  drwx------. 19 user01  user01  4096 2月 18 14:00 user01
  drwx------  5 yamaguchi yamaguchi 121 2月 18 14:06 yamaguchi

パーミッションの変更(シンボルモード)


chmodは、パーミッションを変更するコマンドです。パーミッションは、ファイルやディレクトリの保護モードであり、それを変
更する(change mode)という意味があります。

chmodには、パーミッションをシンボル(文字)で指定する方法と、数値で指定する方法があり、どちらの方法でも同
じ結果を得ることができます。本ページでは、シンボルモードでパーミッションを変更する方法を確認します。
シングルモードでは、chmodコマンドで以下のように指定します。

  • 誰に? 対象を文字 ugoa で指定します。
  • どうする? 既存のパーミッションに追加、削除、上書きのどれを行うかを指定します。
  • 何を? パーミッション(rwx)を指定します。

ルートディレクトリの直下にあるtmpディレクトリにファイルを作成し、パーミッションを変更する例を通じて、パーミッションの
変更方法を学習しましょう。

1. 現在ログイン中のユーザを確認します。例では、user01でログインしています。
  $ id
  uid=1000(user01) gid=1000(user01) groups=1000(user01)

2. ルートディレクトリの直下にあるtmpというディレクトリにカレントディレクトリを変更し、ファイルを作成します。
  その後、パーミッションを表示します。
  $ cd /tmp
  $ touch perm1.txt
  $ ls -l perm1.txt

  -rw-rw-r-- 1 user01 user01 0 12月 22 11:33 perm1.txt

3. 【練習問題】
  既存のパーミッションに、その他ユーザに対する書き込みパーミッションを追加し、その後確認してください。
  パーミッションを追加するコマンドを考えて入力しましょう
  以下のコマンドを実行し、結果にrw-rw-rw-と表示されていれば正解です。
  $ ls -l perm1.txt
  -rw-rw-rw- 1 user01 user01 0 12月 22 11:33 perm1.txt

パーミッションの変更(数値モード)(参考)


chmodの数値モードでは、オーナー、グループ、その他のユーザのパーミッションを、上図のように8進数で表現する方法です。
この場合は、既存のパーミッションに関係なく、chmodで指定したとおりにパーミッションが再設定されます。
パーミッションを数値モードで変更する方法を確認しましょう。

1. 現在ログイン中のユーザを確認し、カレントディレクトリを確認します。例では、user01でログインしています。
  カレントディレクトリは /tmp です。カレントディレクトリが異なる場合は、/tmpに変更してください。
  $ id
  uid=1000(user01) gid=1000(user01) groups=1000(user01)

  $ pwd
  /tmp

2. カレントディレクトリ/tmp にファイルを作成し、パーミッションを確認します。
  $ touch perm2.txt
  $ ls -l perm2.txt

  -rw-rw-r-- 1 user01 user01 0 12月 22 11:53 perm2.txt

3. 【練習問題】数値モードで、オーナー、グループ、その他のユーザにパーミッションrwxを割り当ててください。
  自分で考えて入力しましょう。以下のように表示されていれば正解です。
  $ ls -l perm2.txt
  -rwxrwxrwx 1 user01 user01 0 12月 22 11:53 perm2.txt

4. 【練習問題】 perm2.txtのパーミッションを、オーナーにrwx、グループにrx、その他のユーザには無し、に変更してください。
  自分で考えて入力しましょう。以下のように表示されていれば正解です。
  $ ls -l perm2.txt
  -rwxr-x--- 1 user01 user01 0 12月 22 11:53 perm2.txt

5. ユーザyamaguchiに切り替えて、perm2.txtにアクセスしてみましょう(パスワード abc1234)。
  $ su yamaguchi
  $ cat /tmp/perm2.txt
  cat: perm2.txt: 許可がありません ※パーミッションがないのでアクセスが拒否される
  $ exit

スティッキービット(参考)


スティッキービット(Sticky Bit)は、ディレクトリに設定される特殊なパーミッションのことです。
スティッキービット(Sticky Bit)が設定されたディレクトリ内には、ユーザーはファイルやサブディレクトリを保存できますが、削除は
オーナーユーザとrootしかできなくなります。
Linuxでは/tmpディレクトリなどの、一部のディレクトリなどに対してスティッキービットがデフォルトで設定されています(ディストリ
ビューションやバージョンによって設定されているディレクトリが異なる場合があります。)。
また、以下の手順を実行すれば、任意のディレクトリにスティッキービットの設定ができます。

1. user01として端末を開き、/tmpの下にstickyというサブディレクトリを作成します。
  $ cd /tmp
  $ mkdir sticky
  $ ls -ld sticky

  drwxrwxr-x 2 user01 user01 6 1月 30 11:46 sticky

  作成したディレクトリは複数のユーザと共有したいのですが、現在のパーミッションでは、/tmp/sticky内にuser01はファイルを
  新規作成できますが、その他のユーザには書き込みパーミッションがないため、ファイルを新規作成できません。

2. user02を含む、その他のユーザも/tmp/stickyにファイルが新規作成できるようにするため、 /tmp/stickyにその他ユーザに
  対する書き込みのパーミッションを付与します。
  $ chmod o+w /tmp/sticky または chmod 777 /tmp/sticky

  これで/tmp/stickyには誰もがファイルを新規作成することができるようになりましたが、Linuxではディレクトリに書き込み許可
  があると削除もできてしまうため、たとえばuser01が作成したファイルをuser02は削除できてしまいます。

3. そこで、 /tmp/stickyにさらにスティッキービットを設定します。スティッキービットを設定すると、ディレクトリ内にはユーザーはファ
  イルやサブディレクトリを自由に作成できますが、削除はオーナーユーザとrootしかできなくなります。
  $ chmod o+t /tmp/sticky または chmod 1777 /tmp/sticky
  $ ls -ld /tmp/sticky
  drwxrwxrwt 2 user01 user01 40 1月 30 12:08 /tmp/sticky

sudoコマンド(参考)


sudoコマンドは、スーパーユーザではない通常のユーザでログインしているときに、スーパーユーザーでなければ実行がで
きないコマンドを実行するために使用します。

sudoコマンドは、ディストリビューションによって初期設定が異なるため、デフォルトでsudoコマンドが利用できないディス
トリビューションもあります。sudoコマンドを利用するには、/etc/sudoersファイルを、visudoコマンド(sudoのメンテナ
ンスコマンド)で編集する必要があります。

研修で使用しているCentOSでは、デフォルトではsudoコマンドが利用できません。このため、yamaguchiユーザが
sudoコマンドを実行できるように設定を変更しましょう。

1. 現在のユーザを確認します(演習はuser01で行います)。
  $ id
  uid=1000(user01) gid=1000(user01) groups=1000(user01)

2. スーパーユーザ root に切り替えて、visudoコマンドを実行します(パスワードはroot)。
  $ su
  # visudo

3. visudoが起動したら、 1行目で[i]キーを押してyamaguchiにsudoですべてのコマンドを実行する許可を与える
  ため、以下を入力します(この操作でyamaguchiはsudoが利用できるようになります)
  yamaguchi ALL=(ALL)ALL

4. [ESC]キーを押してノーマルモードに戻ります。
  [:]キー、[w]キー、[q]キーを順番に押して、上書き保存後 visudoを終了します。

5. user01に戻ります。
  # exit

次のページで、実際にyamaguchiユーザとしてsudoコマンドを利用してみましょう。

suとsudoコマンド(参考)


sudoコマンドを使って、Linuxの管理を行う場合、コマンドの前にsudoコマンドを追加します。
sudotestというユーザを作成、削除する例を通じて、sudoコマンドの使い方を確認します。

1. 前ページでsudoコマンドを実行できるように構成した、ユーザyamaguchiに切り替えます(パスワードは
  abc1234)。
  $ su yamaguchi

2. ユーザyamaguchi として、sudoコマンドを使わずにユーザ sudotestを作成します。
  yamaguchi自身には管理者としての権限はないので、useraddコマンドは失敗します。
  $ useradd sudotest
  bash: /usr/sbin/useradd: 許可がありません

3. sudoコマンドを前に追加して、もう一度同じコマンドを実行します。
  パスワードが要求されたら、rootではなくyamaguchiのパスワードを入力します。
  $ sudo useradd sudotest
  [sudo] password for yamaguchi:  ※yamaguchiのパスワード(abc1234)を入力

4. ユーザが作成されたことを確認します。
  $ id sudotest
  uid=1002(sudotest) gid=1003(sudotest) groups=1003(sudotest)

  $ exit

suはユーザを切り替えるコマンドです。このため、一度スーパーユーザに切り替えれば、exitコマンドで終了するまでスー
パーユーザとしてさまざまなコマンドが実行できますが、管理者間でrootのパスワードを共有する必要があります。
一方sudoコマンドは1つのコマンドだけをスーパーユーザー権限で実行するため、より安全に管理操作が行えます。ま
た、sudoではrootのパスワードではなく自分のパスワードを入力します。このため、rootのパスワードを管理者間で共有
する必要はありません。許可する操作も、コマンド単位で制御ができます。

章末問題(MUST)

本章の最後に、3章で最も重要なトピックであるパーミッションについて復習しておきましょう。
次の指示に従い、ディレクトリとファイル作成、パーミッション変更を行ってください。

1. user01としてログインし、端末を開いてください。
 
 
2. rootユーザ(パスワード root)に切り替えて、root1.txtおよびroot2.txtという空のファイルを/usr/tmpディ
レクトリの中に作成してください。
 
 
3. root1.txtとroot2.txtのパーミッションを、以下の要件に従い変更します。
 
 

<要件>

  • root1.txtおよびroot2.txtに、root以外のユーザも、文字を追加し、上書き保存できるようにしてください
  • rootにかかわるパーミッションは変更しないでください
  • root1.txtのパーミッションはシンボルモードで変更してください
  • root2.txtのパーミッションは数値モードで変更してください
  •   数値モードを習っていない場合は、本章「パーミッションの変更(数値モード)」のページを参考に数値
      モードでの設定にチャレンジするか、シンボルモードで設定を行ってください

  • 動作確認は、 user01で行ってください

-Linux入門

© 2021 スタートダッシュ