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ファイルの書式
第1 | linux8weeks | ユーザー(アカウント)名 |
第2 | x | パスワード |
第3 | 1000 | ユーザーID |
第4 | 1000 | グループ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
第1 | linux8weeks | ユーザー(アカウント)名 |
第2 | x | パスワード |
第3 | 1000 | ユーザーID |
第4 | 1000 | グループID |
第5 | SuperUser | コメント |
第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をインストールします。
コメント