• 权限


    修改权限

    chmod  ()  文件或目录    可以直接修改文件或目录的权限,选项必须放中间
    # 数字修改
    [root@localhost ~]# chmod 777 a.sh  数字必须放在chmod 后面,0777是最大权限,不考虑特殊权限的情况下
    
    -R +  数字   :递归授权  可以直接修改文件或目录,修改目录下所有目录或文件的属性,最前面不能放,别的位置都可以放
    
    # 字⺟修改
    [root@localhost ~]# chmod a=rwx zls_quanxian   777  all  a=0 错  ,没有写的都是-
    [root@localhost ~]# chmod u=rwx zls_quanxian
    [root@localhost ~]# chmod g=rw zls_quanxian
    [root@localhost ~]# chmod o=rx zls_quanxian
    [root@localhost ~]# chmod u=rwx,g=rw,o=r zls_quanxian
    [root@oldboy ~]# chmod u+rwx,g+rwx ,o+rwx yy2  中间不能有空格
    chmod: cannot access ‘,o+rwx’: No such file or directory
    # UGO⽅式修改(+-)
    [root@localhost ~]# chmod o-x a.sh   可以同时减去两个
    [root@localhost ~]# chmod u-w a.sh
    [root@localhost ~]# chmod g-r a.sh
    [root@localhost ~]# chmod u+x a.sh
    [root@localhost ~]# chmod -x zls123   去掉所有的x
    [root@localhost ~]# chmod +x zls123   加上所有的x
    [root@localhost ~]# chmod u-r,g-rw,o-r zls_quanxian  中间不能有空格
    [root@oldboy ~]# chmod  a+x  333 -R
    
    rwx权限对文件的影响
    r:⽂件可以读取内容,不能写,不能执⾏
    w:⽂件可以写⼊内容,但是追加只能>>,不能vim,因为不能读取内容,所以不能修改⽂件内容,只能覆盖(vim 可以写入)
    x:啥也不能⼲,普通用户因为没有读权限。所以⽆法执⾏⽂件中的内容,#root可以执行
    rw:可读,可写,不能执⾏
    rx:可读,可执⾏,不能写 
    wx:可写,不可读,也不可以执行,root用户可以执行
    rwx:可读,可写,可执⾏   深绿
    注意:⽂件的rwx权限,只能针对⽂件内容,如果想要删除,或者移动,那么跟⽂件所在⽬录的权限有关
    cp (读) mv (写) rm (写) 要看上一级目录的权限
    
    rwx权限对目录的影响
    r:可以查看⽬录下所有的⽂件 名 ,但是看不⻅⽂件或目录的详细信息,也不能看二级目录下的一切,不能移动文件不能移动目录,想看文件信息,#必须rx
    rx:加上x权限,就可以看⻅⽂件的详细信息了 蓝 ,可以进子目录了,可以cp,不能rm,mv
    w:啥也不是,不能删除目录下的文件,但是想要删除目录下的内容必须要有w
    wx:可以创建,可以删除,不能查看,可以进入目录,ll显示权限不足
    rw:可以查看⽬录下的⽂件,可以写入,但是不能删除,不能移动,不能拷⻉,可以查看文件内容
    rwx:删除⽂件,创建⽂件,移动⽂件,拷⻉⽂件,查看  背景绿
    x:啥也不是,#辅助查看,辅助删除,没有x就不能删除,有x就能进
    -rwxr-x--- 1 zls qiandao 0 4⽉ 2 12:10 aaaa
    zls⽤户: rwx
    qiandao组: rx
    其他⽤户:没有任何权限
    zls:rwx
    zls1:rx
    zls2:0
    chown 属主.属组  文件或目录
    chown root.root /zls  .或:前后都不能有空格
    chown root:root /zls
    chown .zls /zls  .后面不能有空格
    chown :zls /zls
    chown zls . /zls  只修改属主,最多只能有一个空格
    chown zls. /zls  修改属主和属组
    chown zls: /zls  修改属主和属组
    -rwxr-x--- 1 root root 0 4⽉ 2 12:10 aaaa
    ⽤户 ⽤户组
    chown zls.zls aaaa
    chown root.zls aaaa
    chown zls.root aaaa
    chown www.www /code
    -R:递归修改属组和属主
    
    
    SetUID权限
    在Linux系统中,每个普通用户都可以更改自己的密码,这是合理的设置,问题是,普通哦用户的信息保存在 /etc/passwd文件中,与用户的密码在 /etc/shadow 文件中,也就是说,普通用户在更改自己密码时,修改了 /etc/shadow 文件中的加密密码,但是文件权限显示。普通用户对这两个文件都没有写权限。
    当一个具有执行权限的文件设置了SetUID权限后,用户在执行这个文件时,将以文件所有者身份来执行,命令执行完成后该身份也就消失了
    
    [root@oldboy ~]# stat 2.
      File: ‘2.’
      Size: 10244     	Blocks: 24         IO Block: 4096   regular file
    Device: 803h/2051d	Inode: 33615068    Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: unconfined_u:object_r:admin_home_t:s0
    Access: 2020-04-03 12:02:14.752816436 +0800
    Modify: 2020-04-03 11:58:46.135806488 +0800
    Change: 2020-04-03 12:01:56.091815546 +0800
     Birth: -
     
    [root@oldboy ~]# stat -c %a 2.
    [root@oldboy ~]# stat 2. | grep 0644 | sed -nr 's#.*s: (0(.*)/-.*#1#p'
    [root@oldboy ~]# stat 2. | sed -n '4p'| cut -c 11-13
    [root@oldboy ~]# stat 2. | sed -n '4p' | sed -nr 's#.*(0(.*)/-.*#1#p'
    [root@oldboy ~]# stat 2. | sed -nr '4s#.*(0(.*)/-.*#1#p'
    
    [root@oldboy ~]# stat 2. | awk -F[0/] 'NR==4{print $2}'
    
    [root@oldboy ~]# stat 2. | grep 0644 | cut -c 11-13
    [root@oldboy ~]# stat 2. | grep 0644 | tr / 0 | cut -d 0 -f 2
    [root@oldboy ~]# stat 2. | grep -w 0644 | tr 0 / | cut -c 11-13
    [root@oldboy ~]# stat 2. | grep -o  "Access: ([0-9][0-9][0-9][0-9]" |grep -o  "[0-9][0-9][0-9]$"
    [root@oldboy ~]# stat cs | grep 0755 | grep -o 755
    [root@oldboy ~]# stat cs | grep -o 755
    
    [root@oldboy ~]# stat 1.txt | head -4 | tail -1 | cut -d '0' -f2 |cut -d '/' -f1
    
    # 使⽤五种⽅法,查看⽂件的权限,数字形式
    [root@www ~]# stat 1.txt |awk -F '[(: 0/]+' 'NR==4{print $2}'
    awk指定在一起的分隔符的时候,用+ ,有(的话注意转义( ,在一起的列忽略列数
    [root@www ~]# stat 1.txt |sed -nr '4s#.*: (0(.*)/-.*#1#gp'
    小心贪婪匹配,转义特殊符号
    [root@www ~]# ls -l 1.txt |tr 'rwx-' '4210'|awk -F '' '{print $2+$3+$4
    $5+$6+$7 $8+$9+$10}'  
    awk指定分隔符的时候已经定义了变量,可以用$直接用,awk可以调用变量相加
    [root@www ~]# stat 1.txt | grep -o "Access: ([0-9][0-9][0-9][0-9]" |grep -
    o "[0-9][0-9][0-9]$"
    644
    [root@www ~]# quan="$( stat 1.txt | head -4 | tail -1 )" && echo
    ${quan:10:3}    双引号可以省略,不能用单引号
    echo 也可以截取字符,quan已经定义了变量,可以用$直接调用,格式 echo ${变量:目标之前字符个数:目标字符个数},针对行
    644 
    
    # 特殊权限
    passwd 是命令    和   /usr/bin/passwd  也是一个命令,像是软链接关系。/etc/passwd 是一个文件,
    
    修改属主属组的话,原来属主属组位上的**s**会消失
    
    [root@www ~]# ll /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27832 6⽉ 10 2014 /usr/bin/passwd
    [root@www ~]# ll /usr/bin/write
    -rwxr-sr-x. 1 root tty 19624 4⽉ 11 2018 /usr/bin/write
    [root@www ~]# ll /tmp/ -d
    drwxrwxrwt. 9 root root 4096 4⽉ 3 09:49 /tmp/
    

    SUID (set uid)

    属主权限位上,本来应该是x执⾏权限出现了⼀个s ⼀般是针对可执⾏⽂件(二进制,命令)

    如果一个没有执行权限的文件,属主权限位上有s 的话,s没有意义

    /etc/passwd 上虽然有s ,普通用户可以修改自己的密码,/usr/passwd 属主权限位上如果有s ,虽然以root的身份去执行,但是还是不能修改别的用户的密码,这是程序设定的,没有路过去(或许这也是一种权限的问题把)

    /usr/bin/passwd

    文件有SUID,只是这个文件有SUID,里面的内容没有

    sudo提权,整个用户有了root的权限

    文件

    如果⼀个可执⾏⽂件,在属主权限位的x位上有s权限,那么证明该⽂件有set uid特殊权限。
    set uid:任何⽤户(除了root外)执⾏具有suid权限的⽂件时,会以该⽂件属主的身份去执⾏
    属主权限位上有s的话,直接看 该文件或目录的 属主身份 去执行这个文件(root或普通用户),不看属主权限位
    用于 :passwd  vim  (对命令文件授权加上s,属主又是root)
    rwsr-xr-x  /usr/cat   那么cat 看哪都行,还可以追加
    
    vim如果有setuid权限的话,一切普通用户都变成了root用户,可以执行root的写权限,针对 写 来说,可以vim /etc/sudoers   vim /root,然后把自己加入到sudo 文件中,这样可以继承root的一切权限,甚至创建用户
    
    ## SUID授权----4
    # chmod ugo⽅式   (不能是字母授权)
    [root@www ~]# chmod u+s ⽂件或⽬录
    # chmod number⽅式 4000
    [root@www ~]# chmod 4755 aaaa   添加属主位特殊权限s
    [root@www ~]# chmod 4000 aaaa	添加属主位特殊权限,同时修改文件权限
    [root@oldboy tmp]# chmod 0744 a.sh  取消属主位特殊权限
    注意:当授权⽂件,原本属主位上有x权限时,是s,原本属主位上没有x权限时,是S
    
    [root@oldboy tmp]# ll /usr/bin/passwd
    -rws--x--x. 1 root root      27856 Aug  9  2019 passwd  (有没有s无所谓)
    
    [root@oldboy ~]# ll /etc/passwd
    -rwsr-xr-x 1 root root 2540 Apr  4 02:53 /etc/passwd(root的身份,zls的身份)
    [root@oldboy ~]# chmod 644 /etc/passwd  (默认是0644)
    [root@oldboy ~]# ll /etc/passwd
    -rw-r--r-- 1 root root 2540 Apr  4 02:53 /etc/passwd
    

    SGID (set gid)

    目录

    属组权限位上,本来应该是x执⾏权限出现了⼀个s ⼀般是针对⽬录(满权限),也有可执⾏⽂件(⼤部分针对⽬录)

    [root@www ~]# ll /usr/bin/write
    -rwxr-sr-x. 1 root tty 19624 4⽉ 11 2018 /usr/bin/write
    

    1.针对⽤户组权限位修改,⽤户创建的⽬录或⽂件所属组和该⽬录的所属组⼀致。 2.当某个⽬录设置了 sgid后,在该⽬录中新建的⽂件不在是创建该⽂件的默认所属组 3.使⽤sgid可以使得多个⽤户之间共享 ⼀个⽬录的所有⽂件变得简单。 主要⽬的:共享⽬录(指定)

    ## SGID授权⽅式----2
    # chmod ugo⽅式
    [root@www ~]# chmod g+s /tmp/test/
    # chmod number⽅式 2000
    [root@www ~]# chmod 2000 3
    注意:当授权⽂件,原本属组位上有x权限时,是s,原本属组位上没有x权限时,是S
    
    [root@oldboy ~]# mkdir -m 2755 999   /root下创建一个共享目录
    [root@oldboy ~]# ll 999
    total 0
    [root@oldboy ~]# ll 999 -d
    drwxr-sr-x 2 root root 6 Apr 30 03:43 999
    [root@oldboy ~]# mv 999 /
    [root@oldboy ~]# ll /999 -d
    drwxr-sr-x 2 root root 6 Apr 30 03:43 /999
    [root@oldboy ~]# cd /999
    [root@oldboy 999]# ll
    total 0
    [root@oldboy 999]# mkdir oo
    [root@oldboy 999]# ll
    total 0
    drwxr-sr-x 2 root root 6 Apr 30 03:45 oo  普通用户创建目录,权限位,属组跟共享目录一样,属主是自己,创建文件,是普通的644权限,属主也是自己,这样属组位上没用w,同组的普通用户还是不能创建为文件,所以suid为了实现共享目录,是作用于*7*权限的目录的,s的作用就是使--目录的权限位跟共享目录一样,属组跟共享目录一样,不改变其他内容,是文件的属组跟共享目录一样,不改变其他内容
    目录:--sgid--*7*--共享
    文件:--sgid--*7*--自己设置文件770权限--共享
    
    [root@oldboy 999]# touch ll               
    [root@oldboy 999]# ll
    total 0
    -rw-r--r-- 1 root root 0 Apr 30 03:46 ll
    drwxr-sr-x 2 root root 6 Apr 30 03:45 oo
    [root@oldboy ~]# mkdir jj
    [root@oldboy ~]# ll
    drwxr-xr-x  2 root root     6 Apr 30 03:47 jj
    
    
    [syya@oldboy ~]$ mkdir -m 000 ml
    [syya@oldboy ~]$ ll -d ml
    d--------- 2 syya syya 6 Apr 30 04:15 ml  000权限的目录
    [syya@oldboy ~]$ rm -rf ml   普通用户相对于自己创建的文件或目录,不是 root,按规矩
    [syya@oldboy ~]$ ll ml       办事,不过可以直接删除
    ls: cannot access ml: No such file or directory
    

    SBIT (粘滞位)

    目录

    限制其他用户的权限,在有sbit权限的目录中,只能操作自己 的文件或目录(只能读写执行自己的),限制其他用户的权限,只能授权目录

    sticky (SI TI KI)粘滞 在其他⽤户权限位上,本来应该是x执⾏权限出现了⼀个t 普通⽤户对该⽬录拥有w和x权限,即普通⽤户可以在此⽬录中拥有写⼊权限,*如果没有粘滞位,那么普 通⽤户拥有w权限,就可以删除此⽬录下的所有⽂件,包括其他⽤户简历的⽂件。但是⼀旦被赋予了粘 滞位,除了root可以删除所有⽂件,普通⽤户就算有w权限也只能删除⾃⼰建⽴的⽂件,⽽不能删除其 他⽤户简历的⽂件。

    ** 系统中存在的 /tmp ⽬录是经典的粘滞位⽬录,谁都有写权限,因此安全成问题,常常是⽊⻢第⼀⼿跳 板。

    /tmp 是系统设置的一个777 目录

    [root@oldboy tmp]# ll -d /tmp/
    drwxrwxrwt. 8 root root 188 Apr 3 08:15 /tmp/

    ## SB授权⽅式
    # chmod ugo ⽅式----1
    [root@www ~]# chmod o+t SB
    # chmod number⽅式
    [root@www ~]# chmod 1755 IT
    注意:当授权⽬录,原本其他⽤户权限位上有x权限时,是t,原本其他⽤户权限位上没有x权限时,是T
    作用对象 : wx rwx 目录,粘滞位可以防止普通用户(其他用户),删除别人的文件
    
    [root@oldboy tmp]# ll -d /tmp/
    drwxrwxrwt. 8 root root 188 Apr  3 08:15 /tmp/
    
    

    命令中的''慈禧'' ,隐藏权限,额外权限

    # 当创建一个用户的时候:1.创建用户   信息记录到 > /etc/passwd1.1 用户相关的密码  记录到 > /etc/shadow​2.创建用户组  信息记录到 > /etc/group2.1 用户组相关的密码 记录到 > /etc/gshadow​# chattr  上锁 chattr +i 文件或目录 ,可以查看追加和拷贝,可以覆盖,只有root可以使用无视用户的权限,是一种凌驾于rwx的权限+i 目录,root和普通用户可以进入上锁的目录,可以cp(文件)(到别的目录),不能创建目录或文件,不能删除或移动,只能查看目录下的目录或文件的内容  看-cp-执行(删根)​+i 文件   只能看。不能移动,不能删除,可以拷贝文件,并且拷贝出来的文件没有上锁,用vim只能看到文件内容,不能删除,不能追加​+a 文件  只能看和追加内容(不能覆盖),可以复制(文件),并且没有上锁,看-追加-cp-执行​+a 目录  可以看,可以创建文件或目录,可以拷贝文件​lsattr 目录或文件   只查看额外的权限,不能删除,移动-a    查看隐藏的权限-d    查看 目录 的权限​ai=a 可以同时用,可以追加创建用户设计到4个文件,/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow只要锁住一个文件,root就不能创建用户
    
    # umask
    系统默认的umdsk 是-0022  (-2 减的就是w ),w很重要,可以配合x,执行删除,mv
    
    创建目录:777 - umask
    
    创建文件;   666 - umask
    
    文件用666- ,因为系统自动-1-1-1  
    
    UID=xxx   , 是系统自定义的一个变量
    
    echo  $UID   =  id  -u     可以查看uid ,
    
    创建一个目录,默认权限是755,创建一个文件,默认权限是666
    
    ```bash
    [root@www ~]# vim /etc/profile
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
        umask 002
    else      
        umask 022 
    fi
    如果用户的uid 和 gid 名字一样,并且数值大于199,那么umask=0002,否则umask=0022
    
    
    [root@www ~]# umask  查看umask
    0022 = 22
    
    mkdir dir
    0777
    0022
    ----
    0755  所以创建一个目录,默认权限是755
    
    touch file
    0666 (系统自动-1-1-1)
    0022
    ----
    0644  所有创建一个文件,默认权限是644
    
    
    [root@www ~]# umask 0033  自定义umask (临时修改)
    [root@www ~]# umask
    0033
    
    dir:744
    file:644
    
    [root@www ~]# umask 0011  当umask中出现奇数时:目录计算方式不变,但是文件uask奇数位的结果要+1
    dir:766
    file:666
    
    0777
    0011
    ----
    0766  (目录有奇数位,数值也不变)
    
    0666
    0011
    ----
    0655 (结果奇数位+1)
    0666
    
    [root@www ~]# umask 0033
    dir:733
    file:622
    
    # umask 0033 计算,当umask中出现奇数时:目录计算方式 不变 ,但是umask奇数位的结果要+1
    0777
    0033
    ----
    0744
    
    0666
    0033
    ----
    0633
    0644
    
    
    
    [root@www ~]# umask 0045
    dir:732
    0777
    0045
    ----
    0732
    
    file:622
    
    0666
    0045
    ----
    0622
    
    
    [root@oldboy ~]# echo $UID
    0
    [root@oldboy ~]# echo "$UID"  弱引用
    0
    [root@oldboy ~]# echo '$UID'  强引用
    $UID
    
    # 总结
    # SUID
    作用:如果一个文件(或目录),被设置SUID的权限,那么任何用户执行该文件,都会以该文件属主身份去执行(root或者普通用户)
    
    [root@www ~]# ll /etc/shadow  (系统默认权限,root可以修改)
    ---------- 1 root root 85555 4月   3 12:19 /etc/shadow
    [root@oldboy ~]# ll /usr/bin/passwd      s-执行(普通用户bash)-结果 ,系统默认的suid权限,普通用户只能修改自己的账号密码,这是程序的原因
    -rwsr-xr-x 1 root root 27856 Apr  4 05:09 /usr/bin/passwd
    [root@oldboy ~]# ll -d /tmp/  (sbit粘滞位)限制别的普通用户的权限,是用户只能对自己的文件或目录操作
    drwxrwxrwt. 11 root root 266 Apr  7 08:37 /tmp/
    
    
    
    [root@oldboy ~]# vim 1.txt  编辑文件,写入 useradd syy
    [root@oldboy ~]# ll 1.txt  644,默认没有执行权限
    -rw-r--r-- 1 root root 9 Apr  7 16:58 1.txt
    [root@oldboy ~]# /root/1.txt   没有执行权限所以报错,没有x就是不能执行(包括root)
    -bash: /root/1.txt: Permission denied
    [root@oldboy ~]# chmod a+x,u+s 1.txt
    [root@oldboy ~]# ll 1.txt
    -rwsr-xr-x 1 root root 9 Apr  7 16:58 1.txt
    [root@oldboy ~]# /root/1.txt  文件有了执行权限,所以会执行里面的内容
      权限不足              (useradd syy)  
    虽然以root的身份去执行这个文件,但是里面的内容还是在普通用户的bash 里执行的,所以有可能会显示没有权限(看里面的内容有没有牵涉到root),#用sudo 可以权限问题
    没有x(执行权限)的目录或文件,root也不能执行。没有w的目录或文件,root可以写,没有r的目录或文件,root也可以读
    
    
    
    [root@oldboy ~]# ll /etc/shadow
    ---------- 1 root root 3705 Apr  6 13:16 /etc/shadow
    [root@oldboy ~]# vim /etc/shadow
    dbus:!!:18336::::::0   虽然root用户对这个文件没有 任何权限,但是可以操作
    
    # 创建一个用户需要修改几个文件
    /etc/passwd  用户信息 644
    /etc/shadow  用户密码 000
    
    /etc/group   组名  644
    /etc/gshadow 组密码 000
    
    [zls@www ~]# ll /usr/bin/passwd  二进制文件,ll可以省略
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    [root@oldboy ~]# ll /etc/shadow  000文件
    -rw------- 1 root root 3705 Apr  6 13:16 /etc/shadow
    [root@oldboy ~]# ll /etc/passwd  普通文件
    -rwxr--r-- 1 root root 2808 Apr  6 13:16 /etc/passwd
    
  • 相关阅读:
    C++中整型变量的存储大小和范围
    A1038 Recover the Smallest Number (30 分)
    A1067 Sort with Swap(0, i) (25 分)
    A1037 Magic Coupon (25 分)
    A1033 To Fill or Not to Fill (25 分)
    A1070 Mooncake (25 分)
    js 获取控件
    C#代码对SQL数据库添加表或者视图
    JS 动态操作表格
    jQuery取得下拉框选择的文本与值
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/12813402.html
Copyright © 2020-2023  润新知