• 14、Linux的权限管理


    Linux系统的权限管理,整体上可分为:普通权限、默认权限、ACL权限、文件特殊权限、文件系统属性chattr权限、系统命令sudo权限等,下面介绍和说明下这些权限。

    一、普通权限

    我们知道,用户对文件只有三种身份:所属主、所属组、其他人;每种用户身份拥有读(read)、写(write)和执行(execute)三种权限,这就是普通权限了。

    1、查看权限

    1. [weixiangxiang@localhost /]$ ll
    2. 总用量 36
    3. lrwxrwxrwx.   1 root root    7 7月  22 02:37 bin -> usr/bin
    4. drwxr-xr-x.   3 root root   21 8月   1 10:28 data
    5. drwxr-xr-x. 138 root root 8192 8月   1 19:35 etc
    6. drwxr-xr-x.   6 root root   65 7月  31 17:33 home
    7. drwxr-xr-x.   8 root root  182 7月  31 19:28 opt
    8. dr-xr-x---.  17 root root 4096 8月   1 19:36 root
    9. drwxr-xr-x.  14 root root  167 7月  12 2017 usr
    10. .....(后面显示省略)

    权限位的说明,如下图所示:

     其中,第0位表示的是文件类型:

    类型

    含义

    解释

    -

    普通文件

    b

    块设备文件

    是一种特殊设备文件,存储设备都是这种文件,如分区文件/dev/sda1就是这种文件。

    c

    字符设备文件

    是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘等。

    d

    目录文件

    l

    软链接文件

    p

    管道符文件

    是一种非常少见的特殊设备文件。

    s

    套接字文件

    是一种特殊设备文件,一些服务支持Socket访问,就会产生这样的文件。

    第1~3位表示属主权限(user):表示文件的所有者权限,即当前用户拥有的权限~

    第4~6位表示属组权限(group):表示当前用户的用户组,除了当前用户外其他用户拥有的权限~

    第7~9位表示其他人权限(others):表示其他人拥有的权限~

    类型

    含义

    -:none

    无读写执行权限

    r:read

    可读权限

    w:write

    可写权限

    x:execute

    可执行权限

    2、修改权限

    • 命令格式:chmod  [选项]  权限模式  文件/目录
    • 含义:change file mode bits
    • 路径:/bin/chmod
    • 功能:修改文件的权限模式

    权限模式:

            格式为“[ugoa][[+-=][perms]]”,即“[用户身份][[赋予方式][权限]]”的格式。其中,用户身份有所属主(user)、所属组(group)、其他人(others)可分别简写为u、g、o,而a表示全部身份;赋予权限有+、-、=分别表示增加权限、减掉权限、设置权限;权限则指的是可读可写可执行了。

    举例:创建一个test.txt文件,并查看权限,修改权限。

    1. # 创建测试文件
    2. [weixiangxiang@localhost ~]$ touch test.txt
    3. [weixiangxiang@localhost ~]$ ll
    4. 总用量 8
    5. -rw-rw-r--. 1 weixiangxiang weixiangxiang 0 7月 25 21:25 test.txt
    6. # 属主添加x权限,属组减掉w权限,其他人增加w权限
    7. [weixiangxiang@localhost ~]$ chmod u+x,g-w,o+w test.txt
    8. [weixiangxiang@localhost ~]$ ll
    9. 总用量 8
    10. -rwxr--rw-. 1 weixiangxiang weixiangxiang 0 7月 25 21:25 test.txt
    11. # 不需要关心原来权限是什么,直接通过=设置权限需要的权限
    12. [weixiangxiang@localhost ~]$ chmod u=rwx,g=rw,o=rw test.txt
    13. [weixiangxiang@localhost ~]$ ll
    14. 总用量 8
    15. -rwxrw-rw-. 1 weixiangxiang weixiangxiang 0 7月 25 21:25 test.txt

    数字权限:

            简化字母赋予权限的方式,使用数字表示,比如属主权限中:r表示4,w表示2,x表示1,组合的话进行相加即可,即7=4+2+1表示可读可写可执行,同理5=4+1表示可读可执行。

    • 412:属主可读、属组可执行、其他人可写;
    • 666:文件默认最大的权限,表示属主、属组、其他人都是可读可写;
    • 777:目录默认最大的权限,表示属主、属组、其他人都是可读可写可执行;
    1. [weixiangxiang@localhost ~]$ mkdir test_20220725
    2. [weixiangxiang@localhost ~]$ ll
    3. 总用量 8
    4. drwxrwxr-x. 2 weixiangxiang weixiangxiang 6 7月 25 21:47 test_20220725
    5. -rwxrw-rw-. 1 weixiangxiang weixiangxiang 0 7月 25 21:25 test.txt
    6. # -R表示递归设置权限
    7. [weixiangxiang@localhost ~]$ chmod -R 777 test_20220725
    8. 总用量 8
    9. drwxrwxrwx. 2 weixiangxiang weixiangxiang 6 7月 25 21:47 test_20220725
    10. -rwxrw-rw-. 1 weixiangxiang weixiangxiang 0 7月 25 21:25 test.txt

    请注意,666,777都是最高的权限,为了安全性实际上不建议这么设置!!!

    3、修改文件所属主的权限

    • 命令格式:chown  [选项]  所属主:所属组  文件/目录
    • 含义:change file owner and group
    • 路径:/bin/chown
    • 功能:修改文件和目录的所有者和所属组

    举例:使用root用户创建一个日志文件,通过ll命令显示对用户组及其他用户只读,修改文件的所属主 或 所属主和所属组。

    1. [root@localhost home]# touch test001.log
    2. [root@localhost home]# ll
    3. 总用量 2
    4. drwx------. 3 mysql mysql 78 7月 22 17:33 mysql
    5. -rw-r--r--. 1 root root 0 7月 25 22:04 test001.log
    6. drwx------. 17 weixiangxiang weixiangxiang 4096 7月 25 22:04 weixiangxiang
    7. # 将该文件的属主权限修改为 weixiangxiang, 该用户则具有了 rw 权限
    8. [root@localhost home]# chown weixiangxiang test001.log
    9. 总用量 2
    10. drwx------. 3 mysql mysql 78 7月 22 17:33 mysql
    11. -rw-r--r--. 1 weixiangxiang root 0 7月 25 22:04 test001.log
    12. drwx------. 17 weixiangxiang weixiangxiang 4096 7月 25 22:04 weixiangxiang
    13. # 将该文件的属主权限修改为 weixiangxiang, 所属组也修改为 weixiangxiang
    14. [root@localhost home]# chown weixiangxiang:weixiangxiang test001.log
    15. 总用量 2
    16. drwx------. 3 mysql mysql 78 7月 22 17:33 mysql
    17. -rw-r--r--. 1 weixiangxiang weixiangxiang 0 7月 25 22:04 test001.log
    18. drwx------. 17 weixiangxiang weixiangxiang 4096 7月 25 22:04 weixiangxiang

    请注意:root用户拥有超级管理员的权限,可以修改任意文件的权限,但普通用户只能修改自己目录下的文件权限,否则报权限不足!!!

    4、 修改文件所属组的权限

    • 命令格式:chgrp  [选项]  权限模式  文件名
    • 含义:change group ownership
    • 路径:/bin/chgrp
    • 功能:修改文件和目录的所属组

    举例:接着修改所属组为mysql

    1. # 将该文件的所属组修改为 mysql
    2. [root@localhost home]# chown weixiangxiang:weixiangxiang test001.log
    3. 总用量 2
    4. drwx------. 3 mysql mysql 78 7月 22 17:33 mysql
    5. -rw-r--r--. 1 weixiangxiang mysql 0 7月 25 22:04 test001.log
    6. drwx------. 17 weixiangxiang weixiangxiang 4096 7月 25 22:04 weixiangxiang

    二、默认权限

    Linux 是一个比较安全的操作系统,而安全的基础就是权限,因此,在 Linux 中所有的文件和目录都要有基本的权限,新建的文件和目录当然也要有默认的权限。在 Linux 系统中,通过 umask 默认权限来给所有新建立的文件和目录赋予初始权限。

    1、查看默认权限

    1. [root@localhost /]# umask
    2. 0022
    3. # 八进制显示
    4. [root@localhost /]# umask -S
    5. u=rwx,g=rx,o=rx

    很明显,八进制更能清晰的辨别所属主、所属组及其他人的权限类型。0022,第一位0代表文件的特殊权限(这个后面再说吧),022表示的才是 umask 默认权限。那么,默认权限是如何计算得到的呢?

    umask默认权限一定不是直接使用权限数字相减得到的,而是通过二进制逻辑与和逻辑非联合运算得到的,最简单的办法还是使用权限字母来计算,比如:

    • 文件的默认权限最大只能是666,换算成字母就是“-rw-rw-rw-”;而umask的值是022,也换算成字母就是“-----w--w-”。把两个字母权限相减,得到的就是新建文件的默认权限:(-rw-rw-rw-)-(-----w--w-)=(-rw-r--r--)。
    • 目录的默认权限最大可以是777,换算成字母就是“drwxrwxrwx”;而umask的值是022,也换算成字母就是“d----w--w-”。也把两个字母权限相减,得到的就是新建目录的默认权限:(drwxrwxrwx)-(d----w--w-)=(drwx-r-xr-x)。

    以weixiangxiang用户为例:

    1. [root@localhost weixiangxiang]# su weixiangxiang
    2. [weixiangxiang@localhost ~]$ umask
    3. 0002
    4. [weixiangxiang@localhost ~]$ touch 1.log
    5. [weixiangxiang@localhost ~]$ ll
    6. -rw-rw-r--. 1 weixiangxiang weixiangxiang 0 725 22:48 1.log
    7. [weixiangxiang@localhost ~]$ mkdir ttt/
    8. [weixiangxiang@localhost ~]$ ll
    9. drwxrwxr-x. 2 weixiangxiang weixiangxiang 6 725 22:51 ttt

    当 umask=0002 时,按照上面的计算规则,新建文件默认的权限为:-rw-rw-r-- ;新建目录默认的权限为:drwxrwxr-x 。

    2、修改默认权限

    临时性的修改:(重启机器或重新登录时,该修改会失效)

    [weixiangxiang@localhost ~]$ umask 0022

    永久性的修改:

    vi /etc/profile

     三、ACL权限

    1. 场景

    在实际工作中,普通权限是不够用的,比如有一个场景:一个公司的A部门存在一个该部门文件目录./deptA,对该目录权限的规划应该为:部门主管使用root用户,且作为属主拥有rwx权限,而该部门的员工加入的是groupA,groupA作为属组并赋予rwx权限,其他人则没有权限,这样是符合实际情况的!

    但是,有一天需要从其他部门调过来一个同事支撑该部门的日常工作,由于这位同事不熟悉该部门的业务,不能随意修改该部门的文档,只能给他赋予rx的权限。这样的话,是把他加入groupA组?还是赋予他其他人的权限?这些都明显不符合要求,这时候普通权限就不够用了!

    2. ACL操作

    Windows系统中,可以单独指定用户并单独进行分配权限的方式,就能很好的解决用户身份不足的情况。那么,Linux系统使用的ACL(访问控制列表)设置用户对文件的权限,CentOS系统是默认开启ACL的。

    <1>. 查看ACL状态:getfacl  文件/目录名

    1. # 查看 mysql安装目录的 ACL权限
    2. [root@localhost /]# getfacl /opt/mysql-8.0.26-el7-x86_64/
    3. getfacl: Removing leading '/' from absolute path names
    4. # file: opt/mysql-8.0.26-el7-x86_64/
    5. # owner: root
    6. # group: root
    7. user::rwx
    8. group::r-x
    9. other::r-x
    10. # 查看 test001.log文件的 ACL权限
    11. [root@localhost /]# getfacl /home/test001.log
    12. getfacl: Removing leading '/' from absolute path names
    13. # file: home/test001.log
    14. # owner: weixiangxiang
    15. # group: mysql
    16. user::rw-
    17. group::r--
    18. other::r--

    <2>. 设置ACL状态:setfacl  [参数选项]  文件/目录名

    参数选项:

    1. [root@localhost /]# setfacl --help
    2. setfacl 2.2.51 -- set file access control lists
    3. Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
    4. -m, --modify=acl modify the current ACL(s) of file(s)
    5. -M, --modify-file=file read ACL entries to modify from file
    6. -x, --remove=acl remove entries from the ACL(s) of file(s)
    7. -X, --remove-file=file read ACL entries to remove from file
    8. -b, --remove-all remove all extended ACL entries
    9. -k, --remove-default remove the default ACL
    10. --set=acl set the ACL of file(s), replacing the current ACL
    11. --set-file=file read ACL entries to set from file
    12. --mask do recalculate the effective rights mask
    13. -n, --no-mask don't recalculate the effective rights mask
    14. -d, --default operations apply to the default ACL
    15. -R, --recursive recurse into subdirectories
    16. -L, --logical logical walk, follow symbolic links
    17. -P, --physical physical walk, do not follow symbolic links
    18. --restore=file restore ACLs (inverse of `getfacl -R')
    19. --test test mode (ACLs are not modified)
    20. -v, --version print version and exit
    21. -h, --help this help text

    实现上面的场景需求:

    1. # 创建部门目录
    2. [root@localhost /]# mkdir deptA
    3. # 创建分组groupA
    4. [root@localhost /]# groupadd groupA
    5. # 设置deptA目录的属主和属组,并赋予770权限
    6. [root@localhost /]# chown root:groupA /deptA
    7. [root@localhost /]# chmod 770 /deptA
    8. [root@localhost /]# ll -d /deptA/
    9. drwxrwx---. 2 root groupA 6 714 19:04 /deptA/
    10. # 再创建一个其他部门调动过来的员工,但只能赋予操作deptA目录的rx权限
    11. [root@localhost /]# useradd xiaoxiao
    12. [root@localhost /]# setfacl -m u:xiaoxiao:rx /deptA/
    13. [root@localhost /]# getfacl deptA/
    14. # file: deptA/
    15. # owner: root
    16. # group: groupA
    17. user::rwx # 用户root的权限,属主
    18. user:xiaoxiao:r-x # 用户xiaoxiao的权限
    19. group::rwx # 用户组groupA的权限,属组
    20. mask::rwx # mask默认权限
    21. other::--- # 其他人权限,其他人

    从结果可以看到,用户xiaoxiao既不是deptA目录的属主,也不是属组,也不是其他人,而是单独被分配了rx权限。通过 setfacl -m u:指定用户:指定权限  指定目录 方式很便捷的实现了单独为指定用户分配指定的权限!!同理,通过 setfacl -m g:指定用户组:指定权限  指定目录 方式也可以实现单独为指定用户组分配指定的权限~~

    除了通过-m实现新增ACL权限操作外,使用参数选项中的-R可以递归设置ACL权限;使用参数选项中的-d可以设置默认ACL权限;使用参数选项中的-x/-b/-k可分别删除单个/删除所有/删除默认的ACL权限;

    四、文件特殊权限(SetUID、SetGID、Sticky BIT)

    1、SetUID

    是否想过一个问题,为什么普通用户可以通过 passwd 命令修改自己的密码?我们知道,普通用户的信息保存在/etc/passwd文件中,用户的密码实际保存在/etc/shadow文件中的加密密码,看下这两个文件:

    1. [root@localhost /]# ll /etc/passwd
    2. -rw-r--r--. 1 root root 2658 714 19:26 /etc/passwd
    3. [root@localhost /]# ll /etc/shadow
    4. ----------. 1 root root 1729 714 19:27 /etc/shadow

    这两个文件,一个是644(普通用户只具有可读权限)、一个是000(普通用户无权限),也就是说普通用户对这两个文件其实都是没有写权限的,那为什么普通用户可以修改自己的权限呢?

    其实,普通用户可以修改自己的密码的秘密不在于这两个文件,而在于passwd命令,看下这个命令:

    1. [root@localhost /]# ll /usr/bin/passwd
    2. -rwsr-xr-x. 1 root root 27856 41 2022 /usr/bin/passwd

    关键的奥秘在于,在属主应该写x(执行)权限的位置出现了一个小写s,这种权限称作SetUID权限。

    因此,当一个具有执行权限的文件设置SetUID权限后,用户在执行这个文件时将以文件所有者的身份来执行。也就是说,当普通用户使用passwd命令更改自己的密码的时候,实际上是在用passwd命令所有者root的身份在执行passwd命令,root当然可以将密码写入/etc/shadow文件,所以普通用户也可以修改/etc/shadow文件,命令执行完成后,该身份也随之消失。

    当然,可以验证SetUID权限的作用,比如,通过以下命令取消root用户的SetUID权限,普通用户修改密码则会报错:

    1. [root@localhost /]# chmod u-s /usr/bin/passwd
    2. [root@localhost /]# su xiaoxiao
    3. [xiaoxiao@localhost /]$ passwd
    4. 更改用户 test_0814 的密码 。
    5. 新的 密码:
    6. 重新输入新的 密码:
    7. passwd:身份验证令牌错误。

    实际上我们不能随便设置SetUID权限,同时要防止黑客的恶意修改,有几点安全建议:

    • 关键目录应严格控制w写权限,比如“/”“/usr”等;
    • 用户的密码设置要严格遵守密码规范;
    • 对系统中默认应该拥有SetUID权限的文件制作一张列表,定时检查有没有列表之外的文件被设置了SetUID权限。

    2、SetGID

    参考SetUID,就好理解SetGID了,在属组应该写x(执行)权限的位置出现了一个小写s,这种权限称作SetGID权限。比如 locate 命令:

    1. [root@localhost /]# ll /usr/bin/locate
    2. -rwx--s--x. 1 root slocate 40520 4月  11 2018 /usr/bin/locate

    SetGID权限可作用于文件,也可作用于目录。

    当是文件:

    • 只有可执行的二进制程序才能设置SetGID权限,命令执行者要对该程序拥有x(执行)权限;
    • 命令执行者在执行程序的时候,组身份升级为该程序文件的属组;
    • SetGID权限同样只在该程序执行过程中有效,也就是说,组身份改变只在程序执行过程中有效。

    和passwd命令类似,普通用户在执行locate命令的时候,会获取locate属组的组身份。locate命令是在系统中按照文件名查找符合条件的文件的,不过它不是直接搜索系统的,而是搜索/var/lib/mlocate/mlocate.db这个数据库的。

    当是目录:

    • 普通用户必须对此目录拥有r和x权限,才能进入此目录;
    • 普通用户在此目录中的有效组会变成此目录的属组;。
    • 若普通用户对此目录拥有w权限,则新建文件的默认属组是这个目录的属组。

    3、Sticky BIT

    Sticky BIT意为粘着位,也简称为SBIT,作用如下:

    • 目前只对目录有效;
    • 普通用户对该目录拥有w和x权限;

    如果没有SBIT的话,因为普通用户拥有w权限,可以删除此目录下的所有文件,包括其他用户建立的文件。一旦被赋予了粘着位,除了root用户可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件。

    默认系统中/tmp/目录拥有SBIT权限,其他人的x权限位被t占用了:

    1. [root@localhost /]# ll -d /tmp/
    2. drwxrwxrwt. 35 root root 8192 814 20:51 /tmp/

    因此,具有SBIT权限的目录是不允许删除的!

    我们知道,“755”代表属主拥有读、写、执行权限;属组拥有读、执行权限;其他人拥有读、执行权限。如果把特殊权限也考虑在内,那么权限就应该写成“4755”,其中“4”就是特殊权限SetUID了,“755”还是代表属主、属组和其他人的权限。这几个特殊权限这样来表示:

    • 4:代表SetUID
    • 2:代表SetGID
    • 1:代表SBIT

    另外,需要注意:这几个特殊权限操作的对象是不同的,SetUID只对二进制程序文件有效,SetGID可以对二进制程序文件和目录有效,但是SBIT只对目录有效。特殊权限只针对具有可执行权限的文件有效,不具有x权限的文件被赋予了SetUID和SetGID权限会被标记为S, SBIT权限会被标记为T。所以,如果需要设置特殊权限,则还是需要分开设定的。

    五、文件系统属性chattr权限

    charrt权限的特点:

    • 只能root用户使用,用来修改文件系统的权限属性;
    • chattr 命令是一种强于rwx权限的一种授权方式。

    chattr 命令格式:chattr [-RVf] [+-=参数选项] 文件/目录名

    通过--help看下有哪些参数选项:

    1. [root@localhost /]# chattr --help
    2. Usage: chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...

    特别注意以下参数:

    • a:是文件的话,只能对文件新增数据,不允许修改和删除数据;是目录的话,是不允许删除目录下的文件,但可以新建文件和修改文件。
    • e:文件通常会默认的属性,表示使用ext文件系统进行存储,使用该属性之后是不能通过-e取消的!
    • i:是文件的话,不允许对文件新增、修改、删除数据,不允许改名和删除文件;是目录的话,只能修改目录下的文件数据,不能新增和删除文件。

    因此,charrt命令是一种凌驾于rwx权限上的命令,通常需要谨慎使用!此外,通过 lsattr 命令可以查看文件系统属性:

    1. # -a 列出目录下所有de文件属性,-d只显示目录
    2. [root@localhost /]# lsattr -d /opt/---------------- /opt/

    六、系统命令sudo权限

    root 超级用户作为管理员,拥有着 Linux 系统的最高级权限,实际上所有的大小事情都交给 root 超级用户去做是不现实的,健康的管理方法是在 Linux 服务架构好后,可授权普通用户协助管理员完成日常管理,通过 sudo 工具实现,几乎所有的 Linux 是默认安装了 sudo。值得注意的是,sudo的操作对象是系统命令,即 root 把本来只能由超级用户执行的命令赋予普通用户执行。

    root 用户通过 visudo 命令可以编辑其配置文件/etc/sudoers进行授权,配置文件部分内容如下,注释也解释的很清楚:

    1. [root@localhost /]# visudo
    2. ......
    3. ## Next comes the main part: which users can run what software on
    4. ## which machines (the sudoers file can be shared between multiple
    5. ## systems).
    6. ## Syntax:
    7. ##
    8. ##      user    MACHINE=COMMANDS
    9. ##
    10. ## The COMMANDS section may have other options added to it.
    11. ##
    12. ## Allow root to run any commands anywhere
    13. root    ALL=(ALL)       ALL
    14. ## Allows members of the 'sys' group to run networking, software,
    15. ## service management apps and more.
    16. # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
    17. ## Allows people in group wheel to run all commands
    18. %wheel  ALL=(ALL)       ALL
    19. ## Same thing without a password
    20. # %wheel        ALL=(ALL)       NOPASSWD: ALL
    21. ## Allows members of the users group to mount and unmount the
    22. ## cdrom as root
    23. # %users  ALL=/sbin/mount /mnt
    24. rom, /sbin/umount /mnt
    25. rom
    26. ## Allows members of the users group to shutdown this system
    27. # %users  localhost=/sbin
    28. utdown -h now
    29. ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
    30. #includedir /etc/sudoers.d

    文件格式说明:

    1. # 用户名 被管理的主机IP地址=(可使用的身份) 授权命令(绝对路径)
    2. root ALL=(ALL) ALL
    3. # %组名 被管理的主机IP地址=(可使用的身份) 授权命令(绝对路径)
    4. %wheel ALL=(ALL) ALL
    • 第1位:指定赋予权限的用户名或组名,组名的前面需要加上%;
    • 第2位:等号之前的部分表示指定被管理的主机IP地址,ALL表示所有,也可以指定固定IP地址;等号之后的部分表示切换使用的身份,ALL表示所有身份;
    • 第3位:root给普通用户授权的命令,ALL表示所有命令(普通用户不能赋予ALL),具体命令的话必须是该命令的绝对路径。

    举例:给新建用户赋予服务器关机重启的权限

    • 新建一个用户组和用户test_0814:(密码暂定20210814)
    1. [root@localhost /]# useradd test_0814
    2. [root@localhost /]# passwd test_0814
    3. 更改用户 test_0814 的密码 。
    4. 新的 密码:
    5. 重新输入新的 密码:
    6. passwd:所有的身份验证令牌已经成功更新。
    • 切换到test_0814用户,执行关机重启命令:(该用户没有执行该命令的权限,并显示“不在 sudoers 文件中”!)
    1. [root@localhost /]# su test_0814
    2. [test_0814@localhost /]sudo /sbin
    3. utdown -r now
    4. 我们信任您已经从系统管理员那里了解了日常注意事项。
    5. 总结起来无外乎这三点:
    6.     #1) 尊重别人的隐私。
    7.     #2) 输入前要先考虑(后果和风险)。
    8.     #3) 权力越大,责任越大。
    9. [sudo] test_0814 的密码:
    10. test_0814 不在 sudoers 文件中。此事将被报告。
    • 切换到root,赋予普通用户执行该命令的权限,并切回普通用户重试:
    1. [test_0814@localhost /]su root
    2. 密码:
    3. [root@localhost /]# visudo
    4. ......
    5. # 在文件中加入内容:
    6. test_0814  ALL=(ALL)  /sbin
    7. utdown -h now
    8. [root@localhost /]# su test_0814
    9. [test_0814@localhost /]sudo /sbin
    10. utdown -r now
    11. [sudo] test_0814 的密码:
    12. 对不起,用户 test_0814 无权以 root 的身份在 localhost.localdomain 上执行 /sbin
    13. utdown -r now。

    额,这下尴尬了,用户 test_0814 无法执行关机重启的命令,这是咋回事呢?看一下该用户授权列表:卧槽,仔细检查一番之后发现,-r写成-h,哈哈哈!

    1. [test_0814@localhost /]$ sudo -l
    2. [sudo] test_0814 的密码:
    3. ......
    4. 用户 test_0814 可以在 localhost 上运行以下命令:
    5. (ALL) /sbin/shutdown -h now
    6. [test_0814@localhost /]

    最后,科普下 shutdown 关机命令各参数的区别:

    • - k => 不执行任何关机操作,只发出警告信息给所有用户
    • - r => 重新启动计算机
    • - h => 关机并彻底断电
    • - f => 快速关机且重启动时跳过fsck
    • - n => 快速关机不经过init程序
    • - c => 取消之前的定时关机

    很明显,要用-r重启,而不是-h!

  • 相关阅读:
    基于FPGA的五段流水CPU设计
    卷积神经网络 - Keras入门与残差网络的搭建
    【云原生】· 一文了解docker中的网络
    linux(centos7)常用命令 开启关闭防火墙
    用python读取各种数据格式(全代码)
    浅谈代码语言的魅力
    AutoSAR入门:开发工具链介绍
    JS中的【函数】与【方法】之“父慈子孝”
    在亚马逊云科技Amazon SageMaker上部署构建聊天机器人的开源大语言模型
    多精度 simulator 中的 RL:一篇 14 年 ICRA 的古早论文
  • 原文地址:https://blog.csdn.net/qq_29119581/article/details/125992277