来自 root 帐户的 Bash 脚本和用户主目录 (Linux)

Posted

技术标签:

【中文标题】来自 root 帐户的 Bash 脚本和用户主目录 (Linux)【英文标题】:Bash scripting and user home from root account (Linux) 【发布时间】:2009-02-26 15:06:13 【问题描述】:

我正在 bash 中为 Linux 上的应用程序编写安装脚本。

此脚本将一些文件复制到/usr/bin 和/usr/share,因此需要root 用户执行,另外它在$HOME 目录中为配置文件创建了一个隐藏目录。

这里的问题是:如果一个普通用户想要安装程序,他需要是 root。但如果他是 root,$HOME 目录将是 /root/ 而不是 /home/username。

【问题讨论】:

【参考方案1】:

...此外,如果用户 A 安装了软件,但用户 B 运行它,则用户 B 将没有 /home/UserB 下的隐藏目录。此外,/home/UserA 下的隐藏目录将归 root 所有,而不是 userA。

因此,您需要让应用程序创建隐藏目录,而不是安装程序。

另一个可能的选择是不安装在系统目录中;一个可能的替代位置是/usr/local。但是,即使这样也可能需要 root 权限。想想它是否可以安装在其他地方,以及它如何定位它的材料。

但是,需要 root 权限才能安装并不是世界末日 - 对某些人来说是一种麻烦,但并非完全不正常。但是要求使用的每个人都拥有 root 权限是不正常的——如果使用它的每个人都需要运行安装程序,那就不好了。

最后一点(现在):如果你使用sudo,它不会改变$HOME 的值,即使你获得了root 权限。但是,要求使用您的应用程序的每个人都拥有sudo 权限也不是一件好事。

【讨论】:

您可以创建一个新组来运行该命令,并将 sudo 设置为仅允许该组仅运行该命令。查看 visudo 所以他可以简单地要求用户使用 sudo 安装,这样它就有权复制 /usr/bin 中的文件但仍然具有正确的 $HOME 值? +1 用于创建隐藏目录的应用程序。这就是 linux 中大多数应用程序的工作方式。 @Nerdling 和@Wookai:是的,您可以为每个新应用程序创建新组,但这通常被认为过于繁重。是的,您可以使用 sudo 进行安装,但是当安装程序以外的其他用户运行程序时,您仍然需要应用程序来创建目录。【参考方案2】:

你必须使用$HOME吗?也许您可以提示输入用户名并安装到~$username

【讨论】:

应用程序不需要这样做 - 安装程序不应该为每个用户的目录而烦恼。我建议删除它;我没有投反对票,但回复是合法的。

以上是关于来自 root 帐户的 Bash 脚本和用户主目录 (Linux)的主要内容,如果未能解决你的问题,请参考以下文章

Linux常用的知识点总结

Linux系统环境变量加载过程

编写shell脚本,根据登录的用户名自动转到用户主目录

Powershell - 新用户主文件夹权限

Linux中在当前用户(root用户)用户主目录下创建一目录(new)?

linux的常见环境变量