Linux su コマンド

Linux 命令大全Linux コマンド大全

Linux su(英語の正式名称:switch user)コマンドは、ユーザーIDを切り替えるためのコマンドです。root以外の場合、そのユーザーのパスワードを入力する必要があります。

使用権限:すべてのユーザー。

構文

su [选项] [用户名]

例:

su              # 切换到root,保持当前环境
su -            # 切换到root,加载root的完整环境
su root         # 明确指定切换到root用户

他のユーザーに切り替える:

su username
su - username
su -l username

パラメータの説明:

  • - 或 -l 或 --login: 直接ログインに似た環境を提供する
  • -c command: 指定したコマンドを実行して終了する
  • -s shell: 使用するシェルを指定する
  • -p 或 --preserve-environment: 現在の環境変数を保持する

例

一時的にrootとしてコマンドを実行する:

su -c "apt update && apt upgrade" root

サービスユーザーに切り替えてデバッグする:

su - www-data
su -s /bin/bash www-data  # 如果默认shell是/bin/false

スクリプトで使用する:

su - postgres -c "psql -c 'SELECT version();'"

su セッションを終了する:

exit        # 退出当前su会话
Ctrl+D      # 同样可以退出

su と su - の違い

su(非ログイン切り替え):

  • 現在のユーザーの環境変数を保持する
  • 作業ディレクトリは変更されない
  • PATHなどの環境変数は変更されない

su -(ログイン切り替え):

  • 対象ユーザーの完全な環境を読み込む
  • 対象ユーザーのホームディレクトリに切り替える
  • PATH、HOMEなどの環境変数を再設定する
  • 対象ユーザーのログインスクリプトを実行する

比較例

# 当前用户:john,工作目录:/home/john
pwd                    # /home/john
echo $HOME            # /home/john

su root
pwd                   # /home/john (目录未变)
echo $HOME           # /home/john (环境未变)
exit

su - root
pwd                  # /root (切换到root家目录)
echo $HOME          # /root (完整环境)
exit

su vs sudo の違い

特徴 su sudo
パスワードが必要 対象ユーザーのパスワード 現在のユーザーのパスワード
セッションの継続 手動でexitするまで 単一コマンドまたは短期間のキャッシュ
設定の複雑さ 簡単 sudoersの設定が必要
セキュリティ rootパスワードを知っている必要がある より細かい権限制御
監査 限定的 より詳細なログ

su コマンドはシンプルで直接的ですが、現代のシステム管理では、sudo の方がより良いセキュリティと監査機能を提供するため、通常は sudo が推奨されます。


セキュリティに関する注意事項

  • rootパスワードの共有を避ける
  • 使用するsu -完全な環境切り替えを確保する
  • suセッションを速やかに終了する
  • 本番環境ではsudoの使用を優先する
  • suの使用ログを監視する(通常は/var/log/auth.log)

Linux 命令大全Linux コマンド大全

その他の拡張