• Linux-权限管理


    Linux-权限管理

    权限简介

    文件的权限主要针对三类对象进行定义:
    • owner:属主,u
    • group:属组,g
    • other:其它,o
    每个文件针对每个访问者都定义了三种权限:
    权限 对应的操作对象 权限说明
    r 文件 可读,可以使用类似cat等命令查看文件内容
    w 文件 可写,可以编辑或删除此文件
    x 文件 可执行,eXacutable,可以在命令提示符下 当作命令提交给内核运行
    r 目录 可以对此目录执行ls以列出内部的所有文件
    w 目录 可以在此目录中创建文件,也可删除此目录中的文件
    x 目录 可以使用cd切换进此目录,也可以 使用ls -l查看内部文件的详细信息

    权限管理命令

    chmod 修改权限的命令

    u/g/o=r/w/x 只赋予某某权限
    [root@localhost ~]# ll
    total 4
    ----------. 1 root root    0 Nov 11 18:41 abc
    -rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
    [root@localhost ~]# chmod u=rw abc
    [root@localhost ~]# ll
    total 4
    -rw-------. 1 root root    0 Nov 11 18:41 abc
    -rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
    
    u/g/o+r/w/x 新加某某权限
    [root@localhost ~]# chmod u+x abc
    [root@localhost ~]# ll
    total 4
    -rwx------. 1 root root    0 Nov 11 18:41 abc
    -rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
    
    u/g/o-r/w/x 去除某某权限
    [root@localhost ~]# chmod u-wx abc
    [root@localhost ~]# ll
    total 4
    -r--------. 1 root root    0 Nov 11 18:41 abc
    -rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
    

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

    权限 二进制 十进制
    --- 000 0
    --x 001 1
    -w- 010 2
    -wx 011 3
    r-- 100 4
    r-x 101 5
    rw- 110 6
    rwx 111 7
    [root@localhost ~]# chmod 700 abc
    [root@localhost ~]# ll
    total 4
    -rwx------. 1 root root    0 Nov 11 18:41 abc
    -rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
    [root@localhost ~]# chmod 777 abc
    [root@localhost ~]# ll
    total 4
    -rwxrwxrwx. 1 root root    0 Nov 11 18:41 abc
    -rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
    

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

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

    更该属主

    [root@localhost ~]# ll
    total 4
    -rwx------. 1 root root    0 Nov 11 18:41 abc
    -rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
    [root@localhost ~]# chown tom abc
    [root@localhost ~]# ll
    total 4
    -rwx------. 1 tom  root    0 Nov 11 18:41 abc
    -rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
    

    更改属组(“:”可换成".")

    [root@localhost ~]# chown :yqh abc
    [root@localhost ~]# ll
    total 4
    -rwx------. 1 tom  yqh     0 Nov 11 18:41 abc
    -rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
    

    更改属主和属组

    -R //修改目录及其内部文件的属主

    [root@localhost ~]# chown -R yqh.tom abc
    [root@localhost ~]# ll
    total 4
    -rwx------. 1 yqh  tom     0 Nov 11 18:41 abc
    -rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
    

    遮罩码

    文件创建以后默认权限是644

    目录创建以后默认权限是755

    是因为这是由遮罩码umask来控制的

    [root@localhost ~]# umask
    0022
    

    文件的最大权限是666

    目录的最大权限是777

    所以文件最终的权限为:

    • 666-umask

    目录最终的权限为:

    • 777-umask

    更改遮罩码

    [root@localhost opt]# touch 123
    [root@localhost opt]# mkdir abc
    [root@localhost opt]# ll
    total 0
    drwxr-xr-x. 2 root root 6 Nov 13 21:08 123
    -rw-r--r--. 1 root root 0 Nov 13 21:08 abc
    [root@localhost opt]# rm -f *
    [root@localhost opt]# umask 033
    [root@localhost opt]# touch 123
    [root@localhost opt]# mkdir abc
    [root@localhost opt]# ll
    total 0
    -rw-r--r--. 1 root root 0 Nov 13 21:34 123				//默认权限被改变
    drwxr--r--. 2 root root 6 Nov 13 21:34 abc
    
    文件默认是不能具有执行权限的,如果算得的结果有执行权限则将其权限整体加1

    linux安全上下文与特殊权限

    linux安全上下文

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

    • 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
    Tom账户:
    [tom@localhost ~]$ cp /usr/bin/vi .
    [tom@localhost ~]$ ls
    vi
    [tom@localhost ~]$ ll
    total 1384
    -rwxr-xr-x. 1 tom tom 1416744 Nov 14 13:03 vi
    Root账户:
    [root@localhost ~]# chown root.root /home/tom/vi 
    [root@localhost ~]# chmod o-x /home/tom/vi
    Tom账户:
    [tom@localhost ~]$ ll
    total 1384
    -rwxr-xr--. 1 root root 1416744 Nov 14 13:03 vi
    [tom@localhost ~]$ ./vi abc
    -bash: ./vi: Permission denied
    
    • 启动为进程后,其进程的属主为发起者,属组为发起者所属的组

      ①:
      [root@localhost ~]# vi root
      ②:
      [tom@localhost ~]# vi tom
      ③:
      [root@localhost ~]# ps -ef |grep vi
      root        1018       1  0 12:47 ?        00:00:00 /usr/bin/VGAuthService -s
      tom         1775    1752  0 12:54 pts/2    00:00:00 vi tom
      root        1776    1707  0 12:54 pts/1    00:00:00 vi root
      root        1778    1664  0 12:54 pts/0    00:00:00 grep --color=auto vi
      
      //谁打开的就属于谁
    • 进程访问文件时的权限取决于进程的发起者:

      • 进程的发起者是文件的属主时,则应用文件属主权限
      • 进程的发起者是文件的属组时,则应用文件属组权限
      • 应用文件“其它”权限

    特殊权限

    linux默认权限是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则,三种特殊权限应用的对象功能都不一样,SUID只能对程序文件进行设置,SGID和Sticky针对目录。

    SUID:

    默认情况是:程序文件的所有者是root,被tom启动后,是属于tom的。

    设置了SUID后,无论是谁启动的,都是属于程序文件的所有者。

    [root@localhost ~]# ll /usr/bin/vi
    -rwxr-xr-x. 1 root root 1416744 Jul 23  2019 /usr/bin/vi
    [root@localhost ~]# chmod 4755 /usr/bin/vi				//4代表SUID
    [root@localhost ~]# ll /usr/bin/vi
    -rwsr-xr-x. 1 root root 1416744 Jul 23  2019 /usr/bin/vi
    [root@localhost ~]# chmod u-x /usr/bin/vi				//没有执行权限后是大写的S
    [root@localhost ~]# ll /usr/bin/vi
    -rwSr-xr-x. 1 root root 1416744 Jul 23  2019 /usr/bin/vi
    

    SGID:

    默认情况是:用户创建文件时,文件的基本组属于目录自身的基本组。

    设置了SGID后,无论是谁创建的,基本组都是属于目录的所有者。

    ①:
    [tom@localhost ~]$ mkdir abc
    [tom@localhost ~]$ ll
    total 1384
    drwxrwxr-x. 2 tom  tom        6 Nov 14 14:20 abc
    ②:
    [root@localhost ~]# cd /home/tom/abc/
    [root@localhost abc]# touch 123
    [root@localhost abc]# ll
    total 0
    -rw-r--r--. 1 root root 0 Nov 14 14:20 123
    [root@localhost abc]# chmod g+s /home/tom/abc/		//也可以用2755,2表示SGID
    [tom@localhost ~]$ ll /home/tom/					
    total 1384
    drwxrwsr-x. 2 tom  tom       28 Nov 14 14:21 abc
    [root@localhost abc]# touch 123
    [root@localhost abc]# ll
    total 0
    -rw-r--r--. 1 root root 0 Nov 14 14:21 123
    [root@localhost abc]# touch 456
    [root@localhost abc]# ll
    total 0
    -rw-r--r--. 1 root root 0 Nov 14 14:21 123
    -rw-r--r--. 1 root tom  0 Nov 14 14:21 456			//设置SGID后基本组变成了tom
    
    [root@localhost ~]# chmod g-x /home/tom/abc/			
    [tom@localhost ~]$ ll /home/tom/					
    total 1384
    drwxrwSr-x. 2 tom  tom       28 Nov 14 14:21 abc	//没有执行权限后是大写的S
    

    Sticky:

    在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件(只针对普通用户,管理员无效)

    ①
    [root@localhost opt]# mkdir abc
    [root@localhost opt]# chmod 1777 abc				//1表示Sticky
    [root@localhost opt]# ll
    total 0
    drwxrwxrwt. 2 root root 6 Nov 14 14:39 abc
    [root@localhost opt]# cd abc/
    [root@localhost abc]# touch 123
    [root@localhost abc]# ll
    total 0
    -rw-r--r--. 1 root root 0 Nov 14 14:41 123
    ②
    [tom@localhost ~]$ cd /opt/abc/
    [tom@localhost abc]$ ll
    total 0
    -rw-r--r--. 1 root root 0 Nov 14 14:41 123
    [tom@localhost abc]$ rm -rf 123
    rm: cannot remove '123': Operation not permitted
    [tom@localhost abc]$ touch 456
    [tom@localhost abc]$ ll
    total 0
    -rw-r--r--. 1 root root 0 Nov 14 14:41 123
    -rw-rw-r--. 1 tom  tom  0 Nov 14 14:42 456
    [tom@localhost abc]$ rm -f 456
    [tom@localhost abc]$ ll
    total 0
    -rw-r--r--. 1 root root 0 Nov 14 14:41 123
    
    [root@localhost opt]# chmod o-x abc
    [root@localhost opt]# ll
    total 0
    drwxrwxrwT. 2 root root 17 Nov 14 14:46 abc			//没有执行权限后是大写的T
    

    文件系统访问控制列表facl

    setfact

    -m //设定(用户是用u,组是用g)
    ①:
    [tom@localhost opt]$ ll
    total 0
    -rw-r--r--. 1 root root 0 Nov 14 14:54 root
    [tom@localhost opt]$ echo 'I am Tom' >> root
    -bash: root: Permission denied
    [tom@localhost opt]$ cat root
    hello world
    ②:
    [root@localhost opt]# setfacl -m u:tom:rw root 	//指定用户tom文件root权限是可读可写
    [root@localhost opt]# getfacl root			//getfacl查询文件权限
    # file: root
    # owner: root
    # group: root
    user::rw-
    user:tom:rw-
    group::r--
    mask::rw-
    other::r--
    ①:
    [tom@localhost opt]$ echo 'I am Tom' >> root
    [tom@localhost opt]$ cat root 
    hello world
    I am Tom
    
    -x //取消
    [root@localhost opt]# setfacl -x u:tom root
    [root@localhost opt]# getfacl root
    # file: root
    # owner: root
    # group: root
    user::rw-
    group::r--
    mask::r--
    other::r--
    
    -b //清空
    [root@localhost opt]# setfacl -m u:tom:rw root 
    [root@localhost opt]# setfacl -m u:jerry:wx root 
    [root@localhost opt]# getfacl root
    # file: root
    # owner: root
    # group: root
    user::rw-
    user:tom:rw-
    user:jerry:-wx
    group::r--
    mask::rwx
    other::r--
    [root@localhost opt]# setfacl -b root
    [root@localhost opt]# getfacl root
    # file: root
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--
    

    权限委派,给用户一个指定权限

    sudo //目录在/etc/sudoers

    visudo

    ①
    [tom@localhost ~]$ useradd zhangsan
    useradd: Permission denied.
    ②
    [root@localhost ~]# visudo
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    tom     ALL=(ALL)       /usr/sbin/useradd	//tom账户在本机以任何人的身份执行useradd
    :wq!
    ①
    [tom@localhost ~]$ sudo useradd zhangsan
    
    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:
    
        #1) Respect the privacy of others.
        #2) Think before you type.
        #3) With great power comes great responsibility.
    
    [sudo] password for tom: 
    [tom@localhost ~]$ id zhangsan
    uid=1002(zhangsan) gid=1002(zhangsan) groups=1002(zhangsan)
    ②
    [root@localhost ~]# visudo
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    tom     ALL=(ALL)       /usr/sbin/useradd, /usr/sbin/userdel
    :wq!
    ①
    [tom@localhost ~]$ sudo userdel -r zhangsan
    [tom@localhost ~]$ id zhangsan
    id: ‘zhangsan’: no such user
    

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

    别名分类:

    • 用户别名:
      • User_Alias NETWORKADMIN =
        • 用户的用户名
        • 组名,使用%引导
        • 还可以其它已经定义的用户别名
    • 主机别名:
      • Host_Alias =
        • 主机名
        • IP地址
        • 网络地址
        • 其它主机别名
    • Runas别名:
      • Runas_Alias =
        • 用户名
        • %组名
        • 其它的Runas别名
    • 命令别名:
      • Cmnd_Alias =
        • 命令路径
        • 目录(此目录内的所有命令)
        • 其它已定义的命令别名

    管理命令

    w

    显示当前登录到系统的用户有哪些,以及其正在做什么

    ①
    [C:~]$ ssh tom@192.168.21.129
    
    
    Connecting to 192.168.21.129:22...
    Connection established.
    To escape to local shell, press 'Ctrl+Alt+]'.
    
    WARNING! The remote SSH server rejected X11 forwarding request.
    Last login: Sat Nov 14 12:54:12 2020
    [tom@localhost ~]$ vi abc
    ②
    [root@localhost ~]# w
     15:21:13 up  2:33,  4 users,  load average: 0.00, 0.00, 0.00
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     tty1     -                12:48    2:33m  0.01s  0.01s -bash
    root     pts/0    192.168.21.1     12:48    2:21m  0.04s  0.04s -bash
    root     pts/1    192.168.21.1     12:53    0.00s  0.34s  0.01s w
    tom      pts/2    192.168.21.1     15:20    6.00s  0.00s  0.03s sshd: tom
    

    sleep 睡眠

    [root@localhost ~]# sleep 600s			//睡眠600秒
    ^C
    [root@localhost ~]# sleep 600m			//睡眠600分
    ^C
    [root@localhost ~]# sleep 600h			//睡眠600小时
    ^C
    [root@localhost ~]# sleep 600d			//睡眠600天
    ^C
    [root@localhost ~]# ls
    abc  anaconda-ks.cfg
    [root@localhost ~]# sleep 5 && rm -f abc	//在5秒后删除abc
    
    5秒后
    
    [root@localhost ~]# ls
    anaconda-ks.cfg
    

    last

    显示/var/log/wtmp文件,显示用户登录历史及系统重启历史

    [root@localhost ~]# last
    tom      pts/2        192.168.21.1     Sat Nov 14 15:20   still logged in
    root     pts/2        192.168.21.1     Sat Nov 14 12:53 - 15:20  (02:26)
    root     pts/1        192.168.21.1     Sat Nov 14 12:53   still logged in
    root     pts/0        192.168.21.1     Sat Nov 14 12:48   still logged in
    root     tty1                          Sat Nov 14 12:48   still logged in
    reboot   system boot  4.18.0-193.el8.x Sat Nov 14 12:47   still running
    root     pts/1        192.168.21.1     Fri Nov 13 22:03 - crash  (14:43)
    root     pts/0        192.168.21.1     Fri Nov 13 20:49 - crash  (15:58)
    root     tty1                          Fri Nov 13 20:48 - crash  (15:58)
    reboot   system boot  4.18.0-193.el8.x Fri Nov 13 20:48   still running
    
    wtmp begins Fri Nov 13 20:48:11 2020
    
    -n 显示最近#次的相关信息
    [root@localhost ~]# last -3
    tom      pts/2        192.168.21.1     Sat Nov 14 15:29   still logged in
    tom      pts/2        192.168.21.1     Sat Nov 14 15:20 - 15:28  (00:08)
    root     pts/2        192.168.21.1     Sat Nov 14 12:53 - 15:20  (02:26)
    
    wtmp begins Fri Nov 13 20:48:11 2020
    

    lastb

    显示/var/log/btmp文件,显示用户错误的登录尝试

    在输错tom用户密码3次后
    [root@localhost ~]# lastb
    tom      ssh:notty    192.168.21.1     Sat Nov 14 15:29 - 15:29  (00:00)
    tom      ssh:notty    192.168.21.1     Sat Nov 14 15:28 - 15:28  (00:00)
    tom      ssh:notty    192.168.21.1     Sat Nov 14 15:28 - 15:28  (00:00)
    
    btmp begins Sat Nov 14 15:28:53 2020
    

    -n 显示最近#次的相关信息

    [root@localhost ~]# lastb -2
    tom      ssh:notty    192.168.21.1     Sat Nov 14 15:29 - 15:29  (00:00)
    tom      ssh:notty    192.168.21.1     Sat Nov 14 15:28 - 15:28  (00:00)
    
    btmp begins Sat Nov 14 15:28:53 2020
    

    lastlog

    显示每个用户最近一次成功登录信息

    [root@localhost ~]# lastlog
    Username         Port     From             Latest
    root             pts/2    192.168.21.1     Sat Nov 14 12:53:41 +0800 2020
    bin                                        **Never logged in**
    daemon                                     **Never logged in**
    adm                                        **Never logged in**
    lp                                         **Never logged in**
    sync                                       **Never logged in**
    shutdown                                   **Never logged in**
    halt                                       **Never logged in**
    mail                                       **Never logged in**
    operator                                   **Never logged in**
    games                                      **Never logged in**
    ftp                                        **Never logged in**
    nobody                                     **Never logged in**
    dbus                                       **Never logged in**
    systemd-coredump                           **Never logged in**
    systemd-resolve                            **Never logged in**
    tss                                        **Never logged in**
    polkitd                                    **Never logged in**
    unbound                                    **Never logged in**
    sssd                                       **Never logged in**
    sshd                                       **Never logged in**
    rngd                                       **Never logged in**
    tom              pts/2    192.168.21.1     Sat Nov 14 15:29:04 +0800 2020
    jerry                                      **Never logged in**
    
    -u 显示特定用户最近的登录信息
    [root@localhost ~]# lastlog -u tom
    Username         Port     From             Latest
    tom              pts/2    192.168.21.1     Sat Nov 14 15:29:04 +0800 2020
    

    basename 显示路径基名

    [root@localhost ~]# basename /etc/sysconfig/network-scripts/ifcfg-ens160 
    ifcfg-ens160								//取出文件名
    [root@localhost ~]# basename /a/b/c/d/e/f
    f											//不实际存在的也能取
    

    dirname 显示路径

    [root@localhost ~]# basename /etc/sysconfig/network-scripts/ifcfg-ens160 
    /etc/sysconfig/network-scripts				//取出路径
    [root@localhost ~]# dirname /a/b/c/d/e/f
    /a/b/c/d/e									//不实际存在的也能取
    
  • 相关阅读:
    access 驱动在win64位出现问题
    apace搭建站点
    laravel邮件发送问题总结
    django orm order_by 根据汉字首字母排序 [ORDER BY CONVERT(name USING gbk)ASC]查询
    linux centos7 django uwsgi 部署
    linux centos7 yum卸载 安装
    centos7 部署gitlab并汉化
    linux nginx uwsgi django
    mac swoole入门使用
    mac 安装mongodb,PHP添加mongodb的扩展
  • 原文地址:https://www.cnblogs.com/yuqinghao/p/14021346.html
Copyright © 2020-2023  润新知