Proxyサーバーを作成しProxy経由でEC2にSSHする(6) Linuxコマンド勉強

programming-gogogogo.hatenablog.com

前回の記事でProxy経由のSSHはできたので、関連するLinuxコマンドであまり理解できてないものを本記事で調べていきます。

SSHのマニュアル

linux.die.net

SSHのマニュアルは上記ページにまとまってるっぽいので、これからわからないことあればこのページも見るようにしようと思います。
オプションについても記載があり、-Lでのローカルフォワードとか-oでのオプションはオプションを指定することなどが書かれていました。
-oで選択できるオプションの中にProxyCommandもありました。

ProxyCommand

linux.die.net

上記ページにSSH configで指定できるオプションがまとまっていました。
ProxyCommandは下記の説明がありました。

Specifies the command to use to connect to the server. The command string extends to the end of the line, and is executed with the user's shell. In the command string, '%h' will be substituted by the host name to connect and '%p' by the port. The command can be basically anything, and should read from its standard input and write to its standard output. It should eventually connect an sshd(8) server running on some machine, or execute sshd -i somewhere. Host key management will be done using the HostName of the host being connected (defaulting to the name typed by the user). Setting the command to ''none'' disables this option entirely. Note that CheckHostIP is not available for connects with a proxy command.

サーバーに接続する際に使うコマンドを指定して、そのコマンドはユーザーのshellで実行されるとのこと。
%hはホストネーム、%pはポート。

Connect

linux.die.net

ConnectはProxyCommand内で使われる印象があったのでProxyCommandのオプションなのかと思ってましたが、Linuxコマンドのようです。
ProxyCommand内で指定すると該当のサーバーをProxyサーバーとして認識してくれるようですが、説明を読んでも深いところまでは今は理解するのが難しく感じたのでまあこんなコマンドがあるんだなぐらいの理解度で進んでおこうと思います。
今のところProxyCommand以外でConnectを使う場面はわからないです。

sudo

linux.die.net

sudo allows a permitted user to execute a command as the superuser or another user, as specified by the security policy.

sudoはユーザーがsuperuserやほかのユーザーとしてコマンドを実行することを許可するとのこと。

それはなんとなく理解しているのですが、sudoを使うための権限とか条件はどう設定されているのかが気になっていて調べてみました。

どうやらsudoersという設定でsudoを使えるユーザーを制限しているみたいです。

linux.die.net

The sudoers policy module determines a user's sudo privileges. It is the default sudo policy plugin. The policy is driven by the /etc/sudoers file or, optionally in LDAP.

sudoer policyがユーザーのsudo権限を決めるとのこと。 そのpolicyは/etc/sudoersファイルで定義されているようです。

気になったのでEC2を起動して、/etc/sudoersファイルをみてみました。 (起動した 直後のデフォルトの/etc/sudoersです)

[ec2-user@ip-10-100-0-24 ~]$ sudo cat /etc/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

全ての記述は読めていませんが、とりあえず以下の部分でrootユーザーが全コマンドを実行できるようになっているんだなということが推測できました。

## Allow root to run any commands anywhere
root    ALL=(ALL)   ALL

よくわからなかったLinuxコマンドの理解が少し進んだので良かったです。
いろんな検証をしながら不明点あればちょっとずつ深掘りしていきます。