5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AmazonLinux2のsudoers設定について確認してみる

Last updated at Posted at 2021-11-13

AWSが提供しているAmazonLinux2sudoers設定について。

デフォルトで提供されているec2-userについては、パスワードなしでsudoできるように設定されています。

今回は、AmazonLinux2でのsudoers設定についてまとめます。

各種ドキュメント

sudo公式サイトとsudoersのマニュアル。

【余談】sudoのロゴ

いきなり話は脱線しますが、2021年現在のsudoのロゴってかなりインパクトが強いですよね。

Sudo Sandwichっていう名前で、2019年からこのSudo Sandwichが公式ロゴのようです。

image.png
© 2019 by Mark Stillman and licensed under CC BY 4.0

それまでのロゴだった盾をモチーフにしたSudo Shieldからはかなりの落差を感じます。

image.png
© 2010 by Trent Badger and licensed under CC BY 4.0

ロゴについては公式サイトのSudo Logosに記載があります。

閑話休題

今回確認する環境

今回、sudoersを確認する環境は、AWSに構築したAmazonLinux2になり。
利用したAMIはこちらami-0fd9d20498f0f18a6
image.png

この環境でのsudoバージョンは下記となっています。

sudoVersion
$ sudo --version
sudo --version
Sudo version 1.8.23
Sudoers policy plugin version 1.8.23
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.23

sudoersを確認する

まずはsudoersを確認してみます。

sudoersについては/etc/sudoersに配置されているためこちらのファイルを確認します。

catSudoers
sudo cat /etc/sudoers
sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 
## This file must be edited with the 'visudo' command.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using 
## wildcards for entire domains) or IP addresses instead.
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem


## Command Aliases
## These are groups of related commands...

## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable

## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp 

## Processes
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification

#
# Refuse to run if unable to disable echo on the tty.
#
Defaults   !visiblepw

#
# Preserving HOME has security implications since many programs
# use it when searching for configuration files. Note that HOME
# is already set when the the env_reset option is enabled, so
# this option is only effective for configurations where either
# env_reset is disabled or HOME is present in the env_keep list.
#
Defaults    always_set_home
Defaults    match_group_by_gid

# Prior to version 1.8.15, groups listed in sudoers that were not
# found in the system group database were passed to the group
# plugin, if any. Starting with 1.8.15, only groups of the form
# %:group are resolved via the group plugin by default.
# We enable always_query_group_plugin to restore old behavior.
# Disable this option for new behavior.
Defaults    always_query_group_plugin

Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

#
# Adding HOME to env_keep may enable a user to run unrestricted
# commands via sudo.
#
# Defaults   env_keep += "HOME"

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## 	user	MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere 
root	ALL=(ALL) 	ALL

## Allows members of the 'sys' group to run networking, software, 
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

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

## Same thing without a password
# %wheel	ALL=(ALL)	NOPASSWD: ALL

## Allows members of the users group to mount and unmount the 
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

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

今回のケースでは設定方法についてのサンプルがコメントで記述されていたり、実際の設定の記載も混在しています。
ここでは有効になっている設定について一つずつ確認してみます。

なお、sudoersにもコメントで記載されていますが。

sudoersファイルを直接編集することは推奨されておらず。 visudoを利用することによりsudoersを安全に編集する事ができます。
visudosudoersをエディットするためのコマンド。 同時編集しないようなロック管理だったり構文チェックが通らないと保存できなかったり等々の機能を提供しています。

Defaults !visiblepw

!visiblepw
Defaults   !visiblepw

visiblepwが有効になっている場合は、エコーが抑制されていない端末ではsudoの実行が拒否される。
今回の設定では先頭に!がついているのでvisiblepwがオフの状態となる。(エコーが抑制されていない端末でもsudoが実行できる)

Defaults always_set_home

always_set_home
Defaults    always_set_home

always_set_homeが有効になっている場合、sudoでコマンド実行時にターゲットユーザの環境変数HOMEを設定する。
-u オプションでユーザを指定しない場合はrootHOMEが設定される。

Defaults match_group_by_gid

match_group_by_gid
Defaults    match_group_by_gid

match_group_by_gidが有効になっている場合、suodersに記載されているすべてのグループ名を解決し、グループ名ではなくグループIDでマッチングする。

この設定が有効なのはsudoコマンドがv1.8.18以上となります。

※match_group_by_gidが無効の場合、ユーザすべてのグループIDをグループ名に解決し、sudoresファイルに記載されているグループ名と比較する。

This setting is only supported by version 1.8.18 or higher.

Defaults always_query_group_plugin

always_query_group_plugin
Defaults    always_query_group_plugin

always_query_group_pluginが有効になっている場合、group_plugin‎‎で設定されたグループプラグインを利用して%groupで記述されたグループを解決する。

Defaults env_reset

env_reset
Defaults    env_reset

env_resetが有効になっている場合、最小限の環境変数でコマンドが実行される。
TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME and SUDO_*が設定される。

Defaults env_keep

env_keep
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

env_keepにてsudo実行ユーザの環境変数を引き継ぐことができる。

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

secure_pathsudoで実行するコマンドPATHを指定する。

User specification

UserSpecification
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL

ユーザがどこになって何のコマンドを実行できるか設定している。上記の例だと

  • rootは任意のホストで任意のユーザとしてコマンド実行可能
  • wheelグループは任意のホストで任意のユーザとしてコマンド実行可能

指定方法の詳細については公式ドキュメント例に色々とサンプルがあり、これをみるとわかりやすいかと思います。

EXAMPLES

#includedir /etc/sudoers.d

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

#includedirを設定することにより、他のファイルからsudoersに設定を読み込むことが出来ます。

コメントにも(the # here does not mean a comment)と注意書きされていますが。

#includedirの先頭にある#はコメントを意味するものではなく、#includedirという指定方法となるため、この行はコメントではない事に注意してください。

AmazonLinux2では/etc/sudoers.d/#includedirとして指定しており。
このディレクトリの中には、90-cloud-init-usersというファイルが存在しています。

image.png

この90-cloud-init-usersを確認すると、ec2-user ALL=(ALL) NOPASSWD:ALLと記載されており。

この設定でec2-userが任意のホストで任意のユーザでコマンドを実行(NOPASSWD)する事を許可しています。

image.png

総評

デフォルトで用意されているec2-userがどうやってsudoしているか? をなんとなくでも理解するきっかけにでもなれば幸いです。

5
1
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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?