zoukankan      html  css  js  c++  java
  • linux基础之权限管理

    本节内容

    1. 权限类别

            属主(owner 属组(group 其他人(other

           2. 查看权限

                  ls -l

                  十位: 第一位文件类型-,d,l,

           3. 设置权限

                  chmod 选项 权限模式 filename

                  选项:-R 递归设置

           4. 字母数字权限

                  r: 读权限 -->4 -->SUID

                  w: 写权限-->2-->SGID

                  x: 执行权限-->1-->SBIT

                  -:无权限-->0

           5. UMASK022

                  创建文本666-022=644(创建文本的默认权限)

                  创建目录777-022=755(创建目录的默认权限)

           6.读写执行权限

                  读权限:

                         文本:就是查看文本内容

                         目录:就是ls列出来目录下的文件

                  写权限:

                      文本:就是编辑文本内容

                         目录:就是删除,移动,复制,创建目录下的文件

                  执行权限:

                         文本:就是可以执行该文本(二进制程序和脚本)

                         目录:可以cd到该目录下

           7.属主和属组(:和 .

                  chown 选项 属主:属组 filename

                  chown -R 属主: filename(把属主和属组都改了)

                  chown -R :属组 filename(只更改了属组)

                  chown -R 属主:属组 filename(把属主和属组都改了)

                  chown -R 属主 filename(只更改属主)

           8. 文件特殊权限

                  SUID:只能设置在二进制程序上面(不可以设置在目录上面,可以查看文本,编辑文本)

                         如果给二进制程序上面设置了SUID权限(属主和执行者必须有

                         执行权限),那么执行者在执行该二进制程序使瞬间获得属主权限

                  SGID:可以设置在二进制也可以设置在目录上面

                  SBIT:只能删除自己创建的文件

           9. ACL权限

                  针对特定用户设置特定权限

                         setfacl -m u:ken:r filename创建

                         getfacl filename查看

                         setfacl -b filename删除

           10. sudo

                  就是让某些用户拥有某些命令的最高权限

                  visudo

                  ken   ALL=(ALL) ALL

                  用户 地址 root   命令



    一、权限概述

    Linux系统一般将文件可存/取访问的身份分为3个类别:owner(拥有者)、group(和所有者同组的用户)、others(其他人,除了所有者,除了同组的用户以及除了超级管理员),且3种身份各有read(读)、write(写)、execute(执行)等权限。

    linux系统中的三类人:属主、属组、其他人

    如果root用户创建了test文件,默认属主为root,属组也是root,其他人ren1ren1用户既不是root用户,也不再root组里面,是其他人。

    Linux中,还有一个神一样存在的用户,这就是root用户,因为在所有用户中它拥有最大的权限 ,所以管理着普通用户。

     root用户可以无视读写权限,root用户无执行权限也是无法执行,但自身可以加上权限。

    二、权限介绍

    在多用户(可以不同时)计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权力,像是文件夹、特定系统指令的使用或存储量的限制。

    Linux中分别有读、写、执行权限:

    读权限:

      对于目录来说,读权限影响用户是否能够列出目录结构

      对于文件来说,读权限影响用户是否可以查看文件内容

    写权限:

      对目录来说,写权限影响用户是否可以在文件夹下“创建/删除/复制到/移动到”文档rm,mv,touch…

      对于文件来说,写权限影响用户是否可以编辑文件内容

    执行权限:

      对于目录来说:执行权限影响用户是否可以执行cd操作

      对于文件来说,特别脚本文件。执行权限影响文件是否可以运行。

    三、查看文件权限

    十位字符表示含义:

      第1位:表示文档类型,取值常见的有“d表示文件夹“-表示文件“l表示软连接“s表示套接字“c表示字符设备“b表示块状设备等等;

      第2-4位:表示文档所有者的权限情况,第2位表示读权限的情况,取值有r-;第3位表示写权限的情况,w表示可写,-表示不可写,第4位表示执行权限的情况,取值有x-

      第5-7位:表示与所有者同在一个组的用户的权限情况,第5位表示读权限的情况,取值有r-;第6位表示写权限的情况,w表示可写,-表示不可写,第7位表示执行权限的情况,取值有x-

      第8-10位:表示除了上面的前2部分的用户之外的其他用户的权限情况,第8位表示读权限的情况,取值有r-;第9位表示写权限的情况,w表示可写,-表示不可写,第10位表示执行权限的情况,取值有x-

    权限分配中,均是rwx的三个参数组合,且位置顺序不会变化。没有对应权限就用代替。

    例子:

    [root@renyz08 ~]# ll   #ll 是“ls -l”的别名

    -rw-r--r-- 1 root root 0 7 12 19:38 test

    rw- 表示属主的权限。表示属主对test文件拥有读写权限,无执行权限

    r-- 表示属组的权限。表示属组里面的用户对test文件拥有读权限,无写和执行权限

    r-x 表示其他人的权限。表示其他人对test文件拥有读和执行权限,无写权限。

    四、权限设置

    语法:#chmod 选项 权限模式 文件

    作用:修改文件的权限

    常用选项:

    -R:递归设置权限 (当文档类型为文件夹的时候)

    (同时修改目录及目录下的所有文件)

    权限模式:就是该文档需要设置的权限信息

    文档:可以是文件,也可以是文件夹,可以是相对路径也可以是绝对路径。

    注意点:如果想要给文档设置权限,操作者要么是root用户,要么就是文档的所有者。

    1、用户表示

    u:表示所有者身份owneruser)属主

    g:表示给所有者同组用户设置(group)属组

    o:表示others,给其他用户设置权限(其他人)

    a:表示all,给所有人(包含ugo部分)设置权限

    如果在设置权限的时候不指定给谁设置,则默认给所有用户设置

    2、权限字符:

    r:读

    w:写

    x:表示执行

    -:表示没有权限

    3、权限分配方式:

    +:表示给具体的用户新增权限(相对当前)

    -:表示删除用户的权限(相对当前)

    =:表示将权限设置成具体的值(注重结果)【赋值】

    例子1:给属主增加执行权限

    -rw-r--r-- 1 root root    0 7 12 19:38 test

    [root@renyz08 ~]# chmod u+x test

    [root@renyz08 ~]# ll

    -rwxr--r-- 1 root root    0 7 12 19:38 test

    例子2:去掉属主的执行权限

    [root@renyz08 ~]# chmod u-x test

    [root@renyz08 ~]# ll

    -rw-r--r-- 1 root root    0 7 12 19:38 test

    例子3:授予属主读写执行权限

    方法一:

    [root@renyz08 ~]# chmod u+x test

    方法二:

    [root@renyz08 ~]# chmod u=rwx test

    [root@renyz08 ~]# ll

    -rwxr--r-- 1 root root    0 7 12 19:38 test

    例子4:属主仅用于读权限

    方法一:

    [root@renyz08 ~]# chmod u-wx test

    [root@renyz08 ~]# ll

    -r--r--r-- 1 root root    0 7 12 19:38 test

    方法二:

    [root@renyz08 ~]# chmod u=r test

    [root@renyz08 ~]# ll

    -r--r--r-- 1 root root    0 7 12 19:38 test

    例子5:给属组添加执行权限

    [root@renyz08 ~]# chmod g+x test

    [root@renyz08 ~]# ll

    -r--r-xr-- 1 root root    0 7 12 19:38 test

    例子6:给属组删除执行权限

    [root@renyz08 ~]# chmod g-x test

    [root@renyz08 ~]# ls -l

    -r--r--r-- 1 root root    0 7 12 19:38 test

    例子7:授予属组中用户读写执行权限

    [root@renyz08 ~]# chmod g=rwx test

    [root@renyz08 ~]# ll

    -r--rwxr-- 1 root root    0 7 12 19:38 test

    例子8:给其他人添加执行权限

    [root@renyz08 ~]# chmod o+x test

    [root@renyz08 ~]# ll

    -r--rwxr-x 1 root root    0 7 12 19:38 test

    例子9:给其他人删除执行权限

    [root@renyz08 ~]# chmod o-x test

    [root@renyz08 ~]# ll

    -r--rwxr-- 1 root root    0 7 12 19:38 test

    例子10:给其他人添加读写执行权限

    [root@renyz08 ~]# chmod o=rwx test

    [root@renyz08 ~]# ll

    -r--rwxrwx 1 root root    0 7 12 19:38 test

    思考:让ren2用户拥有root用户在/tmp目录下创建对的test文件的写权限?

    -rw-r--r-- 1 root root 0 7 12 20:32 test

    方法一:

    [root@renyz08 tmp]# chmod 0+w test

    方法二:

    [root@renyz08 tmp]# usermod -G root ren2

    方法三:

    [root@renyz08 tmp]# chown ren2 test

    方法四:

    [root@renyz08 tmp]# chown :ren2 test

    4、用数字表示权限

    经常会在一些技术性的网页上看到类似于#chmod  777  a.txt  这样的一个权限,这种形式称之为数字形式权限(777)。

    读: r        42^2

    写:  w     22^1

    执行:x     12^0

    没有任何权限:0   对应---

    如下:

    rwxr–r        744

    755           rwxr-xr-x

    700           rwx------

    655           rw-r-xr-x

    644           rw-r—r--

    600           rw-------

    000           ---------

    面试题:用超级管理员设置文档的权限命令是#chmod -R 731 aaa,请问这个命令有没有什么不合理的地方?

    所有者 = 7 = 4 + 2 + 1 = + + 执行

    同组用户 = 3 = 2 + 1 = + 执行 

    其他用户 = 1 = 执行

    问题在权限7313表示写+执行权限,但是写又不必须需要能打开之后才可以写,因此必须需要具备读权限,因此权限不合理。以后建议各位在设置权限的时候不要设置这种奇葩权限

    单独出现23的权限数字一般都是有问题的权限

    例子1:属主拥有读写权限,属组拥有读权限,其他人拥有读写执行权限

    [root@renyz08 tmp]# chmod 647 test

    [root@renyz08 tmp]# ll test

    -rw-r--rwx 1 root root 0 7 12 20:32 test

    例子2:同时给所有用户添加执行权限

    [root@renyz08 tmp]# chmod +x test #a+x a可以省略

    [root@renyz08 tmp]# ll test

    -rwxr-xrwx 1 root root 0 7 12 20:32 test

    例子3:同时给所有用户删除执行权限

    [root@renyz08 tmp]# chmod -x test

    [root@renyz08 tmp]# ll test

    -rw-r--rw- 1 root root 0 7 12 20:32 test

    例子4:同时给所有用户添加读权限

    [root@renyz08 tmp]# chmod +r test

    [root@renyz08 tmp]# ll test

    -rw-r--rw- 1 root root 0 7 12 20:32 test

    例子5:同时给所有用户删除读权限

    [root@renyz08 tmp]# chmod -r test

    [root@renyz08 tmp]# ll test

    --w-----w- 1 root root 0 7 12 20:32 test

    例子6:同时给所有用户添加写权限

    [root@renyz08 tmp]# chmod +w test 

          #如果前面不加a的话,默认只添加属主的写权限

    [root@renyz08 tmp]# ll test

    --w------- 1 root root 0 7 12 20:32 test

    [root@renyz08 tmp]# chmod a+w test

    [root@renyz08 tmp]# ll test

    --w--w--w- 1 root root 0 7 12 20:32 test

    例子7:同时删除所有人的写权限

    [root@renyz08 tmp]# chmod a-w test

    [root@renyz08 tmp]# ll test

    ---------- 1 root root 0 7 12 20:32 test

    设置权限注意事项:

    要么只读

    如果有写权限,那么就需要有读权限

    5-R 选项:在更改目录权限时使用

    例子1

    [root@renyz08 tmp]# mkdir test

    [root@renyz08 tmp]# ll test

    总用量 0

    [root@renyz08 tmp]# touch test/test{1..4}

    [root@renyz08 tmp]# ll test

    总用量 0

    -rw-r--r-- 1 root root 0 7 12 20:53 test1

    -rw-r--r-- 1 root root 0 7 12 20:53 test2

    -rw-r--r-- 1 root root 0 7 12 20:53 test3

    -rw-r--r-- 1 root root 0 7 12 20:53 test4

    [root@renyz08 tmp]# chmod +x test

    #不加-R选项仅仅只会更改ken目录本身的权限

    [root@renyz08 tmp]# ls -ld test

    drwxr-xr-x 2 root root 58 7 12 20:53 test

    [root@renyz08 tmp]# ll test

    总用量 0

    -rw-r--r-- 1 root root 0 7 12 20:53 test1

    -rw-r--r-- 1 root root 0 7 12 20:53 test2

    -rw-r--r-- 1 root root 0 7 12 20:53 test3

    -rw-r--r-- 1 root root 0 7 12 20:53 test4

    [root@renyz08 tmp]# chmod -R +x test

    #-R选项会把ken目录以及目录下的所有文件权限都会更改

    [root@renyz08 tmp]# ll test

    总用量 0

    -rwxr-xr-x 1 root root 0 7 12 20:53 test1

    -rwxr-xr-x 1 root root 0 7 12 20:53 test2

    -rwxr-xr-x 1 root root 0 7 12 20:53 test3

    -rwxr-xr-x 1 root root 0 7 12 20:53 test4

    五、chown命令

    作用:更改文件的属主(change owner

    语法:#chown  -R  新的username 文档路径

    选项:

    -R 同时更改目录以及目录下的所有文件的属主和属组(文件不需要-R

    例子1:改变test2文件的属主为ren2

    [root@renyz08 tmp]# chown ren2 test/test2

    例子2:改变test2文件的属组为ren3

    [root@renyz08 tmp]# chown :ren3 test/test2

    [root@renyz08 tmp]# ll test/test2

    -rwxr-xr-x 1 ren2 ren3 0 7 12 20:53 test/test2

    例子3:同时更改为test3文件的属主和属组权限为root

    方法一:

    [root@renyz08 tmp]# chown root:root test/test3

    [root@renyz08 tmp]# ll test/test3

    -rwxr-xr-x 1 root root 0 7 12 20:53 test/test3

    方法二:

    [root@renyz08 tmp]# chown root: test/test3

    方法三:

    [root@renyz08 tmp]# chown root.root test/test3

    方法四:

    [root@renyz08 tmp]# chown root. test/test3

    例子4-R 选项

    [root@renyz08 tmp]# chown ren4. test

    #不加-R仅仅更改目录本身的属主和属组

    [root@renyz08 tmp]# ll

    drwxr-xr-x 2 ren4 ren4    58 7 12 20:53 test

    [root@renyz08 tmp]# ll test

    总用量 0

    -rwxr-xr-x 1 root root 0 7 12 20:53 test1

    -rwxr-xr-x 1 ren2 ren3 0 7 12 20:53 test2

    -rwxr-xr-x 1 root root 0 7 12 20:53 test3

    -rwxr-xr-x 1 root root 0 7 12 20:53 test4

    [root@renyz08 tmp]# chown -R ren4. Test

    #加上-R同时更改目录以及目录下的所有文件的属主和属组

    [root@renyz08 tmp]# ll test

    总用量 0

    -rwxr-xr-x 1 ren4 ren4 0 7 12 20:53 test1

    -rwxr-xr-x 1 ren4 ren4 0 7 12 20:53 test2

    -rwxr-xr-x 1 ren4 ren4 0 7 12 20:53 test3

    -rwxr-xr-x 1 ren4 ren4 0 7 12 20:53 test4

    六、文件的特殊权限

    SUID

    SGID

    SBIT

    ACL

    1、SUIDset uid设置用户ID

    限定:只能设置在二进制可执行程序上面。对目录设置无效

    功能:程序运行时的权限从执行者变更成程序所有者的权限

    注意:设定suid的命令其他人也需要有执行权限

    uid权限设置:

    chmod u+s cmd

    例子1:给cat命令添加SUID权限(普通用户没法cat /etc/shadow

    [root@renyz08 ~]# chmod u+s `which cat`

    [root@renyz08 ~]# ls -ld `which cat`

    -rwsr-xr-x. 1 root root 54160 10 31 2018 /usr/bin/cat

    #文件有执行权限时,添加SUID后,显示s

    [root@renyz08 ~]# chmod u-x `which cat`

    [root@renyz08 ~]# ls -ld `which cat`

    -rwSr-xr-x. 1 root root 54160 10 31 2018 /usr/bin/cat

    #文件没有执行权限时,添加SUID后,显示S

    验证:

    再次查看/etc/shadow文件发现可以看了

    [ren23@renyz08 ~]$ cat /etc/shadow

    root:$6$yqv.0UOIdStkIBmT$lr6lh4dghoNJQF6YoPn4upZFCUNT0df1SDujNlnIQzWKETrEJsYgdcqly611u1FXmkPblNMWG2swNETi7N5Ff1::0:99999:7:::

    bin:*:17834:0:99999:7:::

    daemon:*:17834:0:99999:7:::

    2SGID

    限定:既可以给二进制可执行程序设置,也可以对目录设置权限

    功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的所属组

    例子1:给目录test添加SGID权限

    [root@renyz08 tmp]# ls -ld test

    drwxr-xr-x 2 ren4 ren4 97 7 13 09:01 test

    [root@renyz08 tmp]# chmod g+s test

    drwxr-sr-x 2 ren4 ren4    97 7 13 09:01 test

    [root@renyz08 tmp]# touch test/test123

    [root@renyz08 tmp]# ll test/test123

    -rw-r--r-- 1 root ren4 0 7 13 10:25 test/test123

    3SBIT

    对于设置sbit权限的文件,用户只能删除自己创建的文件,无法删除其他用户的文件

    例子1:设置SBIT权限

    [root@renyz08 ~]# chmod o+t /tmp/test

    [root@renyz08 ~]# ls -ld /tmp/test

    drwxrwsr-t 2 ren4 ren4 125 7 13 10:33 /tmp/test

    /tmp目录本身默认已经添加了SBIT权限!

    [root@renyz08 ~]# ls -ld /tmp

    drwxrwxrwt. 15 root root 4096 7 13 09:41 /tmp

    验证:

    [ren2@renyz08 test]$ touch test22

    [ren2@renyz08 test]$ su - ren3

    [ren3@renyz08 test]$ rm -rf test22

    验证无法删除!

    如何删除?

    [root@renyz08 ~]# chmod o-t /tmp/test

    [ren3@renyz08 test]$ rm -f test22

    [ren3@renyz08 test]$

    4ACL

    扩展ACL  access control list

    作用:对特定的用户实现了权限管控

    选项:-m (--modify) 表示设置的意思

    例子1:设置ren2用户对文件test8拥有读写权限

    [root@renyz08 test]# setfacl -m u:ren2:rw test8

    -rw-rw-r--+ 1 root ren4 0 7 13 10:33 test8

    验证:

    [root@renyz08 test]# id ren2

    uid=1005(ren2) gid=0(root) =0(root),1011(ren3)

    [root@renyz08 test]# id ren3

    uid=1011(ren3) gid=1011(ren3) =1011(ren3),0(root)

    [ren3@renyz08 test]$ su - ren2

    [ren2@renyz08 ~]$ cd /tmp/test

    [ren2@renyz08 test]$ cat test8

    [ren2@renyz08 test]$ echo "123" > test8 #ren2用户可读可写

    [ren2@renyz08 test]$ cat test8

    123

    [ren2@renyz08 test]$ su - ren3

    [ren3@renyz08 ~]$ cd /tmp/test

    [ren3@renyz08 test]$ cat test8

    123

    [ren3@renyz08 test]$ echo "dd" > test8 #ren3用户可读不可写

    -bash: test8: 权限不够

    怎么清除acl权限:

    [root@renyz08 test]# setfacl -b test8

    [root@renyz08 test]# getfacl test8

    # file: test8

    # owner: root

    # group: ren4

    user::rw-

    group::r--

    other::r--

    七、sudo

    sudoswitch user do)命令用来进行权限设置。Sudo可以让管理员(root)事先定义某些特殊命令谁可以执行。

    默认sudo中是没有除root之外用户的规则,要想使用需先配置sudo

    Sudo配置文件:/etc/sudoers

    该文件默认只读,不允许修改,因此不能直接修改。

    a. 配置sudo文件请使用“#visudo”,打开之后其使用方法和vim一致

    b. 配置普通用户的权限(在root下增加)

    99 ## Allow root to run any commands anywhere

        100 root    ALL=(ALL)       ALL

    Root:表示用户名,如果是用户组,则可以写成“%组名

    ALL:表示允许登录的主机(地址白名单)

    (ALL):表示以谁的身份执行,ALL表示root身份

    ALL:表示当前用户可以执行的命令,多个命令可以使用“,”分割

    例子1:让ren2用户拥有创建用户的功能

    [root@renyz08 test]# visudo

    101 ren2    ALL=(ALL)       /sbin/useradd

    #ren2是用户名,ALL表示可以从任意主机进行登录(ALL root的身份进行尽心命令的运行

    #/sbin/useradd表示ren2用户可以以root的身份来执行创建用户

    [root@ken tmp]# visudo

    [ren2@renyz08 ~]$ useradd ren11

    useradd: Permission denied.

    useradd:无法锁定 /etc/passwd,请稍后再试。

    [ren2@renyz08 ~]$ sudo useradd ren11

    #配置visudo后需要使用sudo去执行相应的命令

    我们信任您已经从系统管理员那里了解了日常注意事项。

    总结起来无外乎这三点:

        #1) 尊重别人的隐私。

        #2) 输入前要先考虑(后果和风险)

        #3) 权力越大,责任越大。

     #如果用户ren2设置了登录密码,在第一次执行命令时需要输入密码,同时5分钟之内不需要输入密码!

    注意:在写sudo规则的时候不建议写直接形式的命令,而是写命令的完整路径。

    路径可以使用which命令来查看

    语法:#which 指令名称

  • 相关阅读:
    【Visual C++】游戏开发笔记之六——游戏画面绘图(三)透明特效的制作方法
    【不定期更新】游戏开发中的一些良好习惯与技术技巧
    【Visual C++】游戏开发笔记之七——基础动画显示(一)定时器的使用
    【超级经典】程序员装B指南(转)
    Gentoo安装小记
    图形学中的贴图采样、走样与反走样等
    面试题之银行业务调度系统
    四川雅安芦山加油挺住
    ZOJ 3223 Journey to the Center of the Earth
    android中ListView拖动时背景黑色的问题
  • 原文地址:https://www.cnblogs.com/renyz/p/11178478.html
Copyright © 2011-2022 走看看