运维开发宝典009-高级权限、文件属性chattr、进程掩码umask

张开发
2026/4/20 20:50:22 15 分钟阅读

分享文章

运维开发宝典009-高级权限、文件属性chattr、进程掩码umask
运维开发宝典009-高级权限、文件属性chattr、进程掩码umask​ 大家好我是云计算磊哥从业20年的IT老鸟。运维培训15年总结了一套从入门到精通的全运维开发宝典手册。准备用300天时间写一套博文手把手从安装软件讲起从行业到产品从过去到未来从理论到操作从视频到文档工具一站式。从零基础入门到20k运维开发工程师岗位诸多就业问题。多方位全方面的给你讲清楚云计算这个行业该如何做。关注我。后续更精彩。​ 上篇已经介绍了基本权限UGO和基本权限ACL的基本用法此外文件权限还有许多高价用法使程序更加简洁、更易维护。下面将介绍高级权限、文件属性chattr和进程掩码umask。一SUID权限​ 使用ll命令查看/usr/bin/passwd文件第1行的第4个字符为“s”。“s”表示特殊权限SUID具体如下所示。[rootlocalhost ~]# ll /usr/bin/passwd-rwsr-xr-x.1root root278326月102014/usr/bin/passwd​ 任何用户在执行该文件时其身份是该文件的属主在进程文件二进制可执行上增加SUID权限让本来没有相应权限的用户也可以访问没有权限访问的资源。​ 普通用户通过SUID提权使用chmod命令给user增加SUID权限切换到alice用户下即可查看/root/fiel01.txt具体如下所示。[rootlocalhost ~]# chmod us /usr/bin/cat[rootlocalhost ~]# ll /usr/bin/cat-rwsr-xr-x.1root root5408011月62016/usr/bin/cat[alicelocalhost ~]$cat/root/file01.txt linux二SGID权限在一个程序上添加SGID用户在执行过程中会获得该程序用户组的权限相当于临时加入了程序的用户组。在目录/home下创建一个目录hr将hr组添加到该目录下查看目录属组修改为hr。在/home/hr目录下创建一个文件file02该文件属组为root并没有继承上级目录的hr组具体如下所示。[rootlocalhost ~]# mkdir /home/hr[rootlocalhost ~]# groupadd hr[rootlocalhost ~]# chgrp hr /home/hr[rootlocalhost ~]# ll -d /home/hrdrwxr-xr-x.2root hr64月1601:43 /home/hr[rootlocalhost ~]# touch /home/hr/file02[rootlocalhost ~]# ll /home/hr/file02-rw-r--r--.1root root04月1601:49 /home/hr/file02在一个目录上添加SGID该目录下新创建的文件会继承其属组具体如下所示。[rootlocalhost ~]# chmod gs /home/hr[rootlocalhost ~]# ll -d /home/hrdrwxr-sr-x.2root hr204月1601:49 /home/hr[rootlocalhost ~]# touch /home/hr/file03[rootlocalhost ~]# ll /home/hr总用量0-rw-r--r--.1root root04月1601:49 file02 -rw-r--r--.1root hr04月1601:51 file03三Sticky权限​ 添加Sticky后当用户对目录具有w、x权限在该目录下建立文件或目录时仅有自己与root才有权利删除该文件。在目录/home下创建目录dir01并赋予其777权限具体如下所示。[rootlocalhost ~]# mkdir /home/dir01[rootlocalhost ~]# chmod 777 /home/dir01/使用alice用户在该目录下创建文件file再使用tom用户尝试删除file文件具体如下所示。[alicelocalhost ~]$touch/home/dir01/file[alicelocalhost dir01]$lsfile[tomlocalhost ~]$rm-rf/home/dir01/file[tomlocalhost dir01]$ls[tomlocalhost dir01]$添加“t”参数后用户只能删除自己的文件具体如下所示。[rootlocalhost ~]# chmod ot /home/dir01/[rootlocalhost ~]# ll -d /home/dir01/drwxrwxrwt.2root root64月1602:35 /home/dir01/[alicelocalhost ~]$touch/home/dir01/file01[tomlocalhost dir01]$lsfilefile01[tomlocalhost dir01]$rm-rffile01rm: 无法删除file01: 不允许的操作​ 系统还存在一些目录如tmp目录为了保证该目录下文件的安全系统自动为其增加了“t”权限因此目录下的文件只有属主才可以删除。/tmp目录为全局可写其权限只能为1777否则会导致程序不能正常运行具体如下所示。[rootlocalhost ~]# ll -d /tmp/drwxrwxrwt.35root root40964月1610:24 /tmp/​ 权限的字符位只有9位增加特殊权限会占用“x”权限的位置。为了区分目录或文件是否含有“x”权限系统会以特殊权限的大小写方式给予提示。当符号为大写时表示不含有“x”权限当符号为小写时表示含有“x”权限。​ 例如给目录/home/dir01/去除“x”权限后其中“t”权限变为大写给目录/home/dir10增加7777权限后删除“x”权限特殊权限符号均变为大写具体如下所示。[rootlocalhost ~]# ll -d /home/dir01/drwxrwxrwt.2root root324月1602:53 /home/dir01/[rootlocalhost ~]# chmod o-x /home/dir01/[rootlocalhost ~]# ll -d /home/dir01/drwxrwxrwT.2root root324月1602:53 /home/dir01/[rootlocalhost ~]# chmod 7777 /home/dir01/[rootlocalhost ~]# ll -d /home/dir01/drwsrwsrwt.2root root324月1602:53 /home/dir01/[rootlocalhost ~]# chmod -x /home/dir01/[rootlocalhost ~]# ll -d /home/dir01/drwSrwSrwT.2root root324月1602:53 /home/dir01/总结高级权限的用法如表所示。高级权限数字符号文件目录SUID4以属主身份执行SGID2以属组身份执行继承属组Sticky1用户只能删除自己的文件四文件属性chattr​ 为了保护系统文件Linux系统会使用chattr命令改变文件的隐藏属性。chattr命令仅对EXT2/EXT3/EXT4文件系统完整有效其他文件系统可能仅支持部分隐藏属性或者根本不支持隐藏属性。​ 创建3个文件file01、file02、file03使用lsattr命令查看这3个文件的隐藏属性全部为空具体如下所示。[rootlocalhost ~]# touch file01 file02 file03[rootlocalhost ~]# lsattr file01 file02 file03---------------- file01 ---------------- file02 ---------------- file03使用man工具查看chattr命令的使用方法具体如下所示。[rootlocalhost ~]# man chattr下面列举常用的两个隐藏属性加以说明。使用chattr命令给file01文件增加“a”属性具体如下所示。[rootlocalhost ~]# chattr a file01[rootlocalhost ~]# lsattr file01-----a---------- file01当给file02文件增加“a”属性之后便不能再使用Vim编辑器写入文本需要使用echo命令以追加的方式写入。此属性一般用于日志文件因为日志文件内容是在后面追加前面的内容不能被覆盖整个文件也不能被删除。当需要截取某段日志时去除该属性即可具体如下所示。[rootlocalhost ~]# vim file02[rootlocalhost ~]# cat file02linux[rootlocalhost ~]# chattr a file02[rootlocalhost ~]# echo www.localhost.com file02bash: file02: 不允许的操作[rootlocalhost ~]# rm -rf file02rm: 无法删除file02:不允许的操作[rootlocalhost ~]# echo www.localhost.com file02[rootlocalhost ~]# cat file02linux[www.localhost.com](http://www.localhost.com)[rootlocalhost ~]# chattr -a file02​ 当给file03文件增加“i”属性之后,该文件不接受任何形式的修改只能读取。例如生产环境中在没有需求的情况下并不希望有人创建用户为了防止非法者进入随意创建一般会给/etcpasswd文件增加“i”属性保证安全具体如下所示。[rootlocalhost ~]# chattr i file03[rootlocalhost ~]# echo www.localhost.com file03bash: file03: 权限不够[rootlocalhost ~]# rm -rf file03rm: 无法删除file03: 不允许的操作Ø*进程掩码u**mask*当用户创建新目录或文件时系统会赋予目录或文件一个默认的权限umask的作用就是指定权限默认值。为系统设置一个合理的 umask值确保创建的文件或目录具有所希望的缺省权限以保证数据安全。umask值表示要减掉的权限也可以简单的理解为权限的“反码”进程和新建文件、目录的默认权限都会受到umask的影响。例如创建目录dir001创建文件file001然后查看umask默认权限及文件与目录的权限具体如下所示。[rootlocalhost ~]# mkdir dir001[rootlocalhost ~]# touch file001[rootlocalhost ~]# umask0022[rootlocalhost ~]# ll -d dir001drwxr-xr-x.2root root64月1615:00 dir001[rootlocalhost ~]# ll file001-rw-r--r--.1root root04月1615:01 file001​ 新建的目录如果全局可写基本权限应该是777但实际上基本权限是755新创建的文件基本权限为644因为umask要强制去掉group与other的写权限而文件系统默认不赋予执行权限。​ 当把umask默认权限设置为0777新创建的目录与文件的基本权限为000具体如下所示。[rootlocalhost ~]# umask 0777[rootlocalhost ~]# mkdir dir002[rootlocalhost ~]# touch file002[rootlocalhost ~]# ll -d dir002 file002d---------.2root root64月1615:40 dir002 ----------.1root root04月1615:40 file002不同的进程都可以设置自己的umask上述示例是在Shell当中影响的是touch命令。新创建的用户/home目录的权限默认为700可以通过改变/etc/login.defs文件中第64行UMASK的权限值改变将077修改为000具体如下所示。[rootlocalhost ~]# useradd user001[rootlocalhost ~]# ll /home/总用量8drwx------.3user001 user001784月1616:01 user001[rootlocalhost ~]# vim /etc/login.defs63# the permission mask will be initialized to 022.64UMASK 000[rootlocalhost ~]# useradd user002[rootlocalhost ~]# ll /home/drwxrwxrwx.3user002 user002784月1616:18 user002​ 好了关于三个文件特别权限SUID权限SGID权限Sticky权限就讲完了。还有文件属性chattr进程掩码umask大家了解即可因为这是系统管理文件权限的一部分必须讲但相对于chmod使用情况比较少。配套视频

更多文章