Linux查看文件权限的常用命令

说实话,这几年我一直在摆弄Linux系统,用得越多,对文件权限的感受就越深。
我每天都使用你提到的这些命令,每个命令都有自己的优点。

首先我们来谈谈ls -l。
这绝对是我的首选笔记本电脑。
上次我帮下面一组同事调试一个无法执行的脚本:我只是做了 ls -l 并没有起作用,因为我没有给它执行权限。
如果您查看权限字符串,就会发现它非常直观。
比如使用-rwxr-xr--,一眼就能看出是否是普通文件。
您可以读取、写入和执行。
我们群里的朋友可以阅读并运行,但其他路人只能阅读。
最烦人的是隐藏文件。
要看到这一点,您需要添加一个参数,例如 ls -la .bash_history。
没有其他人能看到这一点。

我通常使用 stat 命令来了解有关文件状态的更多信息。
我记得有一次系统报告错误说某些日志文件的大小错误。
我检查了统计数据,发现时间戳是几个月前的。
日志轮换可能未正确完成。
它的八进制权限是 06 4 4 我记得一个小技巧,我会 chmod 6 4 4 一个文件名,然后自己将其改回来,以避免挖掘每个字符。

我在公司的服务器上更频繁地使用 getfacl。
有一次,当我尝试向我的开发团队添加权限时,我无法仅使用常规 ls -l 查看特殊用户权限。
我必须使用 getfacl 来查找特殊用户权限。
例如,要给外包商授予临时读写权限,可以在getfacl中添加user:outcommerce Guy:rwx。
这比重新配置权限方便得多。
但是,并非所有系统都默认安装此功能。
有时您可能需要单独安装 acl 软件包。

特殊权限给我印象最深的是 /var/spool/cron 目录。
必须添加sgid才能正常运行计划任务。
/tmp 目录也有粘滞位。
我差点为此惹上麻烦。
普通用户想要删除临时系统文件,但发现不可能做到这一点。
我检查了一下,发现粘性部分起作用了。

我最近意识到权限管理的重要性。
我的公司去年接受了合规性检查,我们被审计是因为特定项目的文档权限没有正确设置。
这是提醒您在 chmoding 时要小心,不要无意中暴露敏感数据。
正如你提到的,在金融行业,坚持在没有访问权限的情况下进行更改,会立即引发警报,这是得不偿失的。

其实Linux权限并没有那么神秘。
使用几次后就习惯了,这一点很重要。
我有一个习惯,每当安装新系统时,都会给常用的命令设置快捷方式,比如把 ls -l 设置为 Alt+l,把 stat 设置为 Alt+s 等等。
反正习惯了,就不用看命令了,就可以操作了。

关于Linux系统权限的问题

老实说,当我第一次开始使用 Linux 权限时,它让我非常头疼。
我记得第一次访问服务器时更改了一个重要目录的权限。
结果,整个站点瘫痪了。
那种感觉……呃。
但慢慢摸索了一遍,发现其实还蛮有趣的。

让我们以数字版权为例。
我每天都使用像 7 5 5 这样的组合。
你知道为什么吗?这是因为许多网络服务器都内置了此功能。
让我们来分解一下硬数字。
7 是什么意思? 4 +2 +1 表示读写执行。
所以7 5 5 意味着所有者有读和写运行(7 ),组的一个成员有读运行(5 =4 +1 ),其他成员也有读运行(5 )。
如您所知,Linux 非常高效,并且仅用几个数字就可以清楚地说明权限。

我更喜欢性格权威。
直接看rwxr-xr--就可以明白这一点。
我是老板,我可以做任何事。
部门同事只能看、跑。
游客根本看不到它。
我有一个朋友说数字很方便,好吧,我们就用数字吧——rw-r--r--,是不是立刻就头疼了?所以角色能力对于初学者来说真的很友好。

说到 chmod 命令,有一个小技巧。
我总是记住混音参数,但后来我自己编了一首歌曲。
u 是用户,g 是组,o 是其他,a 是全部。
然后+提升权限,-降低权限,直接赋值=值。
例如,要为每个人添加读取权限,请使用 chmod a+r file.txt。
我已经使用这个方法1 0年了,没有出过任何错误。

特别注意特殊权限。
例如,SUID 位。
我当时写了一个备份脚本,忘记添加这个了。
结果每次运行都是root权限,系统差点就崩溃了。
后来我了解到这对于运行脚本来说非常有用,但是不应该乱用。
记得在一家公司,由于SUID设置不当,黑客直接提权并劫持了shell。
花了3 个月才清理干净。

权限继承也蛮有趣的。
创建新目录时,默认会继承父目录的权限。
我曾经有一个项目,由于子目录权限没有调整好,差点造成敏感文件直接暴露的事故。
现在我习惯使用 chmod 7 00 或 7 5 0 只是为了安全起见,并在创建新目录后立即再次运行它。

SELinux 让我很头疼。
我记得当我第一次在 CentOS 上遇到它时,SELinux 默认策略非常严格,我什至无法运行 ls 命令。
后来我花了几天的时间慢慢调整它,我意识到 SELinux 的存在并不是为了对抗别人,而是帮助我们提高安全底线。
现在我的规则是先遵循默认策略,如果不起作用再进行调整。

容器化环境权限管理比较复杂。
默认情况下,Docker 容器是隔离的,但它们与主机交互时权限会混乱。
这就留下了客户端,它允许容器随意读写主机文件。
然而,数据最终还是被泄露了。
后来我改用了namespace+seccomp组合,慢慢完成了。

老实说,权限管理是一个我想1 0年后我都无法理解的工作。
但一旦你真正掌握了它,你就会发现你的Linux系统就像你自己亲手搭建的积木一样,让你可以精确地控制每个组件。
然而,权限设置总是在安全性和便利性之间走钢丝。
过于偏向一侧很容易引发问题。

如何查看Linux用户的权限?id和groups命令详解

说实话,要了解一个用户在Linux中的权限,你需要知道他属于哪些组以及他可以访问哪些资源。
在过去的1 0年里,我发现id和groups命令确实很有用,而且我基本上都理解它们了。

以id命令为例。
我在管理服务器的时候,曾经写了一个很好的脚本,但是突然权限就错了。
经过检查,发现某个用户的UID和GID被更改了。
我当时就一头雾水,赶紧用id命令查了一下。
运行时不带ID等参数,会直接显示当前用户信息,包括UID、GID、附加组等。
我记得用户的UID是1 001 ,家庭组是1 001 (开发组),并且也在sudo和docker组中。
通过标识符-G可以更清楚地看到它。
列出了所有其他组,这特别有用。
例如,在确定用户是否在 sudo 组中的脚本中, id -nG | grep -q 'sudo' 可以在一行中执行。
在排除权限问题时,只需依靠 id 命令来确认用户是否属于他们应该属于的组。

groups 命令要简单得多,我经常使用它来快速确认。
例如,如果有一个名为 john 的用户,你想知道他属于哪些组,则可以直接编译 john,结果将在几秒内显示出来: john:developers sudo docker。
如果您发现加入新群组后用户权限没有生效,请先不要担心。
尝试 newgrp sudo 并重新加入组。
在许多情况下,问题会立即得到解决。
我上次在测试环境中尝试过这个。
我刚刚加入 Plugdev 小组。
我通过组合检查了这一点,并能够执行需要立即插入和拔出 USB 磁盘的命令。

但是您应该注意一些陷阱。
有朋友告诉我,他添加sudo组后没有任何反应。
我让他用 id -nG 确认,发现他输入的是大写字母“sudo”。
Linux 区分大小写,grep -q 'sudo' 会匹配,但 groups 命令是直接按字母顺序排列的,所以需要小写字母。
还有一次,系统连接LDAP,新添加的组没有显示在/etc/group中。
询问管理员,被告知同步延迟了,过段时间就好了。

总之,如果熟悉了这两件事,排查用户权限问题的效率就会高很多。
当我告诉操作员时后来新的维护谈到这个,听完后,他说,嘿,这真的很有帮助。