LoginSignup
19
18

More than 5 years have passed since last update.

sudo 時に root 権限で実行されてるかを確認する

Last updated at Posted at 2016-02-15

環境

  • Ubuntu 15.04
  • sudo 1.8.9p5
    • /etc/sudoersenv_reset を設定。

調査

コマンドは infoUser information の項目 (info id の 1 ページ前) と、ユーザーを表す環境変数から選んだ。

手動

$ sudo echo $USER
user1
$ sudo echo $UID
1000
$ sudo id
uid=0(root) gid=0(root) groups=0(root)
$ sudo logname
user1
$ sudo whoami
root
$ sudo users
user1
$ sudo groups
user1 adm cdrom sudo dip plugdev lpadmin

スクリプト

check.sh
#!/bin/bash -x

echo $USER
echo $UID
id
logname
whoami
users
groups
$ sudo ./check.sh
+ echo root
root
+ echo 0
0
+ id
uid=0(root) gid=0(root) groups=0(root)
+ logname
user1
+ whoami
root
+ users
user1
+ groups
root

調査結果

出力されたユーザー名、所属グループ名は以下の通り。

手動でもスクリプト経由でも root

  • whoami
  • id

スクリプト経由なら root

  • 環境変数 $USER
  • 環境変数 $UID
  • groups

sudo 実行ユーザー

  • logname
  • users

使用例

例 1

管理者権限がない状態で実行してほしくないスクリプトがあるとき、ガード節として使う。

usage1.sh
#!/bin/bash

if [ "`whoami`" != "root" ]; then
  echo "Require root privilege"
  exit 1
fi

cat <<EOT
- * - * - * - * - * - * - * - * -
- *  HELLO, MY ROOT USER !!!  * -
- * - * - * - * - * - * - * - * -
EOT

例 2

sudo を実行したユーザーによっては弾く。これもガード節。

usage2.sh
#!/bin/bash

if [ "`whoami`" != "root" ]; then
  echo "Require root privilege"
  exit 1
fi

if [ "`logname`" = "user1" ]; then
  for i in {1..10}
  do
    echo "Ha?"
  done
  exit 1
fi

cat <<EOT
* - * - * - * - * - * - * - * - * - *
*   HELLO, MY CUTE ROOT USER !!!!   *
* - * - * - * - * - * - * - * - * - *
EOT

感想

似たようなコマンドでも差がでて意外だった。

あと sudo で一時的に振る舞うユーザーの環境変数は特別なことをしないと読み込まれないイメージだったけど、一旦実行ファイルを経由すれば読み込まれるのか、とこれも意外だった。

でも考えてみれば、子プロセスで新たにシェルを起動するわけだから、その初期動作として環境変数を読み直すのは当たり前のことかもしれない。

lognamesudo su - として root 化しても元のユーザーの名前が出力された。

コマンドの名前から察するに、このコマンドの目的はログインの根っこにいるユーザーを知ることなのかもしれない。 sudosu コマンドでそれは書き変わらないんだろう。 whoamiid で出力内容が変わるのは、また別の情報を見ているんだろう。

なんとなく気にならなくて見てこなかった世界だ。

超・基本的なことなんだろうけど、なんだか勉強になった。

19
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
18