Database JUNKY

MySQL,MariaDBを中心としたブログです

ec2 rootから特定のユーザーに成り代わってシェルやコマンドを実行する(runuser)

f:id:hit10231023:20180912204416p:plain

意外と知らなかったです。 root以外のアカウントから、rootに成り代わって実行はいくつかあるんですが、 rootからroot以外のアカウントに成り代わって実行する方法ってどうするんだろう?って

例えばこんなケースです

[root@]# aws ec2 describe-instance-status
You must specify a region. You can also configure your region by running "aws configure".

まあ、当然そうなりますよね。aws configureは、ec2-userで設定しているわけなんで笑

このような場合、いままでsudoコマンド特定のユーザーに成り代わって実行していたのですが、amazon linuxおよびcentos等の起動コマンド・起動シェル内では設定しても動いてくれない(汗)

  • コンソールから直接叩くと動くんだけどな。。
[root@]# sudo -H -u  ec2-user aws ec2 describe-instance-status

調べた限りでは、

RedHat系のデフォルト設定では起動時のsudoは許されていないってのが理由らしく、じゃーどうすればいいの?って調べたところ runuserで実行できることがわかりました。

runuser を使いましょう!

コマンド実行

たとえば、sudo と比較した場合、

  • sudo を利用した例
# sudo -H -u  ec2-user aws ec2 describe-instance-status
  • runuserを指定した場合
# runuser -l ec2-user -c "aws ec2 describe-instance-status"

でコマンド違うくらいで、あんまし変わらないのですが、init.d等に記載する、起動シェルで、sudo を実行すると、動かなくてパニクるので、runuserに統一したほうが無難です!

起動シェル実行の例( /etc/init.d/)

hit.hateblo.jp

cat /etc/init.d/my_shell
-----------------------------------------
#!/bin/sh
# chkconfig: 345 99 10
# description: start_app shell
case "$1" in
  start)
     /sbin/runuser -l ec2-user -c "/usr/local/shell/mybash-start.sh"
       ;;
  stop)
     /sbin/runuser -l ec2-user -c "/usr/local/shell/mybash-stop.sh"
       echo "stop!"
       ;;
  *) break ;;
esac

ただ、これだけの話ですが、毎回ハマるのでメモしておきました

f:id:hit10231023:20180308234003p:plain