为什么其他用户可以看到我家目录中的文件?

我刚刚添加了一个新的、弱势的“桌面用户”,令我惊讶的是它可以看到我个人文件夹中的文件。
为什么要设置如此宽松的权限呢?

1相关链接:http://unix.stackexchange.com/a/315197/85039 - Sergiy Kolodyazhnyy
7个回答

在您的主目录(/home/user)中存在一个名为“Public”的文件夹,用于与其他用户共享文件。如果其他用户想要访问此“Public”文件夹,则应在主目录上设置“全局执行权限位”。
如果您不需要允许其他人访问您的主文件夹(其他人或像Web服务器的“www-data”用户),则可以使用“chmod o-rwx "$HOME"”(从“其他”中删除读/写/执行权限,相当于“chmod 750 "$HOME"”,因为默认权限是750)。否则,您还应该更改“umask设置”,以防止新创建的文件默认获得全局读取权限。
对于系统范围的配置,请编辑“/etc/profile”;每个用户的设置可以在“~/.profile”中配置。我更喜欢为所有用户使用相同的策略,所以我会编辑“/etc/profile”文件并追加以下行:
umask 027

除非您在shell中,否则您需要重新登录以应用这些更改。在这种情况下,您可以在shell中运行umask 027

现在要修复现有的权限问题,您需要从其他用户中删除读/写/执行权限:

chmod -R o-rwx ~

现在,如果您决定将“~/Public”文件夹共享给所有人,请运行以下命令:
- `chmod o+x ~` - 允许所有人进入目录(`x`),但不允许获取目录列表(不应添加`r`) - `find ~/Public -type f -exec chmod o+r {} \;` - 允许所有人读取“~/Public”中的文件 - `find ~/Public -type d -exec chmod o+rx {} \;` - 允许所有人进入目录并列出其内容
如果您使用GNU coreutils(例如在Ubuntu上,而不是仅有`busybox`的嵌入式系统),那么前面两个使用`find`和`chmod`的命令可以被以下单个命令替代,该命令递归地使文件夹和文件可读(并且还为目录添加了执行(进入)位,仅限于目录):
chmod -R o+rX ~/Public

执行位没问题,但为什么要读取呢?我的意思是你不需要列出文件夹的所有内容,而且绝对不需要在所有家目录的内容上设置全局可读权限。 - My1
@My1 这个答案建议只为主文件夹添加 x 权限,而不是 r。它建议在公共文件夹中使所有文件和目录可读取。只要其他目录(如 ~/Documents)的权限被正确限制(如 750),它们将保持私密。 - Lekensteyn
我并没有提到任何建议,只是最初的解释:“如果其他用户想要访问这个公共文件夹,那么家目录上的世界执行位应该被设置为开启。”我的问题是为什么还需要读取位。我的意思是,我有一个“全局挂载”文件夹,只有三个x权限,所以事情不会那么容易迭代,怀疑它能做多少,但我见过一些设置,你不能列出文件夹的内容,但可以进入文件夹。 - My1
在更改$HOME中所有文件的权限时要小心,否则ssh将无法工作,直到您为$HOME/.ssh修复权限。 例如,私钥文件需要chmod 600 - crs

Ubuntu 21.04及更高版本具有安全的默认设置,请参考此博客文章存档链接),评论部分由stackprotector链接:

对于新安装的Ubuntu 21.04,或在已升级到Ubuntu 21.04的机器上创建的用户,默认情况下其家目录将是私有的。

然而,该文章暗示在Ubuntu < 21.04上创建的用户将不会被自动修复,即使应用了安全更新或升级到Ubuntu 21.04或更高版本之后。这些用户可以通过以下命令手动进行修复,命令来自该文章。

要修复所有现有用户:

sudo chmod 750 /home/*

为了修复将来创建的用户的默认设置:
sudo sed -i s/DIR_MODE=0755/DIR_MODE=0750/ /etc/adduser.conf
echo "HOME_MODE 0750" | sudo tee -a /etc/login.defs

对于Ubuntu < 21.04:

根据Canonical的创始人兼首席执行官Mark Shuttleworth所说,

"大多数使用Ubuntu系统的用户要么独占使用机器(个人笔记本电脑),要么与朋友和亲戚共享。我们假设共享机器的人要么是信任的,要么有能力轻松地对机器进行黑客攻击(从USB启动!)。因此,删除这些权限几乎没有好处"

...从中移除这些权限。


19我认为在服务器版中具有相同的行为是一个安全漏洞。 - warvariuc
6那是个疯狂的解释。除了人们的帐户外,还有技术帐户可以用来隔离应用程序。此外,还有很多关于如何设置本地 FTP 服务器的说明,基本上就是在机器上共享帐户。 - Barafu Albino
5我知道这是一个旧的帖子,但请将其视为一个愚蠢的决定。想象一下,其中一个用户运行了一个能够从任何其他个人资料读取和发送文件的应用程序/脚本(可能是无意中)。 - mauron85
@warvariuc,请在官方的错误报告中发表你的意见,链接为https://bugs.launchpad.net/ubuntu/+source/adduser/+bug/48734,这样行为就能尽快改变。 - Jaime Hablutzel
我们的祈祷得到了回应:https://ubuntu.com/blog/private-home-directories-for-ubuntu-21-04([存档链接](http://web.archive.org/web/20210430174807/https://ubuntu.com/blog/private-home-directories-for-ubuntu-21-04)) - stackprotector

根据一个Ubuntuforms.org工作人员的说法,这样做可以更方便地在新用户之间共享文件。

如果您不希望其他人能够读取和执行文件,您可以将权限更改为700或750。

命令如下:

chmod 750 $HOME

注意:Ubuntu的默认权限是755。

2当然,其他用户不应该成为sudoers。 - Pablo Bianchi

您可以阅读Ubuntu服务器指南中用户管理部分的详细内容。其中的用户配置文件安全性段落可能会正式回答您的问题。

5我对官方来源表示赞赏。然而,遗憾的是,它似乎没有提供任何理由或解释。 - ændrük
请参考 @ignis 的回复,这是官方的正当理由。 - Jaime Hablutzel

我认为Lekensteyn的回答可以通过使用chmod命令的-X选项(注意大写X)来改进最后两个find命令。这两个find命令可以被替换为
chmod -R o+rX ~/Public
这样适当区分了文件和目录,但也会额外允许其他人运行可执行文件。

既然你对隐私感兴趣(根据应用的标签来判断),那么仅仅设置权限可能是不够的(参见ignis's answer)。答案可能是类似于加密主目录的解决方案。这个解决方案专门针对其他用户攻击计算机的情况设计。当然,它无法阻止其他用户损坏你的文件(只需删除~/.Private目录即可擦除所有文件),但他们将无法挂载该目录并查看文件,除非知道你的密码。

最简单的方法是在安装过程中,有一个复选框,上面写着“加密你的主目录”,你需要选择它。

由于重新安装仅仅为了这个目的不太可能(而且因为它仍然带有重新安装所带来的所有风险),你可以采取以下步骤:

sudo apt-get install encryptfs-utils
encryptfs-migrate-home

如果您真的需要高水平的安全性:请重新安装并确保选择加密整个磁盘的选项。这将需要一个密码短语才能启动机器。当然,您还可以在此基础上再次加密您的主文件夹,但会导致一些性能下降,尽管在正常使用中不会明显感觉到。
请注意,加密您的主文件夹将禁用像Dropbox这样的应用程序。无论如何,Dropbox并不是一个尊重隐私的安全存储,所以这可能是一个微不足道的观点。然而,如果您确实需要在云端进行安全和私密的存储,我个人推荐使用MEGAsync,因为只有您拥有访问数据的密钥。