zoukankan      html  css  js  c++  java
  • Linux 文件特殊权限_013

    ***Linux 系统文件除了9位基本权限,还有额外3位特殊权限,分别是SUID(setuid),SGID(setgid),SBIT(sticky bit)

    一、Linux 系统文件3位特殊权限位说明

    标注:这3位特殊权限不建议使用(除系统默认的特殊权限可以使用以外),除非有特殊需求

    特殊权限

    特殊权限位小写

    特殊权限位大写

    权限值

    s (suid)

    小写s (有suid执行权限)

    大写S (无suid执行权限)

    4

    s (sgid)

    小写s (有sgid执行权限)

    大写S (无sgid执行权限)

    2

    t(sticky bit)

    小写t (有sticky bit执行权限)

    大写T (无sticky bit执行权限)

    1

    0恢复文件原来权限,chmod 0755 file

    SUID

    标注:见下面范例1

    1、SUID是对二进制命令或二进制程序有效,对目录无效

    2、普通用户具有该文件其它用户x执行权限并分配了s权限将具有文件所有者的权限

    3、用户属主对应的前三位权限的x位上如果有s就表示suid权限,当x位上没有小写x执行权限时候,suid的权限显示就是大S

    4、suid权限仅在程序命令执行过程中有效

    5、suid功能是一把双刃剑,是一个比较危险的功能,对系统安全有一定威胁系统,suid的无用的功能取消suid权限(安全优化)

    SGID

    标注:见下面范例2

    1、SGID和SUID不同之处在于,SGID可以用于目录

    2、SGID的权限s是出现在文件用户组的x权限位上

    SGID针对文件

    1、sgid仅对二进制命令程序有效

    2、普通用户具有该文件其它用户x执行权限并分配了s权限将具有文件所属用户组的权限

    3、执行命令任意用户可以获取该命令程序执行期间所属用户组的权限

    SGID针对目录

    1、linux 默认情况所有用户创建文件,默认用户和组都是自身

    2、sgid可以让用户再此目录下创建的文件和目录,具有和此目录相同的用户组设置

    sgid位主要用在目录中,当为某个目录设置sgid位以后,在改目录中

    新创建的文件具有改目录的所属组权限,而不是创建改文件的用户的默认

    所有者,这样,使得在多个用户之间共享一个目录中的文件变得简单

    SBIT  (粘滞位)

    标注:见下面范例3

    1、SBIT与SUID,SGID不同的是,SBIT只能用于目录

    2、普通用户在该目录下,仅目录属主与root才有权力删除移动重命名目录

    3、如果目录权限是777并添加粘滞位t,普通用户可以在此目录下创建文件和目录

    二、特殊权限位设置方法

    范例1:SUID设置方法

    [root@oldboy ~]# mkdir /oldboy

    [root@oldboy ~]# touch /oldboy/test.sh

    [root@oldboy ~]# ls -ld /oldboy/

    drwxr-xr-x 2 root root 4096 Dec  5 19:16 /oldboy/

    [root@oldboy ~]# ls -l /oldboy/test.sh

    -rw-r--r-- 1 root root 0 Dec  5 19:16 /oldboy/test.sh

    [root@oldboy ~]# which rm

    alias rm='rm -i'

        /bin/rm

    [root@oldboy ~]# ls -l /bin/rm

    -rwxr-xr-x. 1 root root 57440 Oct 15  2014 /bin/rm

    [root@oldboy ~]# su - oldboy

    [oldboy@oldboy ~]$ rm /oldboy/test.sh

    rm: remove write-protected regular empty file `/oldboy/test.sh'? y

    rm: cannot remove `/oldboy/test.sh': Permission denied

    [oldboy@oldboy ~]$ su - root

    Password:

    [root@oldboy ~]# ls -l /bin/rm

    -rwxr-xr-x. 1 root root 57440 Oct 15  2014 /bin/rm

    [root@oldboy ~]# chmod u+s /bin/rm              ##等同命令chmod 4755 /bin/rm,取消suid命令 chmod u-s /bin/rm或chmod 0755 /bin/rm

    [root@oldboy ~]# ls -l /bin/rm

    -rwsr-xr-x. 1 root root 57440 Oct 15  2014 /bin/rm

    [root@oldboy ~]# su - oldboy

    [oldboy@oldboy ~]$ rm /oldboy/test.sh

    [oldboy@oldboy ~]$ ls -l /oldboy/

    total 0

    范例2:GUID设置方法

     [root@oldboy ~]# mkdir /oldboy

    [root@oldboy ~]# ls -ld /oldboy/

    drwxr-xr-x 2 root root 4096 Dec  5 19:28 /oldboy/

    [root@oldboy ~]# chown oldboy.incahome /oldboy/

    [root@oldboy ~]# ls -ld /oldboy/

    drwxr-xr-x 2 oldboy incahome 4096 Dec  5 19:28 /oldboy/

    [root@oldboy ~]# touch /oldboy/test.sh

    [root@oldboy ~]# ls -l /oldboy/test.sh

    [root@oldboy ~]# ls -l /oldboy/

    total 0

    -rw-r--r-- 1 root root 0 Dec  5 19:29 test.sh

    [root@oldboy ~]# chmod g+s /oldboy/               ##等同命令chmod 2755 /bin/rm,取消guid命令 chmod g-s /bin/rm或chmod 0755 /bin/rm

    [root@oldboy ~]# touch /oldboy/file.txt

    [root@oldboy ~]# ls -l /oldboy/

    total 0

    -rw-r--r-- 1 root incahome 0 Dec  5 19:29 file.txt

    -rw-r--r-- 1 root root     0 Dec  5 19:29 test.sh

    范例3:SBIT设置方法

    [root@oldboy ~]# mkdir /oldboy

    [root@oldboy ~]# touch /oldboy/test.sh

    [root@oldboy ~]# mkdir /oldboy/share

    [root@oldboy ~]# chmod 777 /oldboy/

    [root@oldboy ~]# chmod 777 /oldboy/share/

    [root@oldboy ~]# chmod 777 /oldboy/test.sh 

    [root@oldboy ~]# ls -ld /oldboy/

    drwxrwxrwx 2 root root 4096 Dec  6 10:23 /oldboy/

    [root@oldboy ~]# ls -l /oldboy/

    total 4

    drwxrwxrwx 2 root root 4096 Dec  6 10:24 share

    -rwxrwxrwx 1 root root    0 Dec  6 10:23 test.sh

    [root@oldboy ~]# chmod 1777 /oldboy/            ##等同命令chmod o+s /oldboy

    [root@oldboy ~]# ls -ld /oldboy/

    drwxrwxrwt 3 root root 4096 Dec  6 10:24 /oldboy/

    [root@oldboy ~]# su - oldboy

    [oldboy@oldboy ~]$ rm /oldboy/test.sh

    rm: cannot remove `/oldboy/test.sh': Operation not permitted

    [oldboy@oldboy ~]$ rm -rf /oldboy/share/

    rm: cannot remove `/oldboy/share': Operation not permitted

    [oldboy@oldboy ~]$ mv /oldboy/test.sh /tmp/

    mv: try to overwrite `/tmp/test.sh', overriding mode 0755 (rwxr-xr-x)? y

    mv: cannot move `/oldboy/test.sh' to `/tmp/test.sh': Operation not permitted

    [oldboy@oldboy ~]$ mv /oldboy/test.sh /oldboy/file.sh

    mv: cannot move `/oldboy/test.sh' to `/oldboy/file.sh': Operation not permitted

    [oldboy@oldboy ~]$ cp /oldboy/test.sh /tmp/

    cp: cannot create regular file `/tmp/test.sh': Permission denied

    [oldboy@oldboy ~]$ touch /oldboy/file.txt

    [oldboy@oldboy ~]$ mkdir /oldboy/user

    [oldboy@oldboy ~]$ ls -l /oldboy/

    total 8

    -rw-r--r-- 1 oldboy root    0 Dec  6 10:30 file.txt

    drwxrwxrwx 2 root   root 4096 Dec  6 10:28 share

    -rwxrwxrwx 1 root   root    0 Dec  6 10:28 test.sh

    drwxr-xr-x 2 oldboy root 4096 Dec  6 10:31 user

    [oldboy@oldboy ~]$ su - root

    Password:

    [root@oldboy ~]# rm -rf /oldboy/test.sh

    [root@oldboy ~]# rm -rf /oldboy/share/

    三、chattr改变文件属性(特殊功能)

    参数

    参数原版描述

    备注

    实例

    +i

    A file with the “i” attribute cannot be modified: it cannot be deleted or renamed, no link can be created to this file and no data can be  written to the file. 

    让任何用户(包括root管理员)无法删除重命名移动目录,但可以复制目录。如果针对文件添加i权限是无法修改删除添加文件的内容并且无法删除重命名移动文件,但可以复制文件

    范例1

    -i

    取消i功能

    范例1

    -a

    A  file with the ‘a’ attribute set can only be open in append mode for writing.

    功能类似“i”,只是多了一个可以追加的功能

    范例2

    范例1:

    1、针对oldboy目录添加i权限

    [root@oldboy ~]# mkdir /oldboy

    [root@oldboy ~]# chmod 777 /oldboy/

    [root@oldboy ~]# touch /oldboy/test.sh

    [root@oldboy ~]# touch /oldboy/file.txt

    [root@oldboy ~]# chmod 777 /oldboy/*

    oot@oldboy ~]# ls -l /oldboy/

    total 0

    -rwxrwxrwx 1 root root 0 Dec  6 11:21 file.txt

    -rwxrwxrwx 1 root root 0 Dec  6 11:21 test.sh

    [root@oldboy ~]# chattr +i /oldboy/

    [root@oldboy ~]# ls -ld /oldboy/

    drwxrwxrwx 2 root root 4096 Dec  6 11:21 /oldboy/

    [root@oldboy ~]# lsattr -d /oldboy/

    ----i--------e- /oldboy/

    [root@oldboy ~]# lsattr /oldboy/

    -------------e- /oldboy/file.txt

    -------------e- /oldboy/test.sh

    [root@oldboy ~]# rm -rf /oldboy/

    rm: cannot remove `/oldboy/file.txt': Permission denied

    rm: cannot remove `/oldboy/test.sh': Permission denied

    [root@oldboy ~]# mv /oldboy/* /tmp/

    mv: cannot move `/oldboy/file.txt' to `/tmp/file.txt': Permission denied

    mv: overwrite `/tmp/test.sh'? y

    mv: cannot move `/oldboy/test.sh' to `/tmp/test.sh': Permission denied

    [root@oldboy ~]# mv /oldboy/test.sh /oldboy/test.sh.bak

    mv: cannot move `/oldboy/test.sh' to `/oldboy/test.sh.bak': Permission denied

    [root@oldboy ~]# echo "test" > /oldboy/test.sh          ##这个文件内容不属于/oldboy/ block范围内

    [root@oldboy ~]# cat /oldboy/test.sh

    test

    [root@oldboy ~]# lsattr -d /oldboy/

    ----i--------e- /oldboy/

    [root@oldboy ~]# chattr -i /oldboy/

    [root@oldboy ~]# lsattr -d /oldboy/

    -------------e- /oldboy/

    2、针对test.sh文件添加i权限

    [root@oldboy ~]# touch test.sh

    [root@oldboy ~]# chmod 777 test.sh

    [root@oldboy ~]# ls -l test.sh

    -rwxrwxrwx 1 root root 30 Dec  1 09:14 test.sh

    [root@oldboy ~]# chattr +i test.sh

    [root@oldboy ~]# lsattr test.sh

    ----i--------e- test.sh

    [root@oldboy ~]# rm -rf test.sh

    rm: cannot remove `test.sh': Operation not permitted

    [root@oldboy ~]# mv test.sh /tmp/

    mv: overwrite `/tmp/test.sh'? y

    mv: cannot move `test.sh' to `/tmp/test.sh': Operation not permitted

    [root@oldboy ~]# echo "abc" > test.sh

    -bash: test.sh: Permission denied

    [root@oldboy ~]# echo "abc" >> test.sh

    -bash: test.sh: Permission denied

    范例2:

    [root@oldboy ~]# touch test.sh

    [root@oldboy ~]# lsattr test.sh

    -------------e- test.sh

    [root@oldboy ~]# chattr +a test.sh

    [root@oldboy ~]# lsattr test.sh

    -----a-------e- test.sh

    [root@oldboy ~]# rm -rf test.sh

    rm: cannot remove `test.sh': Operation not permitted

    [root@oldboy ~]# > test.sh

    -bash: test.sh: Operation not permitted

    [root@oldboy ~]# echo 123 >> test.sh

    [root@oldboy ~]# cat test.sh

    123

  • 相关阅读:
    OpenJudge 6042 雇佣兵
    POJ 1741 树上 点的 分治
    Codevs 1695 Windows2013
    复制书稿
    乘积最大
    编辑距离问题
    石子合并
    最大正方形子矩阵
    选菜
    混合背包
  • 原文地址:https://www.cnblogs.com/zoulongbin/p/10523533.html
Copyright © 2011-2022 走看看