Linux如何设置用户的默认权限 umask值设置与计算方法

嗨,兄弟,咱聊聊umask这个玩意儿吧。
我记得有次在做项目的时候,搞了个小坑,就是关于这个umask的权限设置。

那年,我在公司的一个小项目里负责后端开发。
那会儿,我们团队里有个小伙伴,他不太懂umask这东西,结果搞了个权限问题。
项目部署到服务器上之后,文件和目录的权限设置不对,导致部分用户访问不了资源。

当时我一看,这问题得解决。
我就开始研究umask,这玩意儿其实挺简单的,就是控制新创建文件或目录的默认权限。
默认情况下,文件权限是6 6 6 ,目录权限是7 7 7 然后你通过umask来屏蔽掉一部分权限,最后得到实际的权限。

比如说,当时我们设置了umask为02 2 ,那文件权限就从6 6 6 变成了6 4 4 (rw-r--r--),目录权限就从7 7 7 变成了7 5 5 (drwxr-xr-x)。
这样设置的好处是,group和others的用户可以读文件,但不能写。

这个设置在项目里挺有用的,因为我们希望数据共享,但又不想让所有人都随意修改。
不过,后来我发现,这个设置也有缺点,就是安全性不是特别高。
所以,我又尝试设置了umask为07 7 ,这样文件和目录就变得非常私有,只有所有者才能访问。

不过,要注意的是,umask这东西只对新建的文件和目录有效,已经存在的文件和目录的权限是不会变的。
而且,如果你手动修改了文件或目录的权限,这个修改会覆盖umask的设置。

所以,那回我给小伙伴讲了这个东西,也教了他怎么修改umask的值。
临时修改可以在当前会话里用命令umask来设置,如果想永久修改,得编辑用户的shell配置文件,比如.bashrc。

现在想想,那个小坑其实还挺有趣的,也让我更深入地了解了Linux的权限管理。
嘿,你有没有遇到过类似的权限问题啊?

理解 Linux操作系统中/etc/passwd 文件

/etc/passwd是纯文本用户数据库。
权限6 4 4 ,root可写,其他可读。
UID 0是root。
密码字段现代系统填x。
别手动编辑,用usermod/useradd。

如何设置默认umask 控制新建文件权限

哎哟,跟你说个事儿,umask这玩意儿,真挺重要的。
我以前在云南那边给客户搞服务器,遇到过不少权限问题,最后发现不少都是umask没设置好。

想当年,我有个客户,用的是CentOS 7 ,服务器上文件乱七八糟,权限全开放,结果有一次被黑了,几G数据全没了。
后来我一看,哎?这服务器上的新文件默认权限都是6 6 6 ,目录都是7 7 7 ,这哪行啊!我就给他们改成umask 02 2 ,你看,文件默认6 4 4 ,目录默认7 5 5 ,一下子安全多了。
那会儿我直接在/etc/profile里加了一句umask 02 2 ,然后让他们都重新登录,问题解决。

再后来,我在北京一个团队做项目,那项目是内部开发的,但是得共享。
我就琢磨,这要是每个文件都权限全开,别人改了数据咋整?我就建议他们用umask 002 ,你看,文件6 6 4 ,目录7 7 5 ,这样组内的人都能改,但外人就看不到了。
他们用这设置,项目开发那叫一个顺畅,没出啥权限乱子。

要说设置umask,最简单的就是在bash里,你打umask看看是多少,要是想改,就在你自己的.bashrc里加一句umask 002 ,保存了,下次登录就生效了。
要是想让所有新用户都这样,那得改/etc/profile或者/etc/login.defs,这得有管理员权限,得用sudo。

不过啊,你要是搞SSH自动登录,那可能得单独设置,因为那个环境里,umask不一定继承你主机的设置。
我以前有个客户,用SSH远程管理服务器,结果每次上传文件都权限不对,后来才发现是在他的SSH配置里单独设置了umask。

总之,umask这玩意儿,用好了,安全又方便。
你要是不知道设多少,先设个02 2 试试,最常用,一般够用了。
别像我以前那个云南客户,权限全开,最后损失惨重。
得根据实际情况来,别瞎设。