Linux中以其它用户身份执行脚本或命令的全总结

Written by

in

文章目录
  • su命令的使用方式有两种, 如下所示: 切换用户只执行一条命令的可以用: su – oracle -c shell_command -c "<命令>": -c 参数告诉 su执行完后面的命令后就退出,而不是启动一个新的交互式shell。 切换用户执行一个shell脚本 su – oracle -s /bin/bash oracle_start.sh 需要注意的是, 这里使用su切换用户有两种方式,即带"-"与不带"-"的方式, 如下所示: su oracle -c <shell_command> 或 su – oracle -c <shell_command>
  • sudo命令,它的作用是“excute a command as another user",默认为root用户,可以用 -u 指定用户名 你有目标用户的 sudo 权限,且只想临时以该用户身份运行脚本。 sudo -u <用户名> <命令或脚本> 与 su 类似,sudo 也可以用来获取一个目标用户的交互式 shell。命令格式: sudo -u <用户名> -i # 或者 sudo -u <用户名> -s -i (模拟初始登录,–login):行为与 su – <用户名> 非常相似,会加载目标用户的环境变量并切换到其主目录。-s (启动 shell, –shell):启动一个 shell,但不一定会完全加载登录环境,行为可能略有不同。通常推荐使用 -i。 不会加载目标用户的完整环境(如 .bashrc),但会加载其基本环境变量(如 $HOME)。
  • runuser 是一个相对小众但非常有用的命令,它与 su 类似,但设计初衷是让 root 用户在切换到其他用户身份时无需输入密码,并且不通过PAM(Pluggable Authentication Modules)进行认证。这使得它比su更快,并且更适合在脚本中使用。 runuser -u <用户名> — <命令或脚本路径>
  • 目录
    • su命令(switch user)
      • 两者的区别
      • su <用户名> (不带横杠)
      • su – <用户名> (带横杠)
    • sudo 命令
      • 优点:
      • 缺点:
    • runuser 命令
      • 优点:
      • 缺点:

    在Linux中以其他用户身份执行命令或脚本是一个常见的需求,最近工作中碰到了这个需求,在这里简单总结一下.假如我们在root用户下想以其它用户(例如oracle,mysql)身份执行一些脚本或命令,那么有哪一些方法呢?

    su命令的使用方式有两种, 如下所示:

    • 切换用户只执行一条命令的可以用:
    su - oracle -c shell_command

    -c "<命令>": -c 参数告诉 su执行完后面的命令后就退出,而不是启动一个新的交互式shell。

    • 切换用户执行一个shell脚本
    su - oracle -s /bin/bash oracle_start.sh

    需要注意的是, 这里使用su切换用户有两种方式,即带"-"与不带"-"的方式, 如下所示:

    su oracle -c <shell_command>
    或
    su - oracle -c <shell_command>

    这是非登录式切换。

    • 行为:它会切换当前的用户身份(UID 和 GID),但不会改变当前的shell环境。
    • 环境变量:大部分环境变量(如 PATH, HOME, USER, PS1 等)仍然保持为切换之前的用户的环境变量。
    • 工作目录:当前的工作目录(PWD)也不会改变。
    • 本质:你只是 “穿上了另一个用户的马甲”,但所处的 “房间”(环境)还是原来的。

    适用场景:当你需要临时以另一个用户身份执行一个或几个命令,并且希望利用当前的环境(比如当前目录、已经设置好的变量)时。
    缺点: 如果是非root用户,需要知道目标用户的密码. 不适合自动化脚本.

    这是登录式切换。

    • 行为:它会模拟一个完整的、全新的用户登录流程。
    • 环境变量:它会加载目标用户(例如oracle)的所有环境变量配置文件(如 /etc/profile, ~/.bash_profile, ~/.bashrc 等),并使用这些变量来构建一个全新的环境。
    • 工作目录:工作目录会自动切换到目标用户的主目录(/home/oracle)。
    • 本质:你完全"进入了另一个用户的房间",使用的是它的所有配置和环境。

    适用场景:当你需要完全进入另一个用户的角色,执行一系列操作,或者运行依赖于该用户特定环境变量的脚本时。这是更常见和推荐的用法。

    sudo命令,它的作用是“excute a command as another user",默认为root用户,可以用 -u 指定用户名

    你有目标用户的 sudo 权限,且只想临时以该用户身份运行脚本。

    sudo -u <用户名> <命令或脚本>

    与 su 类似,sudo 也可以用来获取一个目标用户的交互式 shell。命令格式:

    sudo -u <用户名> -i
    # 或者
    sudo -u <用户名> -s

    -i (模拟初始登录,–login):行为与 su – <用户名> 非常相似,会加载目标用户的环境变量并切换到其主目录。
    -s (启动 shell, –shell):启动一个 shell,但不一定会完全加载登录环境,行为可能略有不同。通常推荐使用 -i。

    不会加载目标用户的完整环境(如 .bashrc),但会加载其基本环境变量(如 $HOME)。

    • 安全性高:执行命令时验证的是执行者自己的密码,而不是目标用户的密码。
    • 权限控制精细:通过 /etc/sudoers 可以精确控制哪个用户能以哪个身份执行哪些命令。
    • 易于审计:所有 sudo 操作都会被记录在系统日志中(通常在 /var/log/auth.log 或 /var/log/secure)。

    • 需要管理员预先配置 /etc/sudoers 文件,对于临时一次性操作可能略显繁琐。
    • 这些方式也不适合在脚本中使用.

    runuser 是一个相对小众但非常有用的命令,它与 su 类似,但设计初衷是让 root 用户在切换到其他用户身份时无需输入密码,并且不通过PAM(Pluggable Authentication Modules)进行认证。这使得它比su更快,并且更适合在脚本中使用。

    runuser -u <用户名> -- <命令或脚本路径>

    • root 用户使用时无需密码,非常适合在自动化脚本(如 cron, systemd service)中使用。
    • 性能比 su 稍好。

    • 功能不如 sudo 强大和灵活。
    • 通常只有 root 用户可以使用 runuser 切换到其他用户。

    到此这篇关于Linux中以其它用户身份执行脚本或命令总结的文章就介绍到这了,更多相关Linux中以其它用户身份执行脚本或命令总结内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Linux中以其它用户身份执行脚本或命令的全总结
    • 在linux shell脚本中root切换到普通用户执行脚本或命令的方法
    • Linux用户建立脚本/猜字游戏/网卡流量监控介绍
    • linux系统中的列出敏感用户的脚本代码
    • linux记录用户登录日志与命令执行日志方式
    • Linux用户管理与常见权限命令
    • Linux系统用户管理命令小结

    站内搜索