2023 年度 OSS リテラシ 3 : ユーザ管理

ユーザ管理

2021年まではラズパイの初期ユーザ名は pi で固定されていたが (2017年度以前はパスワードは raspberry で固定だったが), 現在は初期ユーザ名を自由につけることができるようになった. 管理者としての設定など一通りなされているので,ここではそれを確認する.

グループの確認

新規作成したユーザ hogehoge (hogehoge は適宜自分のユーザアカウントに読み替えること) の所属するグループを確認する. 初期に作成したユーザは管理者が入るべきグループに入っていることがわかる. このうち, 最初の hogehoge グループはシステムの作るユーザ名と同じ名前のグループである.

$ groups hogehoge

  hogehoge adm dialout cdrom sudo audio video plugdev games users input render netdev lpadmin gpio i2c spi

管理者権限の設定

新規作成したユーザ hogehoge (hogehoge は適宜自分のユーザアカウントに読み替えること) が sudo コマンドで管理者権限を使えるのは,hogehoge が sudo グループに含まれているためである. 設定ファイル /etc/sudoers を確認すると,サーバ (VM) と同様に sudo グループに属するユーザは管理者権限を使えるようになっていることが分かる.

sudo するときは自分のパスワードを入力すのがデフォルトであるが, Raspberry Pi の初期ユーザ hogehoge はパスワード入力なしで sudo できるようになっている. パスワードを入力せずに済ませるのはセキュリティ的にはよろしくないが, パスワード入力不要にしないと挙動が怪しいことがあるので,そのままにしておく.

raspbian のような Debian 系 Linux の場合, 各種設定ファイルは「全体設定」と「個別的設定」が別々のファイルとなっていて, 個別設定は *.d/ というディレクトリに置かれていることが多い.  今までに出てきた例としては, sudo や apt の設定が挙げられる.

  • /etc/sudoers [全体設定]
  • /etc/sudoers/sudoers.d/010_pi-nopasswd [個別的な設定]

ファイル 010_pi-nopasswd を確認すると,パスワード不要という設定が書かれていることがわかる.hogehoge は自分のユーザ名に読み替えること.

$ sudo -s

# cat /etc/sudoers.d/010_pi-nopasswd

   hogehoge ALL=(ALL) NOPASSWD: ALL

ユーザのログの確認

ユーザのログインの履歴は last コマンドや lastlog コマンドで確認することができる. last コマンドは時系列で, lastlog コマンドはユーザ毎にログイン履歴を表示する.

hogehoge$ last

  hogehoge pts/1        10.164.1.197     Sat Sep 30 16:14   still logged in
  hogehoge tty7         :0               Sat Sep 30 16:13    gone - no logout
  reboot   system boot  4.9.41-v7+       Thu Jan  1 09:00   still running
  pi       pts/1        10.164.1.197     Sat Sep 30 15:13 - 16:11  (00:57)
  pi       tty7         :0               Sat Sep 30 15:11 - 16:11  (00:59)
  reboot   system boot  4.9.41-v7+       Thu Jan  1 09:00 - 16:11 (17439+07:11)
  pi       tty7         :0               Sat Sep 30 15:05 - down   (00:04)
  ...(後略)...
hogehoge$ lastlog

  ユーザ名         ポート   場所             最近のログイン
  root                                       **一度もログインしていません**
  ...(中略)...
  pi               pts/1    10.164.1.197     土  9月 30 15:13:18 +0900 2017
  ...(中略)...
  hogehoge         pts/1    10.164.1.197     土  9月 30 16:14:31 +0900 2017

また, sudo コマンドを用いて管理権限を実行した場合, /var/log/auth.log に記録される. cat コマンドを使うとファイルの内容全てが表示されるが, tail コマンドを使うとファイル末尾だけを表示させることができる (-n 以下に表示する行数を与える).

hogehoge$ sudo -s
# cat /var/log/auth.log

 ...(中略)....
 Sep 30 16:19:26 iot-00 sudo: hogehoge : TTY=pts/1 ; PWD=/home/hogehoge ; USER=root ; COMMAND=/bin/cat /var/log/auth.log
 Sep 30 16:19:26 iot-00 sudo: pam_unix(sudo:session): session opened for user root by hogehoge(uid=0)

# tail -n 10 /var/log/auth.log

 ...(中略)....
 Sep 30 16:19:26 iot-00 sudo: hogehoge : TTY=pts/1 ; PWD=/home/hogehoge ; USER=root ; COMMAND=/bin/cat /var/log/auth.log
 Sep 30 16:19:26 iot-00 sudo: pam_unix(sudo:session): session opened for user root by hogehoge(uid=0)

パスワードの保管方法

登録されたユーザ情報は, /etc/passwd と /etc/shadow に登録される. /etc/shadow に暗号化されたパスワードが, それ以外の情報は /etc/passwd に 書かれる.

これらのファイルを確認してみよう. grep コマンドを使うことで, 第一引数に 与えた文字列が含まれている行だけを抜き出すことができる.

なお,ユーザ名 hogehoge は自分のアカウント名 (学生番号) に読み替えること.

$ sudo -s 

# less /etc/passwd

  ...(略)...

# grep hogehoge /etc/passwd

  hogehoge:x:1001:1001:SUGIYAMA Ko-ichiro,,,:/home/hogehoge:/bin/bash

# less /etc/shadow

  ...(略)...

# grep hogehoge /etc/shadow

  hogehoge:$6$AAAAAA$XXXXXXXXXXXXXXXXXXXXXXXXX:17439:0:99999:7:::

# less /etc/group

  ...(略)...

# grep hogehoge /etc/group

  hogehoge:x:1001:

/etc/shadow はパスワード情報が含まれているので, 一般ユーザには読めない ファイルパーミッションになっている. /etc/passwd や /etc/group は一般ユー ザでも読める.

# ls -l /etc/passwd /etc/group /etc/shadow

  -rw-r--r-- 1 root root    814 10月 19 09:33 /etc/group
  -rw-r--r-- 1 root root   1718 10月 19 09:34 /etc/passwd
  -rw-r----- 1 root shadow 1097 10月 19 09:33 /etc/shadow

[Extra 2] 課題 : ファイルの書式・パーミッション

  • 以下のファイルの書式を調べよ.
    • /etc/passwd
    • /etc/group
    • /etc/shadow
    • /etc/sudoers
      • "%sudo ALL=(ALL:ALL) ALL" という記述があるが, 各 ALL の意味を調べなさい.
  • ファイルパーミッション read, write, execute, user, group, other, の意味を調べて調べてオンラインテキストにまとめよ. さらに, 以下のファイルに対して ls -l コマンドを実行し, 「誰」が「何 (read, write, execute)」をできるかまとめよ.
    • /etc/passwd
    • /etc/shadow
    • /home/hogehoge/.bashrc
    • /bin/ls
    • /usr/bin/sudo (注意: setuid が使われている. setuid の意味も合わせて調べよ)

[参考] 不要なユーザのアカウントのロック

ユーザーアカウントをロックすると, そのアカウントは使用不可の状態になりログインすらできなくなる.

不要な初期ユーザ jxxxx のアカウントをロック (= ログイン不可にする) するには以下のようにすれば良い.

# passwd -l jxxxx

  passwd: パスワード期限切れ情報を変更しました

# exit

$ su jxxxx          (ユーザ jxxxx にスイッチ)

  パスワード:
  su: 認証失敗

このユーザのロックを解除する場合は, 以下のようにすれば良い.

$ sudo -s

# passwd -u jxxxx

最終的には, ユーザ jxxxx は必要ないので, パスワードをロックしておくこと.

# passwd -l jxxxx