zoukankan      html  css  js  c++  java
  • linux 系统文件的特殊权限

    文件权限与归属
    Linux系统中的一切都是文件,但每个文件的类型不尽相同,并且Linux系统会用不同的符号来加以区分,常见的包括有
    -:普通文件,d:目录文件,l:链接文件,b:块设备文件,c:字符设备文件,p:管道文件
    读(read),写(write),执行(execute)简写即为(r,w,x),亦可用数字(4,2,1)表示。

    SUID权限:让执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
    SUID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。使用”ls -l” 或者”ll” 命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的”s”,就表明该执行文件拥有SUID属性。比如/usr/bin/passwd文件。
    [root@rhel7 /]# ll /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27832 Jan 29 2014 /usr/bin/passwd

    SGID功能一让执行者临时拥有属组的权限(对拥有执行权限的二进制程序设置)

    这种特殊权限就是参考SUID而设计的,不同点就是让程序的执行者获取的不再是文件所有者的临时权限,而是获取到文件的所有组的权限。举例来说,在早期的Linux系统中/dev/kmem是一个字符设备文件,用于存储内核程序要访问的数据,权限为:

    cr--r-----   1 root system 2,  1 Feb 11 2017  kmem
    读者们看出问题了吗?除了root超级用户身份或属于system组成员外的所有用户都没有读取该文件的权限,但平时咱们需要查看系统进程状态,为了让用户能够获取到系统状态信息,因此将用于查看系统进程状态的ps命令权限上增加了SGID特殊权限位:

    -r-xr-sr-x   1 bin system 59346 Feb 11 2017  ps
    这样的话因为ps命令被赋予了SGID特殊权限位,所以当用户执行了该命令,实际上临时获取到了有效用户组system的权限啦,能够顺利的读取设备文件啦~

    (如果在浏览文件时,发现拥有组权限的第三位是一个大写的“S”则表明该文件的SGID属性无效,比如将SGID属性给一个没有执行权限的文件。)
    SGID功能二在该目录中创建的文件自动继承此目录的用户组(只可以对目录设置)
    SGID属性应用在目录上时,该目录中所建立的文件或子目录的拥有组都会是该目录的拥有组。当SGID属性应用在可执行文件上时,其他用户在使用执行文件时就会临时拥有该执行文件的拥有组权限。在使用”ls -l” 或者”ll” 命令浏览目录时,如果拥有组权限的第三位是一个小写的”s”,就表明该执行文件或者目录拥有SGID属性。

    [root@localhost ~]# cd /tmp/
    [root@localhost tmp]# mkdir lxjtestdir
    [root@localhost tmp]# ls -ald lxjtestdir/
    drwxr-xr-x. 2 root root 6 Nov 27 15:14 lxjtestdir/
    [root@localhost tmp]# chmod -Rf 777 lxjtestdir/
    [root@localhost tmp]# chmod g+s lxjtestdir/
    [root@localhost tmp]# ls -ald lxjtestdir/
    drwxrwsrwx. 2 root root 6 Nov 27 15:14 lxjtestdir/
    [root@localhost tmp]# su - rusky
    Last login: Mon Nov 27 11:44:57 CST 2017 on pts/1
    [rusky@localhost ~]$ cd /tmp/lxjtestdir/
    [rusky@localhost lxjtestdir]$ touch abc
    [rusky@localhost lxjtestdir]$ ls -al abc
    -rw-r--r--. 1 rusky root 0 Nov 27 15:16 abc
    [rusky@localhost lxjtestdir]$

    Sticky Bit权限:

    SBIT(Sticky Bit):只可管理自己的数据而不能删除他人文件(仅对目录有效)
    Sticky属性只能应用在目录,当目录拥有Sticky属性,所有在该目录中的文件或子目录无论是什么权限,只有文件或者子目录所有者和root用户能做删除动作。保护用户自己的数据不被其它用户删除。在使用”ls -l”或者”ll”命令浏览目录时,如果其他用户权限的第三位是一个小写的”t”,就表明该执行文件或者目录拥有Sticky属性。
    注意:linux系统规定,如果原本该位上有x,则这些属性显示为小写字母(有效),否则显示大写字母(无效)

    在RHEL7系统中的/tmp作为一个共享文件的目录默认已经被设置了SBIT特殊权限位,因此这里面的文件其他人是不能乱删除的:
    drwxrwxrwt. 25 root root 4096 Jul 20 22:53 tmp

    ==========================
    配置SUID、SGID、Sticky属性

    可以使用字符配置(s 表示SUID和SGID,t表示Sticky)
    如:

    chmod u+s test_file #给文件增加SUID属性
    chmod g+s test_dir #给目录增加SGID属性
    chmod o+t test_dir #给目录增加Sticky属性
    还可以用数字的方式配置(4表示SUID,2表示SGID,1表示Sticky)
    如:

    chmod 4555 test_file #给文件增加SUID属性
    chmod 2555 test_file #给文件增加SGID属性
    chmod 1555 test_dir #给目录增加Sticky属性

    文件的隐藏属性

    即在默认情况下是不能直接被用户发觉的。在真实的工作环境和红帽RHCE考试题目中碰到过明明权限很充足但却不能删除某个文件的情况,或者仅仅能对日志文件进行追加内容而不能删除或减少,一定程度上阻止了黑客篡改系统日志的图谋,因此这种很“奇怪”的文件让Linux系统更加的安全。

    chattr命令用于设置文件的隐藏权限,格式为:“chattr [参数] 文件”。

    可以使用chattr命令来设置文件的隐藏权限,如果想要把某个隐藏功能添加到文件上面,则使用+参数,如果想要把某个隐藏功能移出文件,则使用-参数。可供咱们选择的隐藏权限功能非常丰富,常见的隐藏权限包括有:

    参数 作用
    i 将无法对文件进行修改,若对目录设置后则仅能修改子文件而不能新建或删除。
    a 仅允许补充(追加)内容.无法覆盖/删除(Append Only)。
    S 文件内容变更后立即同步到硬盘(sync)。
    s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)。
    A 不再修改这个文件的最后访问时间(atime)。
    b 不再修改文件或目录的存取时间。
    D 检查压缩文件中的错误。
    d 当使用dump命令备份时忽略本文件/目录。
    c 默认将文件或目录进行压缩。
    u 当删除此文件后依然保留其在硬盘中的数据,方便日后恢复。
    t 让文件系统支持尾部合并(tail-merging)。
    X 可以直接访问压缩文件的内容。

    [rusky@localhost ~]$ echo "test" > lxjtest
    [rusky@localhost ~]$ chattr +a lxjtest
    chattr: Operation not permitted while setting flags on lxjtest
    [rusky@localhost ~]$ su -
    Password:
    Last login: Mon Nov 27 11:46:24 CST 2017 on pts/1
    [root@localhost ~]# cd /home/rusky/
    [root@localhost rusky]# chattr +a lxjtest
    [root@localhost rusky]# su - rusky
    Last login: Mon Nov 27 15:16:25 CST 2017 on pts/1
    [rusky@localhost ~]$ rm lxjtest
    rm: cannot remove ‘lxjtest’: Operation not permitted

  • 相关阅读:
    swift 一些公共的宏重新定义
    iOS中正则表达式的使用
    失败的尝试,使用继承扩展数组,以及ES6的必要性
    用travis-ci编译android版nodejs
    用es6写一个分数库
    快速平方根算法的javascript实现
    windows中vim以及cmder的使用
    nodejs的交叉(跨平台)编译(to android)
    用链表实现nodejs的内存对象管理
    给socks-proxy-agent增加认证
  • 原文地址:https://www.cnblogs.com/rusking/p/7216537.html
Copyright © 2011-2022 走看看