分享

1.4 权限管理

 印度阿三17 2019-09-21

权限管理

权限管理

1.权限简介

文件的权限主要针对三类对象进行定义:

  • owner:属主,u
  • group:属组,g
  • other:其它,o

每个文件针对每个访问者都定义了三种权限:

权限 对应的操作对象 权限说明
r 文件 可读,可以使用类似cat等命令查看文件内容
w 文件 可写,可以编辑或删除此文件
x 文件 可执行,eXacutable,可以在命令提示符下
当作命令提交给内核运行
r 目录 可以对此目录执行ls以列出内部的所有文件
w 目录 可以在此目录中创建文件,也可删除此目录中的文件
x 目录 可以使用cd切换进此目录,也可以
使用ls -l查看内部文件的详细信息

权限的二进制与十进制转换:

权限 二进制 十进制
- - - 000 0
- -x 001 1
-w- 010 2
-wx 011 3
r- - 100 4
r-x 101 5
rw- 110 6
rwx 111 7

2.权限管理命令

2.1 修改权限命令chmod

  • 命令:chmod [权限] [username] 修改文件和目录权限
    • -R 递归修改权限
      • 修改目录权限时可用,使用后目录及其以下所有文件均被修改权限
    • 以二进制代表权限修改
      示例:
      [root@localhost ~]# ll
      总用量 0
      -rw-r--r--. 1 root root 0 9月  20 14:43 a
      [root@localhost ~]# chmod 000 a	//属主权限、组权限和其它权限均设置为无
      [root@localhost ~]# ll
      总用量 0
      ----------. 1 root root 0 9月  20 14:43 a
      [root@localhost ~]# chmod 100 a	//属主权限设置为可执行;组权限和其它权限均设置为无
      [root@localhost ~]# ll
      总用量 0
      ---x------. 1 root root 0 9月  20 14:43 a
      [root@localhost ~]# chmod 200 a	//属主权限设置为只读权限;组权限和其它权限均设置为无
      [root@localhost ~]# ll
      总用量 0
      --w-------. 1 root root 0 9月  20 14:43 a
      [root@localhost ~]# chmod 400 a	//属主权限设置为只能写权限;组权限和其它权限均设置为无
      [root@localhost ~]# ll
      总用量 0
      -r--------. 1 root root 0 9月  20 14:43 a
      [root@localhost ~]# chmod 700 a	//属主权限设置为读写和可执行权限;组权限和其它权限均设置为无
      [root@localhost ~]# ll
      总用量 0
      -rwx------. 1 root root 0 9月  20 14:43 a
      
    • 修改某类用户或某些类用户权限
      • 用户类别

        • u:属主
        • g:属组
        • o:其它用户
        • a:以上全部
      • 加权限命令

        • chmod 用户类别 [MODE] file,…
        • chmod 用户类别 [MODE],用户类别 [MODE] file,…
        • chmod [MODE] file,… (不加用户类别,w默认只加减用户,r和x默认加减所有)

        示例:

        [root@localhost ~]# ll
        总用量 0
        ----------. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod u w a
        [root@localhost ~]# ll
        总用量 0
        --w-------. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod g w a
        [root@localhost ~]# ll
        总用量 0
        --w--w----. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod o w a
        [root@localhost ~]# ll
        总用量 0
        --w--w--w-. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod 000 a
        [root@localhost ~]# ll
        总用量 0
        ----------. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod a w a
        [root@localhost ~]# ll
        总用量 0
        --w--w--w-. 1 root root 0 9月  20 14:43 a
        
      • 取消权限命令

        • chmod 用户类别-[MODE] file,…
        • chmod 用户类别-[MODE],用户类别-[MODE] file,…
        • chmod -[MODE] file,… (不加用户类别,w默认只加减用户,r和x默认加减所有)

        示例:

        [root@localhost ~]# ll
        总用量 0
        -rwxrwxrwx. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod u-x a
        [root@localhost ~]# ll
        总用量 0
        -rw-rwxrwx. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod g-x a
        [root@localhost ~]# ll
        总用量 0
        -rw-rw-rwx. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod o-x a
        [root@localhost ~]# ll
        总用量 0
        -rw-rw-rw-. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod a-w a
        [root@localhost ~]# ll
        总用量 0
        -r--r--r--. 1 root root 0 9月  20 14:43 a
        
      • 指定权限命令(只给与设定权限)

        • chmod 用户类别=[MODE] file,…
        • chmod 用户类别=[MODE],用户类别=[MODE] file,…

        示例:

        [root@localhost ~]# ll
        总用量 0
        -r--r--r--. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod u=w a
        [root@localhost ~]# ll
        总用量 0
        --w-r--r--. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod u=r a
        [root@localhost ~]# ll
        总用量 0
        -r--r--r--. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod u=x a
        [root@localhost ~]# ll
        总用量 0
        ---xr--r--. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chmod a=r a
        [root@localhost ~]# ll
        总用量 0
        -r--r--r--. 1 root root 0 9月  20 14:43 a
        

2.2修改文件属主和属组的命令chown

  • chown命令只有管理员可以使用。

  • 两种修改命令格式

    • chown [USERNAME:GROUPNAME] file,…
    • chown [USERNAME.GROUPNAME] file,…
      • -R 修改目录及其内部文件的属主
      • 示例:
        [root@localhost ~]# ll
        总用量 0
        -r--r--r--. 1 root root 0 9月  20 14:43 a
        [root@localhost ~]# chown tom:tom a
        [root@localhost ~]# ll
        总用量 0
        -r--r--r--. 1 tom tom 0 9月  20 14:43 a
        [root@localhost ~]# chown root.root a
        [root@localhost ~]# ll
        总用量 0
        -r--r--r--. 1 root root 0 9月  20 14:43 a	
        [root@localhost ~]# ll
        总用量 0
        drwxr-xr-x. 2 root root 15 9月  20 15:55 123
        -r--r--r--. 1 root root  0 9月  20 14:43 a
        [root@localhost ~]# chown -R tom.tom 123
        [root@localhost ~]# ll
        总用量 0
        drwxr-xr-x. 2 tom  tom  15 9月  20 15:55 123
        -r--r--r--. 1 root root  0 9月  20 14:43 a
        [root@localhost ~]# ll 123
        总用量 0
        -rw-r--r--. 1 tom tom 0 9月  20 15:55 a
        

2.3 修改文件的属组命令chgrp

  • 语法:chgrp [OPTION]… GROUP FILE…
    • -R 递归修改,修改目录及其内部文件的属组
      示例:
      [root@localhost ~]# ll
      总用量 0
      drwxr-xr-x. 2 tom  tom  15 9月  20 15:55 123
      -r--r--r--. 1 root root  0 9月  20 14:43 a
      [root@localhost ~]# chgrp tom a
      [root@localhost ~]# ll
      总用量 0
      drwxr-xr-x. 2 tom  tom 15 9月  20 15:55 123
      -r--r--r--. 1 root tom  0 9月  20 14:43 a
      [root@localhost ~]# chgrp -R root 123
      [root@localhost ~]# ll
      总用量 0
      drwxr-xr-x. 2 tom  root 15 9月  20 15:55 123
      -r--r--r--. 1 root root  0 9月  20 14:43 a
      [root@localhost ~]# ll 123
      总用量 0
      -rw-r--r--. 1 tom root 0 9月  20 15:55 a
      

3遮罩码

为什么文件创建以后默认权限是644?
为什么目录创建以后默认权限是755?

这是由遮罩码umask来控制的。

从名字就能看出来,遮罩码umask是用来隐藏一些权限的。

  • 文件最终的权限为:666-umask
  • 目录最终的权限为:777-umask
  • 遮罩码为022,所以文件创建以后默认权限是644,目录创建以后默认权限是755。

文件默认是不能具有执行权限的,如果算得的结果有执行权限则将其权限整体加1。

4. linux安全上下文与特殊权限

4.1 linux安全上下文

前提:进程有属主和属组;文件有属主和属组

  • 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
  • 启动为进程后,其进程的属主为发起者,属组为发起者所属的组
  • 进程访问文件时的权限取决于进程的发起者:
    • 进程的发起者是文件的属主时,则应用文件属主权限
    • 进程的发起者是文件的属组时,则应用文件属组权限
    • 应用文件“其它”权限

4.2 特殊权限

linux默认权限是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则。

  • SUID(4) 运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主

    • chmod u s file
    • chmod u-s file

    如果file本身原来就有执行权限,则SUID显示为s,否则显示为S,只能对可执行文件使用。
    示例:

    给vi设置权限
    [root@localhost ~]# chmod u s /usr/bin/vi
    
    在另一个用户连接下使用vi打开文件a
    [tom@localhost ~]$ vi a
    
    在root用户下查看vi进程
    [root@localhost ~]# ps -ef|grep vi
    root        744      1  0 15:28 ?        00:00:00 /usr/bin/VGAuthService -s
    root       1515   1496  0 15:41 pts/1    00:00:00 vi a
    root       1517   1447  0 15:41 pts/0    00:00:00 grep --color=auto vi	
    
  • SGID(2) 运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组

    • 默认情况下,用户创建文件时,其属组为此用户所属的基本组;
    • 一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组
    • 为此设定了SGID的目录的属组
      • chmod g s DIR
      • chmod g-s DIR

    如果file本身原来就有执行权限,则SGID显示为s,否则显示为S

  • Sticky(1) 在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件

    • chmod o t DIR
    • chmod o-t DIR

    如果DIR本身原来就有执行权限,则Sticky显示为t,否则显示为T
    示例:

    在root用户下创建共享目录,并给其他用户写的权限
    [root@localhost tmp]# mkdir gx
    [root@localhost tmp]# ll
    总用量 0
    drwxr-xr-x. 2 root root 6 9月  21 16:20 gx
    [root@localhost tmp]# chmod o t gx
    [root@localhost tmp]# ll
    总用量 0
    drwxr-xr-t. 2 root root 6 9月  21 16:20 gx
    [root@localhost tmp]# chmod o w gx
    
    在tom用户下,在共享目录中创建一个文件aaa
    [tom@localhost gx]$ touch aaa
    
    在www用户下,在共享目录中,删除aaa时权限不足,创建自己的文件bbb,可以顺利删除
    [www@localhost gx]$ rm -f aaa
    rm: 无法删除"aaa": 不允许的操作
    [www@localhost gx]$ touch bbb
    [www@localhost gx]$ rm -f bbb
    
  • 4755 有SUID,文件权限为755

  • 2755 有SGID,文件权限为755

  • 1755 有Sticky,文件权限为755

  • 7755 有SUID、SGID、Sticky,文件权限为755
    这里前面的4、2、1分别表示SUID、SGID、Sticky

5. 文件系统访问控制列表facl

facl(Filesystem Access Control List),利用文件扩展保存额外的访问控制权限。

  • 语法:setfacl [-bkndRLP] { -m|-M|-x|-X … } file …
    • -m 设定访问权限

      • u:UID:perm
      • g:GID:perm
      • 给指定用户添加访问权限:setfacl -m u:test:rw file
        示例:
        [root@localhost tmp]# getfacl a
         # file: a
         # owner: root
         # group: root
        user::rw-
        group::r--
        other::r--
        [root@localhost tmp]# setfacl -m u:tom:rw a
        [root@localhost tmp]# getfacl a
         # file: a
         # owner: root
         # group: root
        user::rw-
        user:tom:rw-
        group::r--
        mask::rw-
        other::r--
        [tom@localhost tmp]$ cat a
        1
        2
        3
        [tom@localhost tmp]$ vi a
        [tom@localhost tmp]$ cat a
        1
        2
        3
        1234
        
      • 给指定组添加访问权限:setfacl -m g:test:rw file
        示例:
        [root@localhost tmp]# setfacl -m g:www:rw a
        [root@localhost tmp]# getfacl a
        # file: a
        # owner: root
        # group: root
        user::rw-
        user:tom:rw-
        group::r--
        group:www:rw-
        mask::rw-
        other::r--
        [www@localhost tmp]$ cat a
        1
        2
        3
        1234
        [www@localhost tmp]$ vi a
        [www@localhost tmp]$ cat a
        1
        2
        3
        1234
        234567
        
    • 如果要为某个目录设定默认的访问控制列表,只需要设定时在u或g前面加上d即可。如:

      • setfacl -m du:test:rw file,此时在此目录中创建的文件均继承此访问控制列表所设置的权限
    • -x 取消访问权限

      • u:UID
      • g:GID
      • 取消设定用户权限:setfacl -x u:test file
        示例:
        [root@localhost tmp]# setfacl -x u:tom a
        [root@localhost tmp]# getfacl a
        # file: a
        # owner: root
        # group: root
        user::rw-
        group::r--
        group:www:rw-
        mask::rw-
        other::r--
        
      • 取消设定用户权限:setfacl -x g:test file
        示例:
        [root@localhost tmp]# setfacl -x g:www a
        [root@localhost tmp]# getfacl a
        # file: a
        # owner: root
        # group: root
        user::rw-
        group::r--
        mask::r--
        other::r--
        
    • 删除所有权限命令-b Remove all
      示例:

      [root@localhost tmp]# setfacl -b a
      
    • 语法:getfacl [-aceEsRLPtpndvh] file …

      • getfacl file
      • 示例:
      [root@localhost tmp]# getfacl a
      # file: a
      # owner: root
      # group: root
      user::rw-
      group::r--
      mask::r--
      other::r--
      
  • 文件权限应用次序:
  • 默认情况下:
    Owner --> Group --> Other
  • 有设置facl的情况下:
    Owner --> facl,user --> Group --> facl,group --> Other

6. sudo

sudo可以实现某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令

sudo的配置文件:/etc/sudoers

  • 使用visudo命令进行sudo的配置,每一行就是一个sudo条目,条目格式如下:
    • who which_hosts=(runas) command
    • who:User_Alias,表示运行命令者的身份
    • which_hosts:Host_Alias,通过哪些主机
    • runas:Runas_Alias,以哪个用户的身份
    • command:Cmnd_Alias,运行哪些命令

别名必须全部而且只能使用大写英文字母的组合,可以使用感叹号取反

  • 别名分类:

  • 用户别名:

    • User_Alias NETWORKADMIN =
      • 用户的用户名
      • 组名,使用%引导
      • 还可以其它已经定义的用户别名
  • 主机别名:

    • Host_Alias =
      • 主机名
      • IP地址
      • 网络地址
      • 其它主机别名
  • Runas别名:

    • Runas_Alias =
      • 用户名
      • %组名
      • 其它的Runas别名
  • 命令别名:

    • Cmnd_Alias =
      • 命令路径
      • 目录(此目录内的所有命令)
      • 其它已定义的命令别名
  • sudo命令语法:sudo [options] COMMAND

    • -V 显示版本编号
    • -h 会显示版本编号及指令的使用方式说明
    • -l 列出当前用户可以使用的所有sudo类命令
    • -v 因为sudo在第一次执行时或是在N分钟内没有执行(N默认为5)会问密码,这个参数 是重新做一次确认,如果超过N分钟,也会问密码
    • -k 让认证信息失效,如果不指定-k,默认认证信息在5分钟后失效
    • -b 将要执行的指令放在后台执行
    • -u USERNAME 以指定的用户名执行命令,默认为root
    • 示例:
      [root@localhost tmp]# visudo
      ## Allow root to run any commands anywhere
      root    ALL=(ALL)       ALL
      tom     ALL=(root)      /usr/sbin/useradd,/usr/sbin/userdel,/usr/sbin/usermod
      [tom@localhost tmp]$ sudo useradd ysy
      我们信任您已经从系统管理员那里了解了日常注意事项。
      总结起来无外乎这三点:
          #1) 尊重别人的隐私。
          #2) 输入前要先考虑(后果和风险)。
          #3) 权力越大,责任越大。
      正在创建信箱文件: 文件已存在
      [tom@localhost tmp]$ id ysy
      uid=1004(ysy) gid=1004(ysy) 组=1004(ysy)
      [tom@localhost tmp]$ sudo usermod -a -G tom ysy
      [tom@localhost tmp]$ id ysy
      uid=1100(ysy) gid=1004(ysy) 组=1004(ysy),1002(tom)
      [tom@localhost tmp]$ sudo userdel -r ysy
      [tom@localhost tmp]$ id ysy
      id: ysy: no such user
      

7.管理命令

  • w 显示当前登录到系统的用户有哪些,以及其正在做什么
    示例:
[root@localhost ~]# w
 18:59:03 up  3:30,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.80.1     15:30    7.00s  0.19s  0.00s w
root     pts/1    192.168.80.1     15:40   19:03   0.18s  0.16s -bash
root     pts/2    192.168.80.1     16:05    1:13m  0.09s  0.06s -bash
  • sleep 睡眠,写脚本为防止上一个命令没执行完下一命令就开始执行时可以加上sleep # 表示停顿#秒后再执行后面的命令
    • sleep NUMBER[SUFFIX]…
      • SUFFIX:
        • s:秒,默认
        • m:分
        • h:小时
        • d:天

示例:

[tom@localhost tmp]$ sleep 10
  • last 显示/var/log/wtmp文件,显示用户登录历史及系统重启历史
    • -n # 显示最近#次的相关信息
      示例:
[root@localhost ~]# last
root     pts/2        192.168.80.1     Sat Sep 21 16:05   still logged in   
root     pts/1        192.168.80.1     Sat Sep 21 15:40   still logged in   
root     pts/0        192.168.80.1     Sat Sep 21 15:30   still logged in   
reboot   system boot  3.10.0-693.el7.x Sat Sep 21 15:28 - 19:01  (03:32)    
root     pts/0        192.168.80.1     Fri Sep 20 17:04 - 17:20  (00:15)    
reboot   system boot  3.10.0-693.el7.x Fri Sep 20 17:02 - 17:20  (00:17)
...
[root@localhost ~]# last -n3
root     pts/2        192.168.80.1     Sat Sep 21 16:05   still logged in   
root     pts/1        192.168.80.1     Sat Sep 21 15:40   still logged in   
root     pts/0        192.168.80.1     Sat Sep 21 15:30   still logged in   
wtmp begins Wed Aug  8 21:28:54 2018
  • lastb 显示/var/log/btmp文件,显示用户错误的登录尝试
    • -n # 显示最近#次的相关信息
      示例:
[root@localhost ~]# lastb
root     pts/1                         Wed Sep 18 17:05 - 17:05  (00:00)    
root     pts/1                         Wed Sep 18 17:04 - 17:04  (00:00)    
root     tty1                          Sun Sep 15 19:21 - 19:21  (00:00)    
btmp begins Sun Sep 15 19:21:34 2019
[root@localhost ~]# lastb -n2
root     pts/1                         Wed Sep 18 17:05 - 17:05  (00:00)    
root     pts/1                         Wed Sep 18 17:04 - 17:04  (00:00)    
btmp begins Sun Sep 15 19:21:34 2019
  • lastlog 显示每个用户最近一次成功登录信息
    • -u username 显示特定用户最近的登录信息

示例:

[root@localhost ~]# lastlog
用户名           端口     来自             最后登陆时间
root             pts/2    192.168.80.1     六 9月 21 16:05:34  0800 2019
bin                                        **从未登录过**
daemon                                     **从未登录过**
adm                                        **从未登录过**
root1            pts/1                     三 9月 18 17:01:01  0800 2019
tom              pts/1                     六 9月 21 15:41:01  0800 2019
www              pts/2                     六 9月 21 16:06:07  0800 2019
oppo             pts/2                     五 9月 20 16:36:37  0800 2019
[root@localhost ~]# lastlog -u root
用户名           端口     来自             最后登陆时间
root             pts/2    192.168.80.1     六 9月 21 16:05:34  0800 2019
  • basename 显示路径基名
    示例:
[root@localhost ~]# basename /a/b/c/efg
efg
  • dirname 显示路径基名之前路径
    示例:
[root@localhost ~]# dirname /a/b/c/efg
/a/b/c
来源:https://www./content-4-462451.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多