サイトアイコン 協栄情報ブログ

df –Th をしたときに出てくる気になるあいつ — /run/user/$uid

はじめに

df -Thをしたとき、マウントポイントに/run/user/1000が表示されているときと、表示されていないときがあることに気づきました。
「……一体これはどういう仕様なんだ」、と気になったので調べたこと / 検証したことを備忘録としてここに記録します。

/run/user/1000とは…

今回私が用意した環境(RHEL7.9)でdf -Thを実行すると以下のような表示になります。
今回のお話の主役は最下行のの/run/user/1000です。

[ec2-user@ip-10-0-2-61 ~]$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  471M     0  471M   0% /dev
tmpfs          tmpfs     495M     0  495M   0% /dev/shm
tmpfs          tmpfs     495M   13M  482M   3% /run
tmpfs          tmpfs     495M     0  495M   0% /sys/fs/cgroup
/dev/xvda2     xfs        10G  1.1G  9.0G  11% /
tmpfs          tmpfs      99M     0   99M   0% /run/user/0
tmpfs          tmpfs      99M     0   99M   0% /run/user/1000

この/run/user/1000とは何なのでしょうか。

結論ファースト

つまり、ログインしたユーザのUIDに合わせて作成されるユーザごとの揮発性のストレージ領域であるというわけです。

また、このような領域が存在する理由として以下のような背景があったそうです。

参考:
LinuC豆知識
https://linuc.org/study/knowledge/441/

StackExchange "What is this folder /run/user/1000?"
https://unix.stackexchange.com/questions/162900/what-is-this-folder-run-user-1000#:~:text=%2Frun%2Fuser%2F%24uid%20is%20created%20by%20pam_systemd%20and%20used%20for,these%20applications%20typically%20stored%20their%20files%20in%20%2Ftmp.

検証

設定確認

どうやら、pamの設定で制御されていることが分かりましたので実際に設定ファイルを確認してみます。

[root@ip-10-0-2-134 ~]# grep 'pam_systemd' /etc/pam.d/*
/etc/pam.d/fingerprint-auth:-session     optional      pam_systemd.so
/etc/pam.d/fingerprint-auth-ac:-session     optional      pam_systemd.so
/etc/pam.d/password-auth:-session     optional      pam_systemd.so
/etc/pam.d/password-auth-ac:-session     optional      pam_systemd.so
/etc/pam.d/runuser-l:-session   optional        pam_systemd.so
/etc/pam.d/smartcard-auth:-session     optional      pam_systemd.so
/etc/pam.d/smartcard-auth-ac:-session     optional      pam_systemd.so
/etc/pam.d/system-auth:-session     optional      pam_systemd.so
/etc/pam.d/system-auth-ac:-session     optional      pam_systemd.so

たしかに、pam設定においてpam_systemdモジュールがoptionalで利用されていることが分かります。これらの設定によって、/run/user/$uidのマウントポイントが動的に作成されるようです。

pam_systemdとは

しかし、そもそもpam_systemdとはなんなのでしょう。
manを見てみると次のように書かれてあります。

pam_systemd registers user sessions with the systemd login manager systemd-logind.service(8), and hence the systemd control group hierarchy.

  1. If it does not exist yet, the user runtime directory /run/user/$UID is either created or mounted as new "tmpfs" file system with quota applied, and its ownership changed to the user that is logging in.

ざっくり、systemd-logind.serviceと一緒に動くこと、また/run/user/$UIDを(なければ)作るとも書いてますね。先述した通りの説明です(これ以外にも色々と働きがあるようですが詳しくはmanを参照ください)。
以下、systemctl statusを実行してみると確かに当該のservice unitが動いていることも確認できます。

[root@ip-10-0-2-61 ~]# systemctl status systemd-logind
● systemd-logind.service - Login Service
   Loaded: loaded (/usr/lib/systemd/system/systemd-logind.service; static; vendor preset: disabled)
   Active: active (running) since Sat 2023-12-23 10:15:46 UTC; 48min ago
     Docs: man:systemd-logind.service(8)
           man:logind.conf(5)
           http://www.freedesktop.org/wiki/Software/systemd/logind
           http://www.freedesktop.org/wiki/Software/systemd/multiseat
 Main PID: 518 (systemd-logind)
   Status: "Processing requests..."
   CGroup: /system.slice/systemd-logind.service
           └─518 /usr/lib/systemd/systemd-logind
略

参考:
man pam_systemd
https://www.freedesktop.org/software/systemd/man/249/pam_systemd.html

作成 / 削除されるか検証

実際に/run/user/$UIDが作成されたり削除されたりするのか検証してみます。

rootユーザの場合

rootユーザでログインしている場合どうなるのでしょうか。
結論、/run/user/1000はいません。(/run/user/0はいます)

[root@ip-10-0-2-61 ~]# whoami
root
[root@ip-10-0-2-61 ~]#
[root@ip-10-0-2-61 ~]#
[root@ip-10-0-2-61 ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@ip-10-0-2-61 ~]#
[root@ip-10-0-2-61 ~]#
[root@ip-10-0-2-61 ~]# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  471M     0  471M   0% /dev
tmpfs          tmpfs     495M     0  495M   0% /dev/shm
tmpfs          tmpfs     495M   13M  482M   3% /run
tmpfs          tmpfs     495M     0  495M   0% /sys/fs/cgroup
/dev/xvda2     xfs        10G  1.1G  9.0G  11% /
tmpfs          tmpfs      99M     0   99M   0% /run/user/0

ec2-userの場合

次に、ec2-userでログインした場合どうなるか確認してみます。
結論、/run/user/1000が作成されます。
(以下では別サーバからsshでec2-userとして接続しています)

[root@ip-10-0-2-82 ~]# ssh ec2-user@10.0.2.61
Last login: Sat Dec 23 10:22:45 2023 from ip-10-0-2-82.ap-northeast-1.compute.internal
[ec2-user@ip-10-0-2-61 ~]$
[ec2-user@ip-10-0-2-61 ~]$
[ec2-user@ip-10-0-2-61 ~]$ id ec2-user
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),190(systemd-journal)
[ec2-user@ip-10-0-2-61 ~]$
[ec2-user@ip-10-0-2-61 ~]$
[ec2-user@ip-10-0-2-61 ~]$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  471M     0  471M   0% /dev
tmpfs          tmpfs     495M     0  495M   0% /dev/shm
tmpfs          tmpfs     495M   13M  482M   3% /run
tmpfs          tmpfs     495M     0  495M   0% /sys/fs/cgroup
/dev/xvda2     xfs        10G  1.1G  9.0G  11% /
tmpfs          tmpfs      99M     0   99M   0% /run/user/0
tmpfs          tmpfs      99M     0   99M   0% /run/user/1000

カスタムで作成したユーザの場合

最後に、適当に作成したユーザ(tom, uid=1599)で接続した場合を確認してみます。
結論、/run/user/1000は削除され、/run/user/1599が作成されます。

まずユーザ作成します。

[root@ip-10-0-2-61 ~]# useradd -u 1599 tom
[root@ip-10-0-2-61 ~]#
[root@ip-10-0-2-61 ~]#
[root@ip-10-0-2-61 ~]# id tom
uid=1599(tom) gid=1599(tom) groups=1599(tom)
[root@ip-10-0-2-61 ~]#
[root@ip-10-0-2-61 ~]#
[root@ip-10-0-2-61 ~]# passwd tom
Changing password for user tom.
New password:
BAD PASSWORD: The password contains the user name in some form
Retype new password:
passwd: all authentication tokens updated successfully.

また、別サーバからsshでtomとして接続してみます。

[root@ip-10-0-2-82 ~]# ssh tom@10.0.2.61
tom@10.0.2.61's password:
[tom@ip-10-0-2-61 ~]$
[tom@ip-10-0-2-61 ~]$
[tom@ip-10-0-2-61 ~]$ id tom
uid=1599(tom) gid=1599(tom) groups=1599(tom)
[tom@ip-10-0-2-61 ~]$
[tom@ip-10-0-2-61 ~]$
[tom@ip-10-0-2-61 ~]$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  471M     0  471M   0% /dev
tmpfs          tmpfs     495M     0  495M   0% /dev/shm
tmpfs          tmpfs     495M   13M  482M   3% /run
tmpfs          tmpfs     495M     0  495M   0% /sys/fs/cgroup
/dev/xvda2     xfs        10G  1.1G  9.0G  11% /
tmpfs          tmpfs      99M     0   99M   0% /run/user/0
tmpfs          tmpfs      99M     0   99M   0% /run/user/1599

想定通りの動作ですね。

suした場合

蛇足ですが、suした場合はどうなるのか検証してみます。
結論、作成されたり削除されたりはしませんでした。

[tom@ip-10-0-2-61 ~]$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  471M     0  471M   0% /dev
tmpfs          tmpfs     495M     0  495M   0% /dev/shm
tmpfs          tmpfs     495M   13M  482M   3% /run
tmpfs          tmpfs     495M     0  495M   0% /sys/fs/cgroup
/dev/xvda2     xfs        10G  1.1G  9.0G  11% /
tmpfs          tmpfs      99M     0   99M   0% /run/user/0
tmpfs          tmpfs      99M     0   99M   0% /run/user/1599
[tom@ip-10-0-2-61 ~]$
[tom@ip-10-0-2-61 ~]$
[tom@ip-10-0-2-61 ~]$ su - ec2-user
Password:
Last login: Sat Dec 23 11:15:20 UTC 2023 from ip-10-0-2-82.ap-northeast-1.compute.internal on pts/1
[ec2-user@ip-10-0-2-61 ~]$
[ec2-user@ip-10-0-2-61 ~]$
[ec2-user@ip-10-0-2-61 ~]$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  471M     0  471M   0% /dev
tmpfs          tmpfs     495M     0  495M   0% /dev/shm
tmpfs          tmpfs     495M   13M  482M   3% /run
tmpfs          tmpfs     495M     0  495M   0% /sys/fs/cgroup
/dev/xvda2     xfs        10G  1.1G  9.0G  11% /
tmpfs          tmpfs      99M     0   99M   0% /run/user/0
tmpfs          tmpfs      99M     0   99M   0% /run/user/1599

補遺 pam設定ファイルのフォーマット

pamの設定ファイルの見方についてです。
詳しくは参考のURLを参照お願いします。

module_interface    control_flag    module_name module_arguments

e.g., /etc/pam.d/system-auth:

-session     optional      pam_systemd.so

module_interface

control_flag

参考URL:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system-level_authentication_guide/pam_configuration_files

おわりに

モバイルバージョンを終了