![为什么我的普通用户可以写入我的 .bashrc 或 .zshrc?](https://linux22.com/image/1614984/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7%E5%8F%AF%E4%BB%A5%E5%86%99%E5%85%A5%E6%88%91%E7%9A%84%20.bashrc%20%E6%88%96%20.zshrc%EF%BC%9F.png)
我的用户 ~/.zshrc 文件具有以下默认权限
-rw-r--r--
我对用户权限的理解是,我的用户产生的任何进程都会对此文件具有读/写权限。
在恶意攻击者手中,这可能会被用来编辑别名或将攻击者选择的目录附加到 $PATH 的开头。我担心我在用户级别安装的恶意程序可能会通过这种方法诱骗我以某种方式泄露我的 sudo 密码。
显然,我相信我安装的大多数程序都不是恶意的,但是,我确实使用 npm 作为我自己项目的包管理器,由于每个模块及其依赖项可能具有的依赖项数量庞大,因此它通常被认为是恶意软件的载体。
我知道运行sudo npm install -g
确实是一种糟糕的做法,但是以对主 shell 配置文件有写权限的用户身份使用 npm 是否同样糟糕,只是中间需要几个额外的步骤,还是我对用户权限/shell 配置/npm 的工作原理缺乏了解?
如果这是不安全的,那么我是否错过了处理 node js 项目的安全良好实践?
答案1
程序将能够更改文件的权限。因此,即使禁用了写入权限,也没有关系……是的,如果您定期运行程序,它将能够做它想做的事情。
为了防止这种情况发生,您有几种解决方案。例如,您可以在容器中运行它,使用 cgroups 或 Linux 命名空间。
如果你想检查配置文件,你可以将它们置于版本控制之下,并在运行新 shell 时检查修改,或者检查一些校验和。但是,从我的角度来看,这不是一个好的解决方案,因为恶意程序可以进行很多不同的黑客攻击,而你只能在一种情况下受到保护。
答案2
我的用户生成的任何进程都将具有读/写权限
是的,你运行的任何程序都可以修改你的 .zshrc 文件。它可以读取和写入您拥有的任何文件。
想一想。获得 sudo 访问权限是一件坏事,但如果没有它,程序可能会造成很大的损害。
... 您信任该程序能自行运行吗?如果不信任,请不要以您自己的身份(绝对不要以 root 身份)在您的机器上运行它。
我是否不了解用户权限/shell 配置/npm 的工作原理
... 也许?比如,你没有错,但你可能想更深入地思考/了解它,特别是如果你对编码和安全感兴趣的话。我之所以这么说,是因为你似乎担心的是真正的漏洞,而不是我认为的真正的威胁 :)。(我是在问题提出几年后才回答的,所以也许你现在已经是这方面的专家了。)
您在自己的帐户中运行的任何程序都可以访问任何文件你拥有!如果您的文件中有任何敏感信息,恶意代码不需要 root 权限。它只需要你运行一次。
(不要做任何您的开发工作sudo
或您自己的机器上的 root 权限。实际上,root 权限还会带来许多其他威胁;我关注这些文件主要是想表明,在某种意义上,事情可能比您想象的更糟糕,以至于您谈论的具体问题微不足道。)
其他人已经提到的想法(使用容器/不同的用户),或者完全使用不同的主机,几乎都只是确保您的个人数据永远不会暴露给危险代码的方法。
另外:如果你不相信它,那么无论你做什么,不要将其作为依赖项包含在您自己的程序中!如果它是恶意的,它会伤害到每个分发它的人。
答案3
为什么 npm 需要主目录?查看我的某个系统上的 /etc/passwd 时,我发现许多进程的主目录都设置为根目录(“/”)、/dev/null 或 /home 下的其他目录(例如 /sbin)。
如果您这样做,就不会有 ~/.zshrc 文件,并且进程的环境将从 /etc/zshrc 继承设置。