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