- Ubuntuのユーザーってどんなもの?
- 普段rootユーザーでログインしてる…
- セキュリティ対策が気になる
このような方に向けて書きました。
普段 root ユーザーのまま Ubuntu にログインしていませんか?
実は、Ubuntuでユーザー管理をすることはセキュリティ対策に直結します。
そもそも Ubuntu は、複数のユーザーが同時にサーバーを利用することを前提に設計されたOSです。
そのため各ユーザーを管理できないと、セキュリティ的にも好ましくありません。
本記事ではUbuntuのユーザーの内容と具体的なコマンド、ユーザーを扱うときの考え方をご紹介します。
Ubuntu でのユーザーの基本
Ubuntuには2種類のユーザーが存在します。
- スーパーユーザー(rootユーザー)
- 一般ユーザー
普段使うのは一般ユーザーなので、スーパーユーザーでログインすることは滅多にありません。
ただしスーパーユーザーの概念はとても重要なので、ここで押さえておきましょう。
スーパーユーザー(rootユーザー)
すべての権限を持つ特別なアカウントです。
何でもできるので、たとえば次のような危険な操作も実行可能。
- 他のユーザーアカウントの作成や削除
- システム設定の変更
ご覧の通りスーパーユーザーは強力な権限を持つので、乗っ取られた時など大きなリスクをはらんでいます。
そのためスーパーユーザーでログインすることは滅多になく、むしろスーパーユーザーアカウントによるログインが禁止されることも多いです。
一般的な運用方法としては、一般ユーザーでログインして、必要な時だけスーパーユーザー権限を借りて実行されます。
この「スーパーユーザー権限を借りる時のコマンド」がsudo
です。
一般ユーザー
一般ユーザーは、いわゆる普通のユーザーです。
特別な権限がないので次のようなことはできません。
- システム全体に影響を与えるコマンド
- 重要なファイルへのアクセス
これにより、誤操作リスクを最小限にできます。
一方でデプロイ作業をする場合などは、一般ユーザーだと権限が足りなくて仕事ができません。
そこで、あらかじめ信頼できる特定の一般ユーザーに対してスーパーユーザー権限を与えるしくみがあります。
それが「sudo
グループ」です。
つまりsudo
グループに属する一般ユーザーは、スーパーユーザー権限を借りることができるようになります。
ただし、いつでもスーパーユーザー権限で実行されるわけではありません。
コマンドの先頭にsudo
をつけた場合だけスーパーユーザー権限で実行されます。
# 一般ユーザーとして実行
touch ~/myfile.txt
# スーパーユーザー権限で実行
sudo touch /etc/myconfig.conf
以下にsudo
に関する重要な点をお伝えします。
sudo
実行にはパスワードが必要sudo
を使うと実行履歴が残るsudo
できる範囲の調整が可能sudo
グループにいるユーザーのみ実行可能
一般ユーザーでログインする以上、sudo
はなくてはならないコマンドです。
つまりスーパーユーザーを無効にしつつ、必要な時だけsudoグループにいる一般ユーザーがスーパーユーザー権限で操作できるというわけです。
ユーザーの初期設定に必要なコマンド
まずは、ユーザー作成時に必要なコマンドをお伝えします。
新しいユーザーを追加する際、参考にしてください。
新しいユーザーの作成
基本的にはユーザー1人につき1アカウントを発行します。
ユーザーが増えたら、次のコマンドでアカウントを増やしましょう。
sudo adduser ユーザー名
コマンド実行後に色々聞かれますが、パスワードだけが必須項目です。
root~# sudo adduser newuser
ユーザー `newuser' を追加しています...
新しいグループ `newuser' (1000) を追加しています...
新しいユーザー `newuser' (1000) をグループ `****' に追加しています...
ホームディレクトリ `/home/newuser' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードは正しく更新されました
karo のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
フルネーム []:
部屋番号 []:
職場電話番号 []:
自宅電話番号 []:
その他 []:
以上で正しいですか? [Y/n] Y
パスワード以外の項目は、管理者などから特別な指示がない限り空欄で大丈夫です。
その場合は何も入力せずにEnterキーを押して進みましょう。
新しいユーザーをsudoグループに追加
新しいユーザーをsudo
グループに追加する方法です。
sudo usermod -aG sudo ユーザー名
上記を実行すると、対象のユーザーはsudo
コマンドを実行できるようになります。
sudo
グループへの追加が成功したかはgroup
コマンドで確認できます。
groups ユーザー名
# ユーザー名 sudo
sudo
が返ってきたら成功です。
ちなみにsudo
権限を誰にでも付与するのは危険です。
スーパーユーザー権限はどんな操作でもできてしまうので、信頼できるユーザーのみに限定して付与しましょう。
もしも役割が変わるなどしてスーパーユーザー権限が不要になったら、以下のコマンドでグループから外すことも検討しましょう。
sudo deluser ユーザー名 sudo
信頼できるユーザーのみ、sudoグループに追加しましょう。
SSH公開鍵認証を有効化しておく
SSH関連のセキュリティ対策をしていきます。
この後にパスワード認証によるSSHログインを無効化するので、まずは新しいユーザーが公開鍵で入れるように設定を進めます。
そうしないと新しいユーザーは自力でログインできなくなってしまいます。
最初にローカルでキーペアを作りましょう。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
これで.ssh
ディレクトリに以下のキーペアが作成されます。
鍵の種類 | ファイル名 |
---|---|
秘密鍵 | id_rsa |
公開鍵 | id_rsa.pub |
ここではSSH公開鍵の詳しい説明は省いたので、よく分からない方は次の記事をどうぞ。
» 参考:【もう怖くない】どこよりも分かりやすいSSH接続入門と実践テクニック
あとは以下のコマンドをUbuntuサーバー側で実行して公開鍵を置くだけです。
mkdir -p /home/newuser/.ssh
chmod 700 /home/newuser/.ssh
echo "your-public-key" >> /home/newuser/.ssh/authorized_keys
chmod 600 /home/newuser/.ssh/authorized_keys
chown -R newuser:newuser /home/newuser/.ssh
このままこのターミナルは閉じないで、別のターミナルを開きます。
念のため、新しいターミナルで公開鍵を使ったログインができるか試してみましょう。
ssh newuser@ipaddress
パスワードなしでWelcome to Ubuntu~
が返ってくれば、鍵の設定は成功です。
SSHログインとパスワード認証の設定
SSH関連の設定を変更するため、sshd_config
を編集しにいきます。
vi /etc/ssh/sshd_config
スーパーユーザーのSSHログインを禁止
まずは、スーパーユーザーのSSHログインを禁止します。
# スーパーユーザーのSSHログイン禁止
PermitRootLogin no
特にスーパーユーザーが不正ログインされると被害が甚大なので、SSH接続を禁止しておくことはセキュリティ対策として重要です。
パスワード認証を無効化
不正なログインを防ぐためにも、パスワードによるログインも無効化します。
# パスワード認証の無効化
PasswordAuthentication no
これにより公開鍵認証を強制でき、セキュリティが向上します。
ホームディレクトリの権限を設定
本人以外の人がホームディレクトリにアクセスできないようにします。
chmod 700 /home/ユーザー名
このコマンドにより、本人以外はホームディレクトリにアクセスができなくなります。
ファイアウォールの設定
ファイアウォールを有効化して、SSHアクセスは許可しつつ不要なポートは閉じます。
sudo ufw allow OpenSSH
sudo ufw enable
運用中に行う設定など
パスワードを定期的に変更する
セキュリティ確保のため、ユーザーに対して定期的にパスワード変更を求める設定ができます。
パスワードの有効期限を90日にする場合は、次のコマンドです。
sudo chage -M 90 ユーザー名
特定ユーザーのパスワード期限を確認するには、次のコマンドです。
sudo chage -l ユーザー名
また、パスワードの設定にあたっては強力なパスワードを設定するようにしてください。
/etc/login.defs
でパスワードポリシーの設定もできます。
不要なユーザーを無効化・削除する
使っていないユーザーは「無効化」または「削除」をします。
復元の可能性があれば「無効化」を、二度と使うことがなければ「削除」です。
# アカウントを無効化
sudo usermod -L ユーザー名
# アカウントを削除(ホームディレクトリを残す)
sudo deluser ユーザー名
# アカウントを削除(ホームディレクトリも削除)
sudo deluser --remove-home ユーザー名
不要なアカウントを残すと、セキュリティリスクが高まります。
必要最小限のユーザーだけを残すようにしましょう。
アクセスログの監視
不正アクセス・異常なログインを察知するため、ログファイルを定期的にチェックします。
ユーザーのログイン履歴を確認場合は次のコマンドです。
# ログイン履歴、シャットダウン履歴を表示
last
# 現在ログイン中のユーザーを表示
who
認証に関する履歴はauth.log
を参照しましょう。
認証とは、ログイン・認証エラー・sudoコマンドの実行履歴などです。
sudo grep 'sudo' /var/log/auth.log
システム全体のログはsyslog.log
を参照すると良いです。
sudo grep 'sudo' /var/log/syslog
特に管理者権限を持つユーザーやサーバーにアクセスするユーザーは、ログを定期的に監視することが重要です。
グループを管理する
運用中にユーザーの役割が変わったら、グループに追加してアクセス権限を管理します。
# 現在のユーザーのグループを確認
groups ユーザー名
# ユーザーのグループを変更
sudo usermod -aG グループ名 ユーザー名
まとめ
本記事では、Ubuntuのユーザー管理とセキュリティの基本について解説しました。
ユーザー管理をしっかりと行うことで、システム全体の安全性が向上します。
実際にサーバー上でユーザー権限を管理してセキュリティを高めていきましょう。
コメント