Linux中以其它用户身份执行脚本或命令的全总结
Linux中以其他用户身份执行命令或脚本是一个常见的需求,最近工作中碰到了这个需求,在这里简单总结一下.假如我们在root用户下想以其它用户(例如oracle,mysql)身份执行一些脚本或命令,那么有哪一些方法呢?su命令(switch user)su命令的使用方式有两种, 如下所示:切换用户只执行一条命令的可以用:1su- oracle -c shell_command-c 命令: -c 参数告诉 su执行完后面的命令后就退出而不是启动一个新的交互式shell。切换用户执行一个shell脚本1su- oracle -s/bin/bashoracle_start.sh需要注意的是, 这里使用su切换用户有两种方式,即带-与不带-的方式, 如下所示:123suoracle -c shell_command或su- oracle -c shell_command两者的区别su 用户名 (不带横杠)这是非登录式切换。行为它会切换当前的用户身份UID 和 GID但不会改变当前的shell环境。环境变量大部分环境变量如 PATH, HOME, USER, PS1 等仍然保持为切换之前的用户的环境变量。工作目录当前的工作目录PWD也不会改变。本质你只是 “穿上了另一个用户的马甲”但所处的 “房间”环境还是原来的。适用场景:当你需要临时以另一个用户身份执行一个或几个命令并且希望利用当前的环境(比如当前目录、已经设置好的变量)时。缺点: 如果是非root用户,需要知道目标用户的密码. 不适合自动化脚本.su - 用户名 (带横杠)这是登录式切换。行为它会模拟一个完整的、全新的用户登录流程。环境变量它会加载目标用户(例如oracle)的所有环境变量配置文件如 /etc/profile, ~/.bash_profile, ~/.bashrc 等并使用这些变量来构建一个全新的环境。工作目录工作目录会自动切换到目标用户的主目录(/home/oracle)。本质你完全进入了另一个用户的房间使用的是它的所有配置和环境。适用场景:当你需要完全进入另一个用户的角色执行一系列操作或者运行依赖于该用户特定环境变量的脚本时。这是更常见和推荐的用法。sudo 命令sudo命令它的作用是“excute a command as another user默认为root用户可以用 -u 指定用户名你有目标用户的 sudo 权限且只想临时以该用户身份运行脚本。1sudo-u 用户名 命令或脚本与 su 类似sudo 也可以用来获取一个目标用户的交互式 shell。命令格式123sudo-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 命令runuser 是一个相对小众但非常有用的命令它与 su 类似但设计初衷是让 root 用户在切换到其他用户身份时无需输入密码并且不通过PAM(Pluggable Authentication Modules)进行认证。这使得它比su更快并且更适合在脚本中使用。1runuser -u 用户名 -- 命令或脚本路径优点root 用户使用时无需密码非常适合在自动化脚本如 cron, systemd service中使用。性能比 su 稍好。缺点功能不如 sudo 强大和灵活。通常只有 root 用户可以使用 runuser 切换到其他用户。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2477608.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!