02-03 rootでSSHログインすることを禁止する

rootというアカウントがどれほどの権限を持っているのか理解できているあなたは、rootでsshログインできることのリスクがお分かりでしょう。

今までrootを使ってサーバーにログインしていましたが、今後はそれを禁止します。

えっ?じゃあどうやってログインすればいいんですか?

ブロンズメンバーであれば想像できるようになっているはずです。

rootを使わないのだから別のアカウントが必要ということですね!

ログインとユーザー識別の仕組み

Linuxは、あらかじめ登録されたユーザーしか利用することはできません。

パスワード認証方式

通常は、登録されているユーザーがログインを許された人かどうかをパスワードで確認します。

公開鍵認証方式

SSHによるリモートログインでは、公開鍵認証方式を使うこともできます。

公開鍵認証方式は、ssh-keygenコマンドで生成した公開鍵をサーバー側に登録して、秘密鍵をWindowsのRLoginやMac側に組み込むことでパスワードを入力せずにログインすることもできる鍵認証のこと。

機会がありましたら、公開鍵認証方式の設定についても説明したいと思います。

マルチユーザーシステム

ログインは作業の開始のためだけではなくて、Linuxを利用しているユーザーが誰かを識別するためにも使われています。これにより、複数人で同時にシステムを利用できるようにしています。

ユーザーはLinuxを利用する基本単位ですが、複数のユーザーをまとめて「グループ」という単位で管理することもできます。

このことを念頭に動画をご覧ください。

動画講座 rootログインは原則禁止

一般ユーザーの追加と削除

ユーザーを追加するコマンドはuseraddです。

useraddコマンド

useradd linux8weeks

ユーザーを追加すると3つのファイルに追加したユーザーの情報が書き込まれます。

ユーザー操作で利用される3つのファイル

ファイル名説明
/etc/passwdユーザーアカウント情報
/etc/shadow暗号化されたパスワードと関連情報
/etc/groupグループ情報

passwdファイル

追加したユーザーが/etc/passwdファイルに登録されたことを確認します。

grep linux8weeks /etc/passwd

passwdファイルの書式

第1linux8weeksユーザー(アカウント)名
第2xパスワード
第31000ユーザーID
第41000グループID
第5コメント
第6/home/linux8weeksホームディレクトリ
第7/bin/bashログインシェル

userdelコマンド

ユーザーを追加する方法があれば、削除する方法もあります。

ユーザーを削除するコマンドはuserdelを使います。

ここで一度、linux8weeksを削除してみましょう。

userdel -r linux8weeks

オプションの「-r」を付けると、useraddしたときに作成されたlinux8weeksのホームディレクトも同時に削除されます。

シェルとコメントを指定してユーザーを追加

以下のようにコマンドにオプションを追加すれば、シェルやコメントを指定することもできます。

useradd -s /bin/false -c SuperUser linux8weeks

/etc/passwdの第5フィールドのコメントと第7フィールドのログインシェルが以下のように追加されたか確認してみましょう。

grep linux8weeks /etc/passwd
第1linux8weeksユーザー(アカウント)名
第2xパスワード
第31000ユーザーID
第41000グループID
第5SuperUserコメント
第6/home/linux8weeksホームディレクトリ
第7/bin/falseログインシェル

確認が終わったら、もう一度linux8weeksを削除して、オプションを付けずにlinux8weeksをuseraddコマンドで追加してください。

userdel -r linux8weeks
useradd linux8weeks

パスワードの設定

簡単なパスワードを設定しようとすると、クラッキングされるリスクが高くなります。

cracklib-checkコマンド

動画でNeo隊長が設定しようとしたパスワードは、「Jukuch0u」でした。

登録しようとするパスワードが、クラッキングに使われる辞書により破られる可能性があるか否か、cracklib-checkコマンドでチェックすると、

echo “Jukuch0u” | cracklib-check
Jukuch0u: 辞書の単語に基づいています

と表示され、リスクがあることを告げられました。

「辞書の単語に基づいています」と表示されたものは絶対に登録しないでください。

mkpasswdコマンド

人の頭で考えたパスワードよりも、mkpasswdで生成したパスワードにアレンジするなどしてもいいと思います。

mkpasswd

理想的なパスワードは、大文字、小文字、半角の記号、数字を、組み合わせた8文字以上のものを使うようにしてください。

passwdコマンド

設定するパスワードが決まったら、passwdコマンドでパスワードを設定します。

passwd linux8weeks

このコマンドを入力するとパスワードと確認用パスワードの入力を求められます。

/etc/shadow

grep linux8weeks /etc/shadow

パスワードを設定後、/etc/shadowを確認すると暗号化されたパスワードが第2フィールドに入っています。

設定したパスワードは忘れないように、また人目につくようなことがないように厳重に保管してください。

パスワードは頭で記憶するのではなくて、設定したパスワードを何度もタイプして指に覚えさせます。

だからパスワードを口に出して言えませんし、いつも使っているキーボードの配列が変わると、なかなかログインできなくなります。

rootパスワードの変更方法

rootユーザーのままpasswdと入力すれば、rootのパスワードを変更することができます。

passwd

sudoの設定

この時点でlinux8weeksを使ってsshログインすることはできますが、その前にlinux8weeksユーザーには管理者権限で操作できるように設定したいと思います。

具体的にはシステムでsudoの設定が有効になっていることを確認して、linux8weeksを /etc/group の wheel というグループに登録すれば管理者権限を与えることができます。

まず最初に、linux8weeksが/etc/passwdに登録されていることと、第7フィールドのシェルが、/bin/bashになっていることも確認してください。

grep linux8weeks /etc/passwd

もし存在していなかったりシェルが/bin/falseとなっていたら、一度userdelでlinux8weeksを削除するか、viで/etc/passwdのシェルの部分を/bin/bashに書き換えてください。

そらから、linux8weeksのパスワードは設定していますか?

sudoが有効であるのか確認

visudo

viと同じモードでsudoの設定ファイルを編集できるコマンドです。

ここでwheelという文字列を検索してみましょう。チェックする文字列は、

%wheel ALL=(ALL) ALL

と書かれた行です。行頭に#でコメントアウトされていないことを確認してください。

CentOS 8ではもう一箇所、root ALL=(ALL) ALL と書かれた行のすぐ下に、以下の行を追加してください。

linux8weeks     ALL=(ALL)       ALL

wheelグループにlinux8weeksを追加

wheelグループにlinux8weeksを追加します。

usermod -G wheel linux8weeks

設定はこれだけ、grepで確認してみましょう。

grep linux8weeks /etc/group

結果はこのように表示されていると思います。

wheel:x:10:linux8weeks
linux8weeks:x:1000:

wheelグループからlinux8weeksを削除

IT業界にいると、デザイナーやプログラマーのようなフロントエンドエンジニアが、教育や業務上の理由によって、バックエンドエンジニアの部署に配属されることがあります。

またその逆もあるのですが、そのような時にsudoを使って管理者権限を付与したり剥奪したりします。

linux8weeksをwheelグループから削除する方法は2つ。

/etc/groupをviで編集する方法

一つ目はviで/etc/groupを編集する方法です。

vi /etc/group

wheelの行を検索してlinux8weeksを削除するだけで管理者権限はなくなります。

gpasswdコマンドで削除する方法

もう一つはgpasswdコマンドで削除する方法です。

gpasswd -d linux8weeks wheel

このコマンドで、linux8weeksから管理者権限を剥奪することができます。

それではもう一度、wheelグループにlinux8weeksを追加して管理権限を付与します。

usermod -G wheel linux8weeks

suコマンド

suってなんの略なのか、「super user」だったり「switch user」だったり、諸説ありますが、なんの略だろうと疑問に思ったら、

man su

と入力すれば答えは得られます。

suコマンドは現在ログインしているユーザーのまま、別のユーザーになり代って操作をする時に使います。

例えば、一般ユーザーのlinux8weeksでログインしているけど、ログアウトせずにroot権限で作業する必要がある時などです。

今はrootでログインしているのでsuでlinux8weeksに切り替えてみましょう。

su linux8weeks

今まで#だったプロンプトが、$に変わったのに気付きましたか?

通常Linuxでは、一般ユーザーは「$」、rootは「#」のプロンプトが表示されます。

whoamiコマンド

whoamiコマンドで、現在のユーザーを表示させてみます。

whoami

結果はこのように表示されるはずです。

linux8weeks

groupsコマンド

次に、groupsコマンドで現在のlinux8weeksが属しているグループを表示させてみます。

groups

このように表示されると思います。

linux8weeks wheel

一般ユーザーでログイン

それでは、今接続しているターミナルはそのままに、新しくターミナルを開きユーザー名を変更してSSHログインしてみましょう。

Windows Rlogin

WindowsのRLoginは、User Nameに「linux8weeks」と設定したパスワードを入力してください。

Mac ターミナル

Macのターミナルでは

ssh linux8weeks@サーバーのIPアドレス -p 10022

と入力して、設定したパスワードを入力してください。

rootでSSHログインを禁止する設定

linux8weeksでSSHログインしたら、rootユーザーではsshログインできないようにします。

まずは、/etc/ssh にカレントディレクトリを移動します。

cd /etc/ssh

そしてsshd_config のバックアップを取ります。

前回は sshd_config.org というファイル名でコピーをしましたが、ファイルを上書きしてしまうことになりますので2回目以降は慣例的にタイムスタンプ(yyyymmdd)を付加してバックアップするといいでしょう。

sudo cp -p sshd_config sshd_config.20180803

sshd_configは一般ユーザーが開いたり編集することはできないパーミッションとなっています。通常のコマンドの前にsudoを付加することで、管理者と同じ操作ができるようになります。

sshd_configのバックアップを取ったらviで編集をします。

PermitRootLogin noに設定

sshd_config ファイル中のPermitRootLogin yesとなっている箇所をPermitRootLogin noに書き換えます。

sudo vi sshd_config

SSHサーバーのリスタート

sshd_config の編集後、SSHサーバーのリスタートをします。

sudo systemctl restart sshd

ここまでの作業が完了したら、rootを使ってSSHログインができなくなっていることを確認してください。

次の講座はいよいよWebサーバーApacheをインストールします。

関連記事

コメント

この記事へのコメントはありません。

おすすめ記事

  1. 【多段SSH】公開鍵認証で中継サーバー経由のログインが簡単!

  2. インターネットに繋いだサーバーで最初にやらなければならない設定

  3. Swapアウトしているプロセスを特定する方法

  4. Linuxを極めるならコマンドよりも〇〇が先だ!!

  5. お名前ドットコムのDNS設定方法