Torihaji's Growth Diary

Little by little, no hurry.

なぜAWSのEC2においてec2-userでsudoしたら全部のコマンドが実行できるのか

はじめに

みなさん、こんにちは torihaziです。

今日はタイトルのことを少し復習がてら、昔の知識を掘り起こしながら

書いていこうと思います。

※途中脱線するかもしれません。「なんでこうなるのか」を咀嚼しながら進む予定です。

結論

/etc/sudoers.d/cluod-initなんとかとかいうファイルににそういうのを許可する設定が書いてあるから。

1つずつ確認

そもそもec2インスタンスsshで繋ぐには

ssh -i 秘密鍵のファイルパス 接続ユーザ名@host名orIPアドレス

です。

それで入れるかと思います。

(ちなみになんでsshできるのかはサーバ上でport22が開いてて、sshd デーモンが動いてるからです)

systemctl status sshdと打ってみてください。緑色でrunnningとかが表示されます。

で次。

まず今繋いでるのは誰かを調べるにはwhoとかwhoamiとか実行すればいいですね。

で自分がどのグループに所属しているかは味方いろいろありますが

個人的にはgroupsが早いです。/etc/groupを覗くのもいいかもしれません。

そうすると wheel:x:数字:ec2-user,(あれば他にも)

みたいに帰ってくると思います。

この記述がwheelグループにはec2-userが含まれていますよということです。

はい、次です。

みるところは /etc/sudoerです。

ここにはsudoするにあたってのいろんな設定が記載されています。

catでもmoreでもlessでも使って覗いてみましょう。

vimとかは使わないでください。

sudoerを編集するには専用のコマンドがあるので。

(使わないでvimとかしてもし変なこと書くと最悪ぶっ壊れた気がします。)

中身を見るとこんなことが書いてあると思います。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)   ALL

これが正体です。

と言いたいところですが、awsの場合はさらにここから進みます。

sudoerの中身の最後に

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

こんな記述がありますね。

これはこの/etc/sudoers.d配下のものもsudoの設定として追加で読み込みますよということです。

でその下をのぞいてみると

# User rules for ec2-user
ec2-user ALL=(ALL) NOPASSWD:ALL

はい。これが本当の答えです。

だからec2-userで繋いでsudoしたら"全部のコマンドをパスワードなし"で使えます。

※ちなみにこのファイル/etc/sudoers.d/cloud-initなんとかですが、

みたくてもpermission deniedとかで見れないと思います。

そういう時はsudo suです。

これでrootユーザになれます。サーバ内にrootユーザ自体はいると思いますが、多分パスワードは最初から未設定かできないので。

(/etc/passwrd見れば最上位にいるはずです。)

そうすれば見れます。ただexitすることだけは忘れずに。

終わりに

久しぶりにザ・インフラでした。

コード書くのとはまた違った頭を使わないといけないですね。

ただクラウドになっても結局根っこにあるのはこういう1このサーバなんだなと思いました。

ということで以上です。