zoukankan      html  css  js  c++  java
  • Linux学习Day7:用户身份与文件权限、su命令与sudo服务

      Linux是一个多用户、多任务的操作系统,具有很好的稳定性与安全性,在幕后保障Linux系统安全的则是一系列复杂的配置工作。在Linux系统中,root用户作为系统管理员拥有最高的系统所有权,能够管理系统的各项功能,如添加/删除用户、启动/关闭服务进程、开启/禁用硬件设备等。但是俗话说“能力越大,责任越大”,因此,在使用root管理员身份管理系统时一定要秉持谨慎的态度,特别是在生产环境下,一旦执行了错误的命令可能会直接毁掉整个系统。

    一、用户身份与能力


      Linux系统的管理员之所以是root,并不是因为他的名字叫root,而是因为该用户的身份证号码UID(User IDentification)的数值为0。在Linux系统中,UID就相当于我们的身份证号码一样具有唯一性,因此可以通过用户的UID来判断用户身份。注意:UID是不能冲突的。在RHEL7系统中,用户身份有下面这些:

    •   管理员(UID为0):系统的管理员用户。
    •   系统用户(UID为1~999):Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏的范围。注意:在RHEL5/6系统中,系统用户的UID为1~499。
    •   普通用户(UID从1000开始):是由系统管理员创建的用于日常工作的用户。

      可以通过id命令查看用户UID,如下所示:

    [root@linuxprobe ~]# id root     //管理员用户
    uid=0(root) gid=0(root) groups=0(root)
    [root@linuxprobe ~]# id sshd    //系统用户
    uid=74(sshd) gid=74(sshd) groups=74(sshd)
    [root@linuxprobe ~]# id wangwu    //普通用户
    uid=1003(wangwu) gid=1003(wangwu) groups=1003(wangwu)

      为了方便管理属于同一组的用户,Linux系统还引入了用户组的概念。通过使用用户组号码GID(Group IDentification),我们可以把多个用户加入到同一组中,从而方便为组中的所有用户统一分配权限或指定任务。

      另外,在Linux系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而这个基本用户组只有该用户一人。如果该用户以后被归纳入其他用户组,则这个用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组。

      1、useradd命令

      用于创建新的用户,格式为"useradd  [参数]  用户名"。

      默认情况下,使用该命令创建用户时,用户的家目录存放在/home目录下,Shell解释器为/bin/bash,且默认创建一个与该用户同名的基本用户组。这些默认设置也可以根据下表中的参数进行修改。

    参数 作用
    -d 指定用户的家目录
    -e 账户的到期时间,格式为YYYY-MM-DD
    -u 指定用户的默认UID
    -g 指定一个初始的用户基本组(必须已存在)
    -G 指定一个或多个扩展用户组
    -N 不创建与用户组同名的基本用户组
    -s 指定该用户的默认Shell解释器

      实验:创建一个普通用户linuxer,并指定家目录的路径、用户的UID以及Shell解释器。 

    [root@linuxprobe ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxer
    [root@linuxprobe ~]# id linuxer
    uid=8888(linuxer) gid=8888(linuxer) groups=8888(linuxer)

      注意:一旦用户的解释器被设置成/sbin/nologin,则表示该用户无法登录到系统中。

       2、groupadd命令

      用于创建用户组,格式为“groupadd  [参数]  群组名”。

      为了更加高效的指派系统中各个用户的权限,常常会把几个用户加入到同一个用户组里,这样便可以针对一类用户统一分配权限。

      实验:创建一个名为tony的用户组。

    [root@linuxprobe ~]# groupadd tony

      3、usermod命令

      用于修改用户的属性,格式为“usermod  [参数]  用户名”。

      其实,在Linux系统中创建用户也就是修改配置文件的过程。用户信息保存在/etc/passwd文件中,可以直接编辑文本来修改其中的用户参数项目,也可以用usermod命令修改已经创建的用户信息。usermod命令的参数以及作用如表所示:

    参数 作用
    -C 填写用户账户的备注信息
    -d  -m 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去
    -e 账户的到期时间,格式为YYYY-MM-DD
    -g 变更所属用户组
    -G 变更扩展用户组
    -L 锁定用户,禁止其登录系统
    -U 解锁用户,允许其登录系统
    -s 变更默认终端
    -u 修改用户的UID

       实验1:将用户linuxprobe加入到root用户组中。

    [root@linuxprobe ~]# usermod -G root linuxprobe
    [root@linuxprobe ~]# id linuxprobe
    uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)   //扩展组列表出现root用户组

      实验2:修改linuxprobe用户的UID号码值。

    [root@linuxprobe ~]# usermod -u 6666 linuxprobe
    [root@linuxprobe ~]# id linuxprobe
    uid=6666(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)

      4、passwd命令

      用于修改用户密码、过期时间、认证信息等,格式为“passwd  [参数]  用户名”。其中,root管理员可以直接修改其他所有用户的密码,且不需要校验旧密码。passwd命令的参数以及作用如下表所示:

    参数 作用
    -l 锁定用户,禁止其登录
    -u 解除锁定,允许用户登录
    --stdin 允许通过标准输入修改用户的密码,如echo "new password" | passwd --stdin username
    -d 使该用户可以免密登录系统
    -e 强制用户在下次登录时修改密码
    -S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称

      实验1:修改用户自己的密码,以及使用root管理员修改其他用户的密码。

    [root@linuxprobe ~]# passwd
    Changing password for user root.
    New password:          //此处输入密码
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password:     //再次输入密码
    passwd: all authentication tokens updated successfully.
    [root@linuxprobe ~]# passwd zhangsan    //修改zhangsan用户密码
    Changing password for user zhangsan.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.

      实验2:锁定用户,以及解锁用户。

    [root@linuxprobe ~]# passwd -l zhangsan   //锁定zhangsan用户
    Locking password for user zhangsan.
    passwd: Success
    [root@linuxprobe ~]# passwd -S zhangsan   //查看zhangsan用户是否被锁定
    zhangsan LK 2020-03-02 0 99999 7 -1 (Password locked.)
    [root@linuxprobe ~]# 
    [root@linuxprobe ~]# passwd -u zhangsan   //解锁用户
    Unlocking password for user zhangsan.
    passwd: Success
    [root@linuxprobe ~]# passwd -S zhangsan
    zhangsan PS 2020-03-02 0 99999 7 -1 (Password set, SHA512 crypt.)

      5、userdel命令

      用于删除用户,格式为“userdel  [参数]  用户名”。在执行用户删除命令时,该用户的家目录默认会留下来,此时可以使用-r参数将其家目录删除。userdel命令相关参数及其作用如下表所示:

    参数 作用
    -f 强制删除用户
    -r 同时删除用户及用户的家目录

       实验:删除lisi用户,以及家目录。

    [root@linuxprobe ~]# id lisi
    uid=1002(lisi) gid=1002(lisi) groups=1002(lisi)
    [root@linuxprobe ~]# userdel -r lisi
    [root@linuxprobe ~]# 
    [root@linuxprobe ~]# id lisi
    id: lisi: no such user

     二、文件权限与归属


      尽管在Linux系统中一切都是文件,但是每个文件的类型不尽相同,因此Linux系统使用不同的字符来加以区分,常见的字符如下所示:

    字符 表示的文件类型
    - 普通文件
    d 目录文件
    l 链接文件
    b 块设备文件
    c 字符设备文件
    p 管道文件

    [root@linuxprobe ~]# ls -l total 21228 drwxr-xr-x. 3 root root 14 Feb 18 15:26 a //目录文件 -rw-r--r--. 1 root root 147 Feb 26 21:02 chkhost.sh //普通文件 -rw-r--r--. 1 root root 195 Feb 28 22:16 chkhosts.sh -rw-r--r--. 1 root root 220 Feb 29 10:10 chkkeys.sh -rw-r--r--. 1 root root 215 Feb 26 22:33 chkscore.sh -rw-r--r--. 1 root root 393 Feb 26 22:56 CreateUser.sh drwxr-xr-x. 2 root root 6 Feb 15 19:41 Desktop //目录文件

      在Linux系统中,每个文件都有所属的所有者和所有组,并规定了文件的所有者、所有组以及其他人对文件拥有的可读(r)、可写(w)、可执行(x)的权限。可以通过ls命令查看文件的属性信息。

      但是对于普通文件和目录文件设置权限时,可读(r)、可写(w)、可执行(x)有不同的含意,如下所示:

      权限 含意
    普通文件 r权限 表示能够读取文件的实际内容
    w权限 表示能够编辑、新增、修改、删除文件的实际内容
    x权限 表示能够运行一个脚本程序
    目录文件 r权限 表示能够读取目录内的文件列表
    w权限 表示能够在目录内新增、删除、重命名文件
    x权限 表示能够进入该目录

      文件的读、写、执行权限可以简写成rwx,也可以用数字4、2、1来表示,如下表所示:

    权限分配 文件所有者 文件所属组 其他用户
    权限项 执行 执行 执行
    字符表示 r w x r w x r w x
    数字表示 4 2 1 4 2 1 4 2 1

      为了简化权限的表示,可以采用权限的数字法

    1.   若权限为7则代表:可读、可写、可执行(4+2+1)
    2.   若权限为6则代表:可读、可写(4+2)
    3.   若权限5则表示:可读、可执行(4+1)

      实验:设置一个文件的权限,其所有者拥有可读、可写、可执行的权限,其所属组拥有可读、可写的权限,其他人只有可读的权限。那么该文件的权限就是rwxrw-r--,数字法表示就是764。

    [root@linuxprobe ~]# ls -l practice.txt 
    -rw-r--r--. 1 root root 22 Feb 22 18:05 practice.txt
    [root@linuxprobe ~]# chmod +764 practice.txt    //设置文件权限
    [root@linuxprobe ~]# ls -l practice.txt 
    -rwxrw-r--. 1 root root 22 Feb 22 18:05 practice.txt

     三、文件的特殊权限


      在复杂多变的生产环境中,单纯设置文件的rwx权限无法满足我们对安全和灵活性的要求,于是就有了SUID、SGID与SBIT的特殊权限位

      1、SUID

      SUID是一种对二进制程序(一般是指Linux系统命令,命令本质就是一个应用程序)进行设置的特殊权限,可以让二进制程序的执行者(也可以理解为执行命令的用户)临时拥有属主的权限,该权限仅针对拥有执行权限的二进制程序有效(即仅对命令有效)。例如,在passwd命令加上SUID特殊权限,就可以让普通用户临时拥有程序所有者的身份。

       查看passwd命令属性时发现所有者的权限由rwx变成了rws,其中x变成s就意味着该文件被赋予了SUID权限。如果原本是rw-权限,那么被赋予特殊权限后就变成rwS

    [root@linuxprobe ~]# ls -l /etc/shadow
    ----------. 1 root root 1806 Mar  2 20:25 /etc/shadow      //该文件的权限为000
    [root@linuxprobe ~]# ls -l /bin/passwd 
    -rwsr-xr-x. 1 root root 27832 Jan 30  2014 /bin/passwd     //被赋予了SUID权限

      补充:普通用户都可以通过passwd命令修改自己的用户名密码,修改密码的过程其实就是修改/etc/shadow配置文件的过程,但是这个配置文件的权限是000,也就是说只有root管理员才有权限查看或者修改这个文件。因此,给passwd命令加上SUID特殊权限位,让普通用户在使用passwd命令时临时获取root身份,把变更的密码信息写入shadow文件中。

    [root@linuxprobe ~]# ls -l /bin/ | grep rws       //查看拥有SUID特性权限的命令
    -rwsr-xr-x. 1 root root      53792 Jan 29  2014 at
    -rwsr-xr-x. 1 root root      64184 Feb 12  2014 chage
    -rws--x--x. 1 root root      23960 Mar 28  2014 chfn
    -rws--x--x. 1 root root      23856 Mar 28  2014 chsh
    -rwsr-xr-x. 1 root root      57536 Jan 28  2014 crontab
    -----------------------------省略部分输出内容----------------------
    [root@linuxprobe ~]# ls -l /bin/cat
    -rwxr-xr-x. 1 root root 54048 Jan 25  2014 /bin/cat
    [root@linuxprobe ~]# chmod u+s /bin/cat      //赋予cat命令SUID权限
    [root@linuxprobe ~]# ls -l /bin/cat
    -rwsr-xr-x. 1 root root 54048 Jan 25  2014 /bin/cat
    [root@linuxprobe ~]# chmod u-s /bin/cat     //撤销cat命令SUID权限

      2、SGID

      SGID主要又有以下两种功能:

    •   让执行者临时拥有所属组(注意:不是所有者)的权限,仅针对可以执行的二进制程序进行设置;
    •   在某个目录中创建的文件夹自动继承该目录的用户组(只可以对目录进行设置);

       其中第一个功能是参考SUID二设计的,不同在于让执行程序的用户临时获取的是文件所属组的权限。

      前文提到过,Linux系统中每个文件都有其归属的所有者和所属组,当创建或传送一个文件后,这个文件就自动归属于执行这个操作的用户(即该用户是文件的所有者)。现在想要设置一个部门共享文件夹,该部门内的所有人员都可以自由读取目录中的内容,那么就要在该共享目录上设置SGID特殊权限。

    [root@linuxprobe ~]# cd /tmp/         //切换至临时目录
    [root@linuxprobe tmp]# mkdir testdir      //创建目录
    [root@linuxprobe tmp]# ls -ald testdir/
    drwxr-xr-x. 2 root root 6 Mar  6 15:14 testdir/
    [root@linuxprobe tmp]# chmod -Rf g+s testdir/      //赋予目录SGID特殊权限
    [root@linuxprobe tmp]# ls -ald testdir/
    drwxr-sr-x. 2 root root 6 Mar  6 15:14 testdir/

      接下来切换至一个普通用户,然后在testdir/目录下创建文件,并查看新创建的文件的是否继承所在目录的所属组名称。

    [root@linuxprobe tmp]# chmod -Rf 777 testdir/         //确保普通用户可以在testdir目录创建文件
    [root@linuxprobe tmp]# su - linuxprobe               //切换至linuxprobe用户
    Last login: Fri Mar  6 15:20:36 BNT 2020 on pts/0
    [linuxprobe@linuxprobe ~]$ 
    [linuxprobe@linuxprobe ~]$ cd /tmp/testdir/
    [linuxprobe@linuxprobe testdir]$ 
    [linuxprobe@linuxprobe testdir]$ echo "linuxprobe" > testfile     //创建文件
    [linuxprobe@linuxprobe testdir]$ ls -ald testfile 
    -rw-rw-r--. 1 linuxprobe root 11 Mar  6 15:24 testfile    //新创建的文件自动继承目录的所属组

      这里介绍两个关于权限设置的重要命令:chmod和chown

      chmod命令用来设置文件或目录的权限,格式为"chmod  [参数]  权限  文件或目录名称"。  

    [root@linuxprobe ~]# chmod 776 users.txt     //给文件设置权限
    [root@linuxprobe ~]# ls -l users.txt 
    -rwxrwxrw-. 1 wangwu xuliang 16 Feb 26 23:04 users.txt
    [root@linuxprobe ~]# chmod -Rf 777 xuliang/      //给目录设置权限
    [root@linuxprobe ~]# ls -l xuliang/
    total 0
    [root@linuxprobe ~]# ls -ald xuliang/       //正确查看目录权限的方法
    drwxrwxrwx. 2 root root 6 Feb 26 20:41 xuliang/

       chown命令用来设置文件或目录的所有者和所属组,格式为"chown  [参数]  所有者:所属组  文件或目录名称"。

    [root@linuxprobe ~]# ls -l users.txt 
    -rwxrwxrw-. 1 wangwu xuliang 16 Feb 26 23:04 users.txt
    [root@linuxprobe ~]# chown root:root users.txt    //设置文件的所有者和所属组
    [root@linuxprobe ~]# ls -l users.txt 
    -rwxrwxrw-. 1 root root 16 Feb 26 23:04 users.txt
    [root@linuxprobe ~]# ls -ald xuliang/
    drwxrwxrwx. 2 root root 6 Feb 26 20:41 xuliang/
    [root@linuxprobe ~]# chown -Rf linuxprobe:linuxprobe xuliang/      //设置目录的所有者和所属组,需要添加-Rf参数
    [root@linuxprobe ~]# ls -ald xuliang/
    drwxrwxrwx. 2 linuxprobe linuxprobe 6 Feb 26 20:41 xuliang/

       3、SBIT

      SBIT特殊权限位可以确保用户只能删除自己的文件,而不能删除其他用户的文件。换句话说,当对某个目录设置了SBIT粘滞位(也叫"保护位")权限后,那么该目录中的文件就只能被其所有者执行删除操作了。

      与前面所讲的SUID和SGID权限显示方法不同,当目录被设置为SBIT特殊权限位后,目录的其他人权限部分的x执行权限会被替换成t或T,原本用于x执行权限则会写成t,原本没有x执行权限则会被写成T。

    [linuxprobe@linuxprobe ~]$ ls -ald /tmp/
    drwxrwxrwt. 20 root root 4096 Mar  6 16:52 /tmp/       //tmp目录默认被设置成SBIT权限
    [linuxprobe@linuxprobe ~]$ cd /tmp/
    [linuxprobe@linuxprobe tmp]$ ls -l test1.txt 
    -rwxrwxrwx. 1 wangwu wangwu 7 Mar  6 16:27 test1.txt     //test1.txt文件属于wangwu用户
    [linuxprobe@linuxprobe tmp]$ rm test1.txt 
    rm: cannot remove ‘test1.txt’: Operation not permitted       //虽然文件的其他人权限设置了rwx,但是linuxprobe用户无法删除

       补充:在tmp目录下的文件,即便设置了777权限,也只能被其所有者删除。另外,对指定的目录设置SBIT特殊权限的方法如下所示:

    [linuxprobe@linuxprobe ~]$ mkdir linux
    [linuxprobe@linuxprobe ~]$ chmod -R o+t linux/      //设置SBIT特殊权限
    [linuxprobe@linuxprobe ~]$ ls -ald linux/
    drwxrwxr-t. 2 linuxprobe linuxprobe 6 Mar  6 17:10 linux/

     四、文件的隐藏属性


       Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,默认情况下不能直接被用户发觉。

      1、chattr命令

      用于设置文件的隐藏权限,格式为"chattr  [参数]  文件"。如果想给文件添加某个隐藏功能,就使用"+参数"的形式;如果想把某个隐藏功能移出文件,就是使用"-参数"的形式。chattr命令中可供选择的隐藏权限参数非常丰富,具体如下表所示:

    参数 作用
    i 无法对文件进行修改(若对目录设置了该参数,则只能修改目录中的文件内容,而不能新建或删除文件)
    a 仅允许补充(追加)内容,无法覆盖或删除内容(append only)
    S 文件内容在变更后立即同步到硬盘(sync)
    s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘的区域)
    A 不再修改这个文件或目录的最后访问时间(atime)
    b 不再修改文件或目录的存取时间
    D 检查压缩文件中的错误
    d 使用dump命令备份时忽略本文件/目录
    c 默认将文件或目录进行压缩
    u 当删除该文件后依然保留其在硬盘的数据,方便日后恢复
    t 让文件系统支持尾部合并(tail-merging)
    X 可以直接访问压缩文件中的内容

       实验1:新建一个文件,然后给文件添加不允许删除的隐藏权限。

    [linuxprobe@linuxprobe ~]$ echo "asdasdasd" > tttttt.sh
    [linuxprobe@linuxprobe ~]$ chattr +a tttttt.sh     //添加无法删除的隐藏权限
    chattr: Operation not permitted while setting flags on tttttt.sh     //注意:普通用户无法对文件进行隐藏权限设置
    [linuxprobe@linuxprobe ~]$ su -
    Password: 
    Last login: Fri Mar  6 14:44:54 BNT 2020 from 192.168.134.1 on pts/0
    [root@linuxprobe ~]# echo "123445" > linuxtest.txt
    [root@linuxprobe ~]# chattr +a linuxtest.txt     //添加无法删除的隐藏权限
    [root@linuxprobe ~]# rm linuxtest.txt 
    rm: remove regular file ‘linuxtest.txt’? y
    rm: cannot remove ‘linuxtest.txt’: Operation not permitted    //提示无法删除文件,即使是root用户

       实验2:移除一个文件的隐藏权限。

    [root@linuxprobe ~]# chattr -a linuxtest.txt     //移除被赋予隐藏权限
    [root@linuxprobe ~]# rm linuxtest.txt 
    rm: remove regular file ‘linuxtest.txt’? y     //删除成功
    [root@linuxprobe ~]# 

       2、lsattr命令

      用于显示文件的隐藏权限,格式为"lsattr [参数]  文件"。在Linux系统中,文件的隐藏权限必须使用lsattr命令来查看,平时使用的ls命令则看不出来端倪。 

    [root@linuxprobe ~]# chattr +a users.txt  //添加隐藏权限
    [root@linuxprobe
    ~]# [root@linuxprobe ~]# lsattr users.txt //查看隐藏权限
    -----a---------- users.txt [root@linuxprobe ~]# chattr -a users.txt [root@linuxprobe ~]# lsattr users.txt ---------------- users.txt

     五、文件访问控制列表


      如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。我们知道,普通用户是无法进入root管理员的家目录中,其执行结果如下所示:

    [root@linuxprobe ~]# su - linuxprobe
    Last login: Fri Mar  6 16:51:56 BNT 2020 on pts/0
    [linuxprobe@linuxprobe ~]$ 
    [linuxprobe@linuxprobe ~]$ cd /root/
    -bash: cd: /root/: Permission denied

      1、setfacl命令

      用于管理文件的ACL规则,格式为"setfacl [参数] 文件名称"。文件的ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。

    •   针对目录需要使用-R参数;
    •   针对普通文件需要使用-m参数;
    •   可以使用-b参数删除某个文件的ACL。

      实验:设置普通用户linuxprobe在/root目录上拥有rwx权限。

    [root@linuxprobe ~]# setfacl -Rm u:linuxprobe:rwx /root/
    [root@linuxprobe ~]# su - linuxprobe
    Last login: Sat Mar  7 16:20:41 BNT 2020 on pts/0
    [linuxprobe@linuxprobe ~]$ cd /root/                  //成功进入/root目录
    [linuxprobe@linuxprobe root]$ ls
    a            chkkeys.sh     Desktop    example.sh   initial-setup-ks.cfg  
    chkhost.sh   chkscore.sh    Documents  findresults  ipaddrs.txt           
    chkhosts.sh  CreateUser.sh  Downloads  guess.sh     mkcdrom.sh            

      实验2:查看某个文件或目录是否设置ACL规则。

    [root@linuxprobe ~]# ls -ld /root/
    dr-xrwx---+ 18 root root 4096 Mar  7 15:09 /root/    //文件权限最后一个点(.)变成了(+),就表示已经设置了ACL

      实验3:新建一个root.txt文件,并指定linuxprobe用户拥有rwx权限

    [root@linuxprobe ~]# cd /tmp/
    [root@linuxprobe tmp]# echo "root" > root.txt   
    [root@linuxprobe ~]# setfacl -m u:linuxprobe:rwx /tmp/root.txt        //其中"u"指代用户
    [root@linuxprobe ~]# su - linuxprobe
    Last login: Sat Mar  7 16:40:36 BNT 2020 on pts/0
    [linuxprobe@linuxprobe ~]$ cd /tmp/
    [linuxprobe@linuxprobe tmp]$ cat root.txt
    root
    [linuxprobe@linuxprobe tmp]$ ls -l root.txt 
    -rw-rwxr--+ 1 root root 5 Mar  7 16:42 root.txt

      实验4:指定xuliang用户组的成员拥有对root.txt的rwx权限。

    [root@linuxprobe ~]# id wangwu
    uid=1003(wangwu) gid=1003(wangwu) groups=1003(wangwu),8890(xuliang)     //wangwu用户已经加入xuliang用户组
    [root@linuxprobe ~]# setfacl -m g:xuliang:rwx /tmp/root.txt        //其中"g"指代用户组
    [root@linuxprobe ~]# su - wangwu
    Last login: Sat Mar  7 16:53:06 BNT 2020 on pts/0
    [wangwu@linuxprobe ~]$ echo "wangwu" &> /tmp/root.txt     //修改文件内容
    [wangwu@linuxprobe ~]$ cat /tmp/root.txt      /修改成功
    wangwu

      2、getfacl命令

      用于显示文件上设置的ACL信息,格式为"getfacl  文件名称"。

      实验:显示/root目录上设置的ACL信息。

    [root@linuxprobe ~]# getfacl /root/
    getfacl: Removing leading '/' from absolute path names
    # file: root/
    # owner: root
    # group: root
    user::r-x
    user:linuxprobe:rwx      //显示linuxprbe用户拥有rwx权限
    group::r-x
    mask::rwx
    other::---

     六、su命令与sudo服务


       su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺利地切换到其他用户,比如从root管理员切换到linuxprobe普通用户:

    [root@linuxprobe ~]# su - linuxprobe
    Last login: Sat Mar  7 16:43:02 BNT 2020 on pts/0

      上述su命令与用户名之间存在一个减号(-),这意味着完全切换至新的用户,即把环境变量也变更为新用户的相应信息,而不是保留原始的信息。一般建议在切换用户时添加这个减号(-)。但是使用su命令切换至root管理员用户时,需要输入root管理员的密码,这增大了被黑客窃取的可能性。

      sudo命令可以把特定命令的权限赋予给指定的用户,既保证普通用户能顺利完成工作,也可以避免root管理员密码泄露的风险。我们要做的就是合理配置sudo服务,但原则是—在保证普通用户完成相应的工作前提下,尽可能少地赋予额外的权限。

      sudo命令用于给普通用户提供root管理员的权限,格式为"sudo [参数] 命令名称",相关的参数以及作用如下所示:

    参数 作用
    -h 列帮助信息
    -l 列出当前用户可执行的命令
    -u 用户名或UID值 以指定的用户身份执行命令
    -k 清空密码的有效时间,下次执行sudo命令需要再次进行密码验证
    -b 在后台执行指定的命令
    -p 更改询问密码的提示语

      总结来说,sudo命令具有如下功能:

    •   限制用户执行指定的命令;
    •   记录用户执行的每一条命令;
    •   配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
    •   验证密码的5分钟内(默认值)无须再次让用户再次验证密码。

      可以使用visudo命令来配置sudo服务的配置文件,其操作方法与Vim编辑器的使用方法一致。注意:只有root管理员才可以使用visudo命令编辑sudo服务的配置文件。在sudo服务的配置文件中,按照下面的格式在99行(大约)填上指定的信息:

      谁可以使用   允许使用的主机=(以谁的身份)  可执行命令的列表

    [root@linuxprobe ~]# visudo
         95 ## The COMMANDS section may have other options added to it.
         96 ##
         97 ## Allow root to run any commands anywhere
         98 root    ALL=(ALL)       ALL
         99 linuxprobe    ALL=(ALL)     ALL
        100 ## Allows members of the 'sys' group to run networking, software,
        101 ## service management apps and more.

      作为一名普通用户,是无法看到root管理员家目录的文件信息的,但是在完成上述sudo服务配置文件的设置后,只需要在命令前面加上sudo就可以了。

    [linuxprobe@linuxprobe ~]$ ls -l /root/
    ls: cannot open directory /root/: Permission denied
    [linuxprobe@linuxprobe ~]$ 
    [linuxprobe@linuxprobe ~]$ sudo ls -l /root/
    
    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 linuxprobe: <此处输入linuxprobe用户的密码>
    total 21336
    drwxrwxr-x+  3 root       root             14 Feb 18 15:26 a        //成功查看/root目录的文件信息
    -rw-rwxr--+  1 root       root            147 Feb 26 21:02 chkhost.sh
    -rw-rwxr--+  1 root       root            195 Feb 28 22:16 chkhosts.sh
    -rw-rwxr--+  1 root       root            220 Feb 29 10:10 chkkeys.sh
    ------------------------省略部分输出内容---------------------------------

      但是,为了不让普通用户拥有整个系统的最高权限,ALL参数显示有些不合适。一般规定普通用户只能以root身份执行指定的命令,切记一定要给出该命令的绝对路径,否则系统无法识别。

    [root@linuxprobe ~]# visudo
         97 ## Allow root to run any commands anywhere
         98 root    ALL=(ALL)       ALL
         99 linuxprobe    ALL=(ALL)     /usr/bin/cat
    [root@linuxprobe ~]# su - linuxprobe
    Last login: Sun Mar  8 14:06:50 BNT 2020 on pts/0
    [linuxprobe@linuxprobe ~]$ cat /etc/shadow
    cat: /etc/shadow: Permission denied      
    [linuxprobe@linuxprobe ~]$ sudo cat /etc/shadow
    [sudo] password for linuxprobe: <此处输入linuxprobe用户的密码>
    root:$6$bGJ7rSCb$QxVvuBqxkO/QnOGixcJcijnAhkFuspF.ZlerdV2jVjNtIOt3Rn/b4V3sjuvpMV.bfgXcFLvwsmOxq3VMkISL81:18323:0:99999:7:::
    bin:*:16141:0:99999:7:::                //查看成功
    daemon:*:16141:0:99999:7:::
    -------------------省略部分输出内容----------------------

      当然,sudo配置文件中没有指定的命令就不允许执行了。

    [linuxprobe@linuxprobe ~]$ sudo more /etc/shadow
    Sorry, user linuxprobe is not allowed to execute '/bin/more /etc/shadow' as root on linuxprobe.com.

      另外。每次执行sudo命令都需要输入用户密码其实比较麻烦,这时可以添加NOPASSWD参数,使得每次执行sudo命令不再需要输入密码验证。

    [root@linuxprobe ~]# visudo
         97 ## Allow root to run any commands anywhere
         98 root    ALL=(ALL)       ALL
         99 linuxprobe    ALL=NOPASSWD:     /usr/bin/cat,/usr/sbin/poweroff     //添加NOPASSWD参数并新增poweroff命令
    
    [root@linuxprobe ~]# su - linuxprobe
    Last login: Sun Mar  8 14:10:01 BNT 2020 on pts/0
    [linuxprobe@linuxprobe ~]$ 
    [linuxprobe@linuxprobe ~]$ sudo cat /etc/shadow     //不再需要输入密码
    root:$6$bGJ7rSCb$QxVvuBqxkO/QnOGixcJcijnAhkFuspF.ZlerdV2jVjNtIOt3Rn/b4V3sjuvpMV.bfgXcFLvwsmOxq3VMkISL81:18323:0:99999:7:::
    bin:*:16141:0:99999:7:::                  
    daemon:*:16141:0:99999:7:::
    ---------------省略部分输出------------------------

      经过上述配置以后,普通用户也可以执行关机操作了。

    [root@linuxprobe ~]# su - linuxprobe
    Last login: Sun Mar  8 14:23:01 BNT 2020 on pts/0
    [linuxprobe@linuxprobe ~]$ poweroff
    User root is logged in on sshd.
    Please retry operation after closing inhibitors and logging out other users.
    Alternatively, ignore inhibitors and users with 'systemctl poweroff -i'.
    [linuxprobe@linuxprobe ~]$ sudo poweroff

     

  • 相关阅读:
    概率期望,数学,贪心策略——2020-camp-day1-A
    k染色——2020-camp-day3-C
    树形dp——2020-camp-day3-G
    欧拉回路/路径——2020-camp-day2-H
    dsu on tree——2020-camp-day2-E
    Nim博弈,异或性质——2020-camp-day2-C
    一些视频资料
    开发人员收藏的网站
    各行公认的好书
    资料库链接
  • 原文地址:https://www.cnblogs.com/xuliang-daydayup/p/12394635.html
Copyright © 2011-2022 走看看