【すぐに使える】Ubuntuターミナルでユーザーを切り替える方法|suとsudoの違いも解説

Linux

「Ubuntuで別ユーザーとして操作したいとき、どうすればいいの?」

Linuxでは、セキュリティの観点から複数のユーザーアカウントで操作を分けるのが基本です。

Ubuntuでも、ターミナルから簡単にユーザーを切り替えることができます。

この記事では、Ubuntuターミナルでユーザーを切り替える方法suとsudoの違い、そして安全な使い方のポイントをわかりやすく解説します。

サーバー管理、開発環境の管理、複数人での作業など、様々な場面で役立つ知識を身につけましょう。

スポンサーリンク

Ubuntuにおけるユーザーと権限の考え方

なぜユーザーを分けるのか?

Linuxシステムでユーザーを分ける理由は、主に以下の3つです:

セキュリティの確保

  • 管理者作業は必要な時だけ行う
  • 誤操作によるシステム破損を防ぐ
  • 不正アクセス時の被害を最小限に抑える

作業の分離

  • 個人設定やファイルを他のユーザーから保護
  • プロジェクトごとに環境を分離
  • 開発環境と本番環境の切り分け

責任の明確化

  • 誰がどの操作を行ったかを記録
  • 複数人での作業時の管理を簡単に
  • 監査やログ追跡が容易

Ubuntuの特殊な設計

Ubuntuには他のLinuxディストリビューションと異なる特徴があります:

rootアカウントを直接使わない

  • デフォルトでrootパスワードは設定されていない
  • sudo方式でセキュリティを向上
  • 管理者権限は必要な時だけ使用

sudoグループの活用

  • インストール時に作成したユーザーは自動的にsudoグループに参加
  • sudoコマンドで管理者権限を一時的に取得
  • パスワードは自分のログインパスワードを使用

ユーザーごとに権限が違うことを理解すれば、ターミナルでの切り替えも納得できます。次に、具体的な切り替え方法を見ていきましょう。

suコマンドでユーザーを切り替える方法

suコマンドの基本

suコマンドは**”switch user”**の略で、現在のシェルから別のユーザーのシェルに完全に切り替わります。

基本構文:

su - <ユーザー名>

使用例:

# johnユーザーに切り替え
su - john

# パスワード入力後、johnのシェル環境に変わる
Password: [johnのパスワードを入力]

-オプションの重要性

suコマンドには-を付けることを強く推奨します:

# 推奨:環境変数も含めて完全に切り替え
su - john

# 非推奨:一部の環境変数が元ユーザーのまま残る
su john

-オプションを付けると:

  • ユーザーのホームディレクトリに移動
  • 環境変数を完全に切り替え先ユーザーのものに変更
  • ログインスクリプト(.bashrcなど)を実行

実際の使用例

開発ユーザーに切り替えて作業:

# 現在のユーザーを確認
whoami
# 出力例:admin

# 開発用ユーザーに切り替え
su - developer
Password: [developerのパスワード入力]

# 切り替わったことを確認
whoami
# 出力例:developer

# 開発作業を実行
cd /home/developer/projects
ls -la

Ubuntuでrootに切り替える場合

Ubuntuでは直接rootになることは推奨されませんが、必要な場合は以下の方法があります:

# 方法1:sudo経由でrootシェルを開始(推奨)
sudo -i

# 方法2:sudo su の組み合わせ
sudo su

# 方法3:rootパスワードを設定済みの場合のみ
su -

注意: Ubuntuではrootパスワードは通常設定されていないため、su -は失敗することが多いです。

suは”切り替え”専用のコマンドです。次は、sudoの観点から一時的に他のユーザーの権限でコマンドを実行する方法を説明します。

sudoを使って他ユーザーのコマンドを実行する

sudoの基本的な使い方

sudoは**”superuser do”**の略ですが、実際には任意のユーザーの権限でコマンドを実行できます。

基本構文:

sudo -u <ユーザー名> <コマンド>

使用例:

# johnユーザーの権限でlsコマンドを実行
sudo -u john ls /home/john

# webユーザーの権限でファイルを作成
sudo -u www-data touch /var/www/html/test.txt

# postgresユーザーでデータベース操作
sudo -u postgres psql

suとsudoの詳細比較

比較項目susudo
パスワード切り替え先ユーザーのもの実行元ユーザーのもの
権限チェック切り替え先パスワードの知識sudoers設定ファイル
利用目的シェルごと完全切り替え単発のコマンド実行
環境変数完全に切り替わる基本的に元のまま
ログ記録限定的詳細なログが残る
セッション管理明示的にexitが必要コマンド終了後は自動で戻る
セキュリティパスワード共有が必要個人認証で権限委譲

実践的な使用例

Webサーバーファイルの管理:

# Apache用ユーザーでファイル作成
sudo -u www-data touch /var/www/html/index.html

# 権限を確認
ls -la /var/www/html/index.html
# 出力例:-rw-r--r-- 1 www-data www-data 0 Jun 20 10:30 index.html

データベース管理:

# PostgreSQLユーザーでデータベース一覧表示
sudo -u postgres psql -l

# MySQLの場合
sudo -u mysql mysqladmin status

開発環境での使用:

# Node.jsアプリを特定ユーザーで実行
sudo -u nodeapp npm start

# ログファイルを特定ユーザーで確認
sudo -u apache tail -f /var/log/httpd/access_log

sudoを使えば、ユーザー切り替えのリスクを最小限にしながら安全な管理が可能になります。次に、切り替え後の操作と元に戻る方法を説明します。

ユーザー切り替えの管理と元に戻る方法

元のユーザーに戻る基本操作

suで切り替えた場合:

# 元のユーザーに戻る
exit

# 複数回切り替えた場合は、その回数分exitが必要
exit
exit  # さらに前のユーザーに戻る

sudoの場合:

  • コマンド実行後は自動的に元のユーザーに戻る
  • sudo -isudo suの場合はexitが必要

現在の状況を確認する方法

基本的な確認コマンド:

# 現在のユーザー名を確認
whoami

# 詳細なユーザー情報を確認
id

# 現在のシェルレベルを確認
echo $SHLVL

実際の確認例:

# 元のユーザー
whoami
# 出力:admin

id
# 出力:uid=1000(admin) gid=1000(admin) groups=1000(admin),27(sudo)

# ユーザー切り替え後
su - developer
whoami
# 出力:developer

id  
# 出力:uid=1001(developer) gid=1001(developer) groups=1001(developer)

セッション管理のベストプラクティス

切り替え履歴の確認:

# 現在のシェルの階層を確認
echo $SHLVL
# 出力例:2(1つ深いシェルにいることを示す)

# プロセスツリーを確認
ps f

安全な切り替えの手順:

  1. 現在のユーザーを確認:whoami
  2. 必要なユーザーに切り替え:su - username
  3. 作業実行
  4. 確実に戻る:exit
  5. 元のユーザーに戻ったことを確認:whoami

複数セッションの管理

複数のターミナルウィンドウを活用:

# ターミナル1:管理者作業用
sudo -i

# ターミナル2:一般ユーザー作業用(元のまま)

# ターミナル3:特定ユーザー用
su - developer

screenやtmuxでセッション管理:

# screenセッションを開始
screen -S admin_work

# 別のウィンドウで別ユーザー
screen -S dev_work
su - developer

応用テクニックとセキュリティ対策

環境変数の引き継ぎ

特定の環境変数を保持したい場合:

# DISPLAYを保持してGUIアプリを起動
sudo -u otheruser -E DISPLAY=$DISPLAY firefox

# 複数の環境変数を指定
sudo -u developer env HOME=/home/developer TERM=$TERM bash

グループ管理との連携

グループメンバーシップの確認:

# 特定ユーザーの所属グループを確認
groups username

# 自分の所属グループを確認
groups

# グループファイルの内容を確認
cat /etc/group | grep username

セキュリティ上の注意点

パスワード管理:

  • suコマンドは切り替え先のパスワードが必要
  • パスワードの共有は最小限に
  • 可能な限りsudoを使用

ログの確認:

# sudo実行履歴の確認
sudo journalctl | grep sudo

# 認証ログの確認
sudo tail -f /var/log/auth.log

権限の最小化:

# 特定のコマンドのみ許可する場合(sudoers編集)
sudo visudo
# 追加例:username ALL=(www-data) NOPASSWD: /usr/bin/systemctl restart apache2

まとめ

Ubuntuのターミナルでユーザーを切り替える方法は主に以下の2つです:

suコマンド(完全切り替え)

  • su - ユーザー名:シェルごと完全に切り替える
  • 切り替え先ユーザーのパスワードが必要
  • 長時間の作業や環境の完全な切り替えに適している
  • 使用後はexitで元に戻ることが重要

sudoコマンド(一時的実行)

  • sudo -u ユーザー名 コマンド:一時的にコマンドだけ別ユーザーで実行
  • 自分のパスワードでsudo権限を使用
  • 単発の管理操作や安全性を重視する場合に適している
  • コマンド終了後は自動的に元のユーザーに戻る

使い分けの指針

  • 短時間の作業:sudoを使用
  • 長時間の開発作業:suを使用
  • セキュリティ重視:sudoを優先
  • 環境の完全分離が必要:suを使用

コメント

タイトルとURLをコピーしました