• Linux权限管理


    1. linux权限概述

    1.1

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

           owner:文件所有者,默认为文档的创建者;

          group: 与文件按所有者同组的用户;

          root用户:超级用户。

          

    1.2 权限介绍

    读权限(read):

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

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

    写权限(write):

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

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

    执行权限(execute):

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

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

    文档权限属性:

     

    标红部分为文档权限属性信息,权限均有r(read)、w(write0)、x(execute)

    第一位:

    -

    普通文件

    l

    软连接

    s

    套接字

    c

    字符设备

    b

    块状设备

    d

    目录

    第2-4位:woner;

    第5-7位:group;

    第8-10位:other。

    1.3 权限设置

    格式:chmod opion 权限 文档。

    opion :常用 -R,文件夹或目录,递归设置权限;

    权限 :

    文档 :文档/文件夹/相对路径/绝对路径;

    权限形式:

    所有者

    u

    owner(user)

    g

    group

    o

    other

    a

    all,默认为all

    权限字符

    r

    w

    x

    执行

    -

    没有权限

    权限分配方式

    +

    给具体的用户新增权限

    -

    删除用户的权限

    =

    将权限设置为具体的值(赋值

    数字形式

    4

    r

    2

    w

    x

    0

    -

    例子:

    创建一个新用户zxj,并在zxj下创建test用作实验

    [root@localhost ~]# useradd zxj
    [root@localhost ~]# su - zxj
    [zxj@localhost ~]$ touch test
    [zxj@localhost ~]$ ls
    test
    [zxj@localhost ~]$ ll
    total 0
    -rw-rw-r--. 1 zxj zxj 0 apr 18 19:06 test

    更改test的权限:

    [zxj@localhost ~]$ chmod 777 test
    [zxj@localhost ~]$ ll
    total 0
    -rwxrwxrwx. 1 zxj zxj 0 apr 18 19:06 test
    [zxj@localhost ~]$ chmod u-w,g-x test
    [zxj@localhost ~]$ ll
    total 0
    -r-xrw-rwx. 1 zxj zxj 0 apr 18 19:06 test

    若有多个,中间用逗号(,)隔开。

    没有读权限,无法进行ls;没有执行权限,无法进行cd目录切换。

    1.4 属主与属组

    属主:文档所有者;

    属组:所属的用户组。

     

    红框内前面的root为属主,后面的root为属组;

    属主、属组设置(更改属主属组)

    chown命令:

    格式:

     chown 选项 属主:属组 filename

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

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

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

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

    如:

    [zxj@localhost ~]$ su
    Password:
    [root@localhost zxj]# ll
    total 0
    -rwxrwxrwx. 1 zxj zxj 0 apr 18 19:06 test
    [root@localhost zxj]# chown root: test
    [root@localhost zxj]# ll
    total 0
    -rwxrwxrwx. 1 root root 0 apr 18 19:06 test

    几种形式:

    三个用户 root  zxj  wrl

    原属主属组  root  zxj

    wrl:root= wrl root

    zxj  =zxj test

    wrl:  =wrl wrl 

    :root=wrl root


    1.5  文件的特殊权限 

    1) SUID(set uid):只能设置在二进制可执行程序上面(ls、cat、mkdir等)。对目录设置无效。

    功能:程序运行时的权限从执行者变更成程序所有者的权限,如以下例子。

    #在root用户下cat可以查看密码文件, 但是在普通用户下cat没有查看密码的权限,给cat赋予特殊权限,使其在普通用户下也能查看密码文件
    [root@localhost ~]# cat /etc/shadow
    root:$6$grdW9yfalVHa0cgT$TjaPVp2ltzH8gs8cagoGCiNNb7nG0twlScxDZFvHZ9aKCMOl9e3h.aMGgRtgsgzg3Tp0U1wj59cgqV5kbSuQm0::0:99999:7:::
    …………
    [root@localhost ~]# su zxj
    [zxj@localhost root]$ cat /etc/shadow
    cat: /etc/shadow: Permission denied
    [zxj@localhost root]$ su
    Password:
    [root@localhost ~]# chmod u+s `which cat  #cat的owner相当于root
    [root@localhost ~]# ls -ld `which cat`
    -rwsr-xr-x. 1 root root 54080 Nov  6  2016 /usr/bin/cat
    [root@localhost ~]# su zxj
    [zxj@localhost root]$ cat /etc/shadow
    root:$6$grdW9yfalVHa0cgT$TjaPVp2ltzH8gs8cagoGCiNNb7nG0twlScxDZFvHZ9aKCMOl9e3h.aMGgRtgsgzg3Tp0U1wj59cgqV5kbSuQm0::0:99999:7:::
    ………..

    2) SGID(set groupid):即可给二进制可执行程序设置(属组里面的用户),也可以给目录设置。

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

    [root@localhost ~]# mkdir /test1           #创建目录/test1做实验
    [root@localhost ~]# ls -ld /test1
    drwxr-xr-x. 2 root root 6 apr 17 05:26 /test1
    [root@localhost ~]# chmod g+s /test1
    [root@localhost ~]# chmod g+s /test1       #给特殊权限
    [root@localhost ~]# ls -ld /test1
    drwxr-sr-x. 2 root root 6 apr 17 05:26 /test1
    [root@localhost ~]# chown :zxj /test1       #更改属组
    [root@localhost ~]# ls -ld /test1
    drwxr-sr-x. 2 root zxj 6 apr 17 05:26 /test1
    [root@localhost ~]# touch /test1/1          #在/test1下创建文件1
    [root@localhost ~]# ls -ld /test1/1
    -rw-r--r--. 1 root zxj 0 apr 17 05:33 /test1/1   #文件1继承了/test1的权限

      

    3)SBID:对于sbid权限的文件,用户只能删除自己创建的文件,无法删除其他用户的文件。

    [root@zxj ~]# chmod o+t /tmp             #给/tmp添加SBiD权限
    [root@zxj ~]# useradd t1
    [root@zxj ~]# useradd t2
    [root@zxj ~]# su - t1
    last login: Thu Mar 14 14:04:37 CST 2019 on pts/1
    [t1@zxj ~]$ touch /tmp/t1                #用户t1在/tmp下创建文件1
    [t1@zxj ~]$ exit
    logout
    [root@zxj ~]# su - t2
    last login: Thu Mar 14 14:03:59 CST 2019 on pts/1
    [t2@zxj ~]$ touch /tmp/t2
    [t2@zxj ~]$ rm -rf /tmp/t1                #用户t2无法删除t1创建的文件
    rm: cannot remove ‘/tmp/t1’: Operation not permitted 


    1.6 文件扩展权限ACL 

    ACL:access control list

    setfacl:设置权限

    getfacl:扩展权限

    设置用户zxj对文件a.txt拥有的rwx权限 ,zxj不属于a.txt的所属主和组,zxj是other
    
    设置扩展权限setfacl
    [root@zxj ~]# setfacl  -m  u :zxj:rwx  a.txt      
    #-m表示设置的意思
    
    查看扩展权限getfacl
    [root@zxj ~]# getfacl a.txt
    # file: a.txt
    # owner: root
    # group: root
    user::rw-
    user:zxj:rwx
    group::r--
    mask::rwx
    other::r—
     
    去除权限
    [root@zxj ~]#  setfacl -R -m u:ken:rw- testdirectory/  
     #-R一定要在-m前面,表示目录下所有文件
    [root@zxj ~]#  setfacl -x u:ken /tmp/a.txt          # 去掉单个权限
    [root@zxj ~]#  setfacl -b  /tmp/a.txt              # 去掉所有acl权限

    1.7 sudo

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

        格式:

         visudo

                 zxj   all=(all)  all

                 用户  地址  root   命令

    问题:reboot、shutdown、init、halt、user管理,在普通用户身份上都是操作不了,但是有些特殊的情况下又需要有执行权限。又不可能让root用户把自己的密码告诉普通用户,这个问题该怎么解决?

    该问题是可以被解决的,可以使用sudo(switch user do)命令来进行权限设置。Sudo可以让管理员(root)事先定义某些特殊命令谁可以执行。

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

    Sudo配置文件:/etc/sudoers

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

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

    b. 配置普通用户的权限

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

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

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

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

    案例:创建zxj用户,zxj用户本身不能添加用户,要求使用sudo配置,将其设置为可以添加用户

    root@zxj ~]# su - zxj

    last login: Wed Feb 27 22:34:04 CST 2019 on pts/0

    [zxj@zxj ~]$ useradd test

    -bash: /usr/sbin/useradd: Permission denied

    修改sudo文件

     

    注意是绝对路径

    在添加好对应的规则之后就可以切换用户,切换到普通用户zxj,再去执行:

    #sudo 需要执行的指令

    [root@zxj ~]# su - zxj

    last login: Wed Feb 27 22:51:26 CST 2019 on pts/0

    [zxj@zxj ~]$ useradd  test            #需要加上sudo

    -bash: /usr/sbin/useradd: Permission denied

    [zxj@zxj ~]$ sudo useradd test1

     

    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 zxj:

     

    在输入sudo指令之后需要输入当前的用户密码进行确认的操作(不是root用户密码),输入之后在接下来5分钟内再次执行sudo指令不需要密码。

    1.8 UMASK:022

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

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

  • 相关阅读:
    libgdx 2D 粒子效果
    libgdx robovm binding umeng
    libgdx 3D Bullet 碰撞检测三
    《学习CSS布局》学习笔记
    保研机试准备之常用机试代码
    保研面试准备之自然语言处理知识点梳理
    软件工程应用与实践复习笔记
    Git学习笔记
    C、C++、C#中struct的简单比较
    从PEP-8学习Python编码风格
  • 原文地址:https://www.cnblogs.com/ajunyu/p/10875456.html
Copyright © 2020-2023  润新知