\ お問い合わせはこちら! /

Ubuntuのユーザー管理とセキュリティ対策【root権限も解説】

  • Ubuntuのユーザーってどんなもの?
  • 普段rootユーザーでログインしてる…
  • セキュリティ対策が気になる

このような方に向けて書きました。

普段 root ユーザーのまま Ubuntu にログインしていませんか?

実は、Ubuntuでユーザー管理をすることはセキュリティ対策に直結します。

そもそも Ubuntu は、複数のユーザーが同時にサーバーを利用することを前提に設計されたOSです。

そのため各ユーザーを管理できないと、セキュリティ的にも好ましくありません。

本記事ではUbuntuのユーザーの内容と具体的なコマンド、ユーザーを扱うときの考え方をご紹介します。

Ubuntu でのユーザーの基本

Ubuntuには2種類のユーザーが存在します。

  • スーパーユーザー(rootユーザー)
  • 一般ユーザー

普段使うのは一般ユーザーなので、スーパーユーザーでログインすることは滅多にありません。

ただしスーパーユーザーの概念はとても重要なので、ここで押さえておきましょう。

よく見るsudoコマンドは、「スーパーユーザー権限」を表します。

スーパーユーザー(rootユーザー)

すべての権限を持つ特別なアカウントです。

何でもできるので、たとえば次のような危険な操作も実行可能。

  • 他のユーザーアカウントの作成や削除
  • システム設定の変更

ご覧の通りスーパーユーザーは強力な権限を持つので、乗っ取られた時など大きなリスクをはらんでいます。

そのためスーパーユーザーでログインすることは滅多になく、むしろスーパーユーザーアカウントによるログインが禁止されることも多いです。

一般的な運用方法としては、一般ユーザーでログインして、必要な時だけスーパーユーザー権限を借りて実行されます。

karo

この「スーパーユーザー権限を借りる時のコマンド」が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
karo

信頼できるユーザーのみ、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のユーザー管理とセキュリティの基本について解説しました。

ユーザー管理をしっかりと行うことで、システム全体の安全性が向上します。

実際にサーバー上でユーザー権限を管理してセキュリティを高めていきましょう。

この記事が気に入ったら
フォローしてね!

シェア・記事の保存はこちら!

この記事を書いた人

karo@プログラマのアバター karo@プログラマ プログラマ

「書くことで人の役にたつ」をモットーに活動中。
本職はプログラマで、Pythonが得意。
基本情報技術者試験合格。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)