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'
いかがだったでしょうか?
テキストを読むだけの受け身の勉強では、資格試験も然り、スキルもなかなか上がっていきません。何より面白くないですよね。
わたしもまだまだ修行中、一緒に高めあっていきましょう。
この記事が少しでも誰かのお役に立てれば幸いです。
もしこの記事が何かの参考になったもしくは面白かったという方は、応援していただけると大変嬉しいです😊 これからもよろしくお願いします。