linux - 以 root 身份运行 bash 安装脚本 - 如何处理普通用户的文件?

标签 linux bash permissions

我正在编写一些 bash 脚本来安装和配置一些程序。
因为脚本需要安装包——我以 root 身份运行脚本——这本身没有问题(即我有 root 权限等)。

然而,一旦安装了软件包,脚本就需要配置普通用户文件和获取插件等,例如

  • sed i s/xxx/mod_to_make/ <user_config_file>
  • git clone <plugin>
  • wget <plugin>
  • 等等

理想情况下,我会以普通用户的身份执行此操作,因为我不希望这些 git 存储库和文件由 root 拥有,

一个示例程序片段是这样的

#! /bin/bash

# Because this statement needs to be run as root - the entire script is 
# also run as root
apt-get install -y tmux

cat << EOF > ~/.tmux.conf
# 
# config stuff
#
EOF

我是否需要在脚本末尾手动将文件权限恢复给普通用户,例如

chown $USER:$USER ~/.tmux.conf 
chmod 755 ~/.tmux.conf 

或者编写 2 个单独的脚本,一个由 root 运行,另一个作为普通用户运行?

或者有更好的方法来处理这个问题吗?

最佳答案

仅仅因为我们通常将sudo作为成为root的手段,并不意味着它不能被root用来成为用户。

因此只需在您需要以 $USER 身份运行的命令前加上

sudo -u $USER ....

为了更容易将所有代码集中在一个脚本中,将所有根代码收集到一个函数中,将所有用户代码收集到另一个函数中,然后以 root 身份运行脚本,然后它可以以 USER 身份运行相同的脚本。我们检查运行脚本的人的 ID 并执行一个或另一个功能。例如:

#!/bin/bash
rootstuff(){
  ....
  [ "$USER" != root ] && sudo -u $USER $0
}
userstuff(){
  ....
}

if [[ $(id) = uid=0* ]]
then  echo root
      rootstuff
else  echo user
      userstuff
fi

确保 USER 不是 root。

关于linux - 以 root 身份运行 bash 安装脚本 - 如何处理普通用户的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31365608/

相关文章:

c - 远程套接字上 select() 的行为已关闭(通过终止进程)

regex - 如何使用 grep 从文件中检索匹配的文本?

bash - 如何使用 sed 或 awk 添加到包含模式的行的末尾?

bash - 函数名在 bash 中有效但在 sh 中无效

targetAPI = 29 和设备的 Android 版本上的 Android ACTIVITY_RECOGNITION <10

linux - 定义代码段

linux - 尝试制作一个 bash 脚本来重新启动某个目录中的所有服务

regex - 用于更新 ssl.conf 中 SSL 证书文件路径的 Bash 脚本(RegEx 单词与 # 匹配)

php - 制作权限系统的有效方法是什么?

linux - 关于apache文件的权限