見出し画像

usermod コマンドで特権ユーザーに、そして Docker を sudo なしで使おう

みなさん、こんにちは!Linux 学習すすんでいますか?
私は先日、LinuC の 101試験に合格しようやく 102試験の勉強に着手しようかなという今日この頃です。

資格の勉強って体系的に学べるのでいいですね、今まで点だったものが線として繋がりました。
ただ、101試験の勉強の失敗としてインプットに時間を費やしすぎて、結果として効率が悪かったので、102試験は手を動かすことに重点を置き励んでいこうと考えています。

ということで、この記事では usermod コマンドに焦点をあてます。LinuC でも LPIC でもレベル1(102 試験)の試験範囲ですし、システム管理者の方や検証環境を構築するときなど実務で大変重要です。

ただ、できれば実戦で役に立ちやすい内容の方が、後々にも活きますのでこの記事では

・管理者権限(特権)アカウントに昇格させる
・Docker 環境を使いやすく構築する

をして usermod コマンドを頭と体にすり込もうと思います。
それでは早速やっていきまっしょう!

環境:今回使用する OS 情報

\\ 前提としてESXiの仮想ゲストとして稼働するCentOS
\\ CentOS情報

[notedemo03@CENT03 ~]$ cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core) 

[notedemo03@CENT03 ~]$ cat /etc/os-release 
NAME="CentOS Linux" 
VERSION="7 (Core)" 
ID="centos" 
ID_LIKE="rhel fedora" 
VERSION_ID="7" 
PRETTY_NAME="CentOS Linux 7 (Core)" 
ANSI_COLOR="0;31" 
CPE_NAME="cpe:/o:centos:centos:7" 
HOME_URL="https://www.centos.org/" 
BUG_REPORT_URL="https://bugs.centos.org/" 

CENTOS_MANTISBT_PROJECT="CentOS-7" 
CENTOS_MANTISBT_PROJECT_VERSION="7" 
REDHAT_SUPPORT_PRODUCT="centos" 
REDHAT_SUPPORT_PRODUCT_VERSION="7" 

特権グループに加える一般ユーザーアカウント

CENT03 というホストに notedemo03 というログインアカウントが作成してあったので、これに手を加えていきます。
\\ 一般ユーザーでは使えないコマンドを打ってみる
[notedemo03@CENT03 ~]$ sudo shutdown -h now 
[sudo] notedemo03 のパスワード: 
notedemo03 は sudoers ファイル内にありません。この事象は記録・報告されます。 👈当然ながら怒られました

\\ 現在所属するグループを表示してみる
[notedemo03@CENT03 ~]$ groups 
notedemo03 👈ユーザー作成の際に自動的に作られた同名の(プライマリ)グループにのみ所属

usermod コマンドにて管理者権限グループに追加

Ubuntu の場合は、sudo グループ、CentOS の場合は wheel グループが特権グループです。

usermod コマンド

\\ 書式
usermod [オプション] ユーザー名

\\ 主なオプション
+-----------------------+---------------------------------------------------------+
| オプション              | 説明                                                     |
+-----------------------+---------------------------------------------------------+
| -c, --comment COMMENT | 「/etc/passwd」のコメント欄(フィールド)を変更する              |
| -d, --home HOME_DIR   | ユーザーのホームディレクトリを変更する                 |
|                       | 現ディレクトリの内容を移動したい場合は「-m」オプションを同時に指定する|
| -m, --move-home       | 現ホームディレクトリの内容を新たな場所に移動する                  |
| -g, --gid GROUP       | 指定したグループを、プライマリグループとして変更する           |
| -G, --groups GROUPS   | プライマリグループ以外を指定、セカンダリーグループを変更する      |
|                       | 変更ではなく追加したい場合は「-a」オプションを同時に指定する      |
| -a, --append          | 「-G」オプションで指定したグループをセカンダリーグループに追加する   |
| -s, --shell SHELL     | デフォルトシェルを変更する                                   |
+-----------------------+---------------------------------------------------------+

特権グループへの追加

\\ root ユーザーでログインし、wheel グループに追加
[root@CENT03 ~]# usermod -G wheel notedemo03 

\\ wheel グループに追加されたか確認
[root@CENT03 ~]# cat /etc/group | grep notedemo03 
wheel:x:10:sysope01,sysope02,notedemo03 👈ちゃんと追加された
notedemo03:x:1005: 

[notedemo03@CENT03 ~]$ groups 
notedemo03 wheel 👈ちゃんと追加された

一応動作も確認してみる

\\ 'sudo'なしだと、読み取り専用
[notedemo03@CENT03 ~]$ vi /etc/hosts 
    ・
    ・
    ・ 
"/etc/hosts" [読込専用] 2L, 158C 

\\ 'sudo'をつけると、ちゃんと編集可能で上書き保存もできるようになっていた
[notedemo03@CENT03 ~]$ sudo vi /etc/hosts 
[sudo] notedemo03 のパスワード:
    ・
    ・
    ・ 

\\ 参考までsudoコマンドの制限設定を確認
\\ 直接/etc/sudoersファイルを開いてはいけない
[root@CENT03 ~]# visudo 
    ・
    ・
    ・ 
%wheel  ALL=(ALL)       ALL 👈wheel グループに所属するユーザは、すべてのユーザとしてすべてのコマンドを実行可能
 
## Same thing without a password 
# %wheel        ALL=(ALL)       NOPASSWD: ALL 👈アンコメントすると、wheelグループに所属するユーザはどこでも、誰でもパスワード無しでsudoが使える
    ・
    ・
    ・ 

\\ 参考までsuコマンドの制限設定を確認
[root@CENT03 ~]# cat /etc/pam.d/su 
#%PAM-1.0 
auth            sufficient      pam_rootok.so 
# Uncomment the following line to implicitly trust users in the "wheel" group. 
#auth           sufficient      pam_wheel.so trust use_uid 
# Uncomment the following line to require a user to be in the "wheel" group. 
auth            required        pam_wheel.so use_uid 👈wheelグループに属しているユーザだけが「su」可能
auth            substack        system-auth 
auth            include         postlogin 
account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet 
account         include         system-auth 
password        include         system-auth 
session         include         system-auth 
session         include         postlogin 
session         optional        pam_xauth.so 

続いて Docker をインストールして usermod する

まずは インストール

公式ドキュメントに従って、インストールを進めます。
\\ まずはパッケージの更新 
[notedemo03@CENT03 ~]$ sudo yum update -y

\\ 'yum-utils'パッケージをインストール
[notedemo03@CENT03 ~]$ sudo yum install -y yum-utils

\\ 'yum-config-managerユーティリティを使ってリポジトリを追加
[notedemo03@CENT03 ~]$ sudo yum-config-manager \ 
>     --add-repo \ 
>     https://download.docker.com/linux/centos/docker-ce.repo

\\ Docker Engine(今回は、'3:18.09.1-3.el7')を選択しインストール
[notedemo03@CENT03 ~]$ sudo yum install docker-ce-3:18.09.1-3.el7 docker-ce-cli-3:18.09.1-3.el7 containerd.io
[sudo] notedemo03 のパスワード:  

今度は 'notedemo03' を 'docker' グループに追加

変更ではなく追加したいので -aG オプションを使用します。
\\ docker-ceをインストールした際に 'docker' グループが自動的に作成されている 
[notedemo03@CENT03 ~]$ cat /etc/group | grep docker 
docker:x:980: 

\\ sudoなしでdocker コマンドを使えるようにするため、環境変数USER(現在のログインユーザーが格納される)を'docker' グループに所属させる 
[notedemo03@CENT03 ~]$ sudo usermod -a -G docker $USER 

\\ ちゃんと追加されたか確認
[notedemo03@CENT03 ~]$ groups
notedemo03 wheel docker 👈追加されていることを確認

\\ dockerサービス起動 
[notedemo03@CENT03 ~]$ sudo systemctl start docker

\\ dockerサービスの自動起動を有効にする
[notedemo03@CENT03 ~]$ sudo systemctl enable docker 
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. 

\\ 一旦ログアウトして再度ログイン 

\\ インストールされたバージョンを確認
[notedemo03@CENT03 ~]$ docker version 
Client: Docker Engine - Community 
Version:           19.03.13 
API version:       1.40 
Go version:        go1.13.15 
Git commit:        4484c46d9d 
Built:             Wed Sep 16 17:03:45 2020 
OS/Arch:           linux/amd64 
Experimental:      false 

Server: Docker Engine - Community 
Engine: 
 Version:          19.03.13 
 API version:      1.40 (minimum version 1.12) 
 Go version:       go1.13.15 
 Git commit:       4484c46d9d 
 Built:            Wed Sep 16 17:02:21 2020 
 OS/Arch:          linux/amd64 
 Experimental:     false 
containerd: 
 Version:          1.3.7 
 GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175 
runc: 
 Version:          1.0.0-rc10 
 GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd 
docker-init: 
 Version:          0.18.0 
 GitCommit:        fec3683

おまけ:せっかくなので Docker を簡単に使用してみる

Ubuntu の公式イメージを pull してきて、コンテナを作成します。
\\ 今回はあえて'latest'ではないイメージを選んだ
[notedemo03@CENT03 ~]$ docker pull ubuntu:xenial-20200903 
xenial-20200903: Pulling from library/ubuntu 
001ecc9468da: Pull complete 
f2b966749869: Pull complete 
abe474042557: Pull complete 
e1bf2fb0fbbc: Pull complete 
Digest: sha256:e02d30494327090a50e9a6575c018d067428ae3abdcadb208e9ecd9cb496cf98 
Status: Downloaded newer image for ubuntu:xenial-20200903 
docker.io/library/ubuntu:xenial-20200903 

\\ 手元にあるイメージを確認
[notedemo03@CENT03 ~]$ docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
ubuntu              xenial-20200903     c871c45b1573        6 days ago          127MB 

\\ 作成するコンテナに'ubuntudemo'と名前をつけ、デタッチドモードで起動
[notedemo03@CENT03 ~]$ docker run -tid --name ubuntudemo ubuntu:xenial-20200903 
207cb9c0440526a56b19635162df488e50fe84b1a2de3ccf9ee5e6f649fe33a9 

\\ 起動しているコンテナを表示
[notedemo03@CENT03 ~]$ docker ps 
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS               NAMES 
207cb9c04405        ubuntu:xenial-20200903   "/bin/bash"         7 seconds ago       Up 6 seconds                            ubuntudemo 

Docker の基本的なコマンドは以下の過去の記事で紹介しているので、よろしければご参考下さい。LinuC レベル1の試験範囲的にはこれで十分ですし、冒頭で紹介している体験記の記事でも紹介していますが、学習環境として大いに役に立ちます。

Windows 環境の場合には、インストール方法が全然異なるのですが、今回の記事では話がぶれるので紹介しません。ただ、Windows PC なんかから気軽に Docker コマンドや Linux が使えてしまうので、普段使いがWindows の方にはぜひインストールをおススメします。

以下の記事が画面ショットも多くわかりやすいと思ったので、ご参考ください。

ついでに:Ubuntu の特権グループを確認してみる

今回の環境は CentOS ゆえに確認できない Ubuntu の部分をせっかくなので、見てみましょう。このような使い方が学習にとても役に立つんですよね。Docker ステキです。
\\ 起動させたコンテナにログイン
[notedemo03@CENT03 ~]$ docker exec -ti ubuntudemo bash 
root@207cb9c04405:/# 👈bashで無事にログイン成功

\\ /etc/group ファイルに記述される'sudo'グループの存在を確認してみる
root@207cb9c04405:/# cat /etc/group | grep wheel
root@207cb9c04405:/# 👈結果が何も返ってこなかった、'wheel'グループが見つからない
root@207cb9c04405:/# cat /etc/group | grep sudo 
sudo:x:27: 👈ubuntuなので'wheel'ではなく'sudo'

いかがだったでしょうか?

テキストを読むだけの受け身の勉強では、資格試験も然り、スキルもなかなか上がっていきません。何より面白くないですよね。

わたしもまだまだ修行中、一緒に高めあっていきましょう。
この記事が少しでも誰かのお役に立てれば幸いです。

もしこの記事が何かの参考になったもしくは面白かったという方は、応援していただけると大変嬉しいです😊 これからもよろしくお願いします。