ユーザ関連のID情報の確認
id
コマンドを使用すると、ユーザのUIDやGIDなどの情報を調べることができます。
書式
id [OPTION]... [USER]
常用选项
-
-a
# 詳細情報を表示(デフォルトオプション) -
-Z
または--context
# セキュリティコンテキスト情報のみを表示(SELinuxを有効化する必要がある) -
-g
または--group
# GIDのみを表示する、つまりメイングループIDのみ -
-G
または--groups
# メイングループとサブグループのIDを表示、すなわち全グループID -
-n
または--name
# ユーザー名またはグループ名を表示(-nu
、-ng
、-nG
と組み合わせて使用) -
-u
または--user
# UIDのみを表示する
例
id
uid=0(root) gid=0(root) groups=0(root)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
id -a
uid=0(root) gid=0(root) groups=0(root)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
id -nu
root
id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
id -G postfix
89 12
id -nG postfix
postfix mail
ユーザーを切り替えたり他のユーザーとしてコマンドを実行する
もし現在ログインしている端末で特定のコマンドを実行したいが、現在のユーザーに実行権限がない場合や特定のリソースへのアクセス権限がない場合には、以下の方法が考えられます:
- 権限を持つユーザーが端末にログインし、操作を行う。
- 現在の端末で一時的に切り替えて、権限を持つユーザーの身分でコマンドを実行する。
su
(スイッチユーザー)コマンドはユーザの身分を切り替えて、指定したユーザの身分でコマンドを実行するためのものです。
書式
su [options...] [-] [user [args...]]
常见选项
-
-m
、-p
または--preserve-environment
# 環境変数をリセットしない -
-g
または--group group
# メイングループを指定(rootから一般ユーザーに切り替える場合のみ) -
-
、-l
または--login
# 完全にユーザーを切り替える -
-c
または--command command
# ユーザーを切り替えずに特定のユーザーの権限でコマンドを一時的に実行 -
--session-command command
#-c
オプションと似ていますが、新しいセッションは作成しません -
-f
または--fast
# シェルに-f
(csh または tcsh用)を早めに渡す -
-s
または--shell shell
# ユーザーを切り替えた後の新しい環境のシェルを指定します、/etc/shells
に存在する必要があります -
-P
または--pty
# 新しい端末を開く
ユーザーの切り替え方
su UserName # 非ログイン式の切り替え、ユーザーの設定ファイルを読み込まず、作業ディレクトリも変更しない
su - UserName # ログイン式の切り替え、ユーザーの設定ファイルを読み込み、ホームディレクトリに移動する
補足
rootが他のユーザにsu
する際にはパスワードが不要ですが、rootでないユーザーが切り替える際にはパスワードが必要です。
注意点:su
で新しいユーザに切り替えた後、元のユーザに戻る際にはexit
を使用してください。再度su
で元のユーザに切り替えると多くのbashサブプロセスが生成され、環境が混乱する可能性があります。
完全切り替えと非完全切り替えの違い
- 非完全切り替えでは作業ディレクトリおよび環境変数PATHは変更されない。
- 完全切り替えではユーザーのホームディレクトリに切り替わり、PATHが更新される。
例:
# 非完全切り替えの例
[jose@rocky8 ~]$ su root
Password:
[root@rocky8 jose]# pwd
/home/jose
[root@rocky8 jose]# echo $PATH
/home/jose/.local/bin:/home/jose/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
# 完全切り替えの例
[jose@rocky8 ~]$ su - root
Password:
[root@rocky8 ~]# pwd
/root
[root@rocky8 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
ユーザーを切り替えずに他のユーザーの権限でコマンドを実行する
一時的にユーザーを切り替えずに、他のユーザーの権限で直接コマンドを実行することもできます。例えば:
# suを使用して、ユーザーを切り替えてからjoseとしてファイルを作成する
[root@rocky8 ~]# su - jose
[jose@rocky8 ~]$ touch jose-1.txt
[jose@rocky8 ~]$ exit
logout
# 3ステップを1ステップにする
[root@rocky8 ~]# su - jose -c "touch jose-2.txt"
[root@rocky8 ~]# ls -l /home/jose/jose*
-rw-rw-r--. 1 jose jose 0 Jun 25 16:14 /home/jose/jose-1.txt
-rw-rw-r--. 1 jose jose 0 Jun 25 16:16 /home/jose/jose-2.txt
[root@rocky8 ~]# su - jose
[jose@rocky8 ~]$ id
uid=1000(jose) gid=1000(jose) groups=1000(jose)
[jose@rocky8 ~]$ exit
logout
# 3ステップを1ステップにする
[root@rocky8 ~]# su - jose -c "id"
uid=1000(jose) gid=1000(jose) groups=1000(jose)
/sbin/nologin や Ubuntuの /bin/false シェルを利用しているユーザーは、通常の方法で切り替えることはできませんが、切り替え可能なシェルを指定することで、一時的に切り替えることができます。
例:
[root@rocky8 ~]# getent passwd mysql
mysql:x:336:336::/data/mysql:/sbin/nologin
[root@rocky8 ~]# su - mysql
This account is currently not available.
[root@rocky8 ~]# su - mysql -c "echo nologin"
This account is currently not available.
# ただし、利用可能なシェルを指定することで一時的に切り替えることができる
[root@rocky8 ~]# su - mysql -s /bin/bash
[mysql@rocky8 ~]$ id
uid=336(mysql) gid=336(mysql) groups=336(mysql)
[root@rocky8 ~]# su - mysql -s /bin/bash -c "echo nologin"
nologin