• linux之权限管理和组


    一,ACL权限

    1.1,什么是acl权限?

    1. ACL是Access Control List的缩写,即访问控制列表。可以通过下列的实例来理解ACL的作用:

    思考如何实现如下的权限控制:

    • 每个项目成员在有一个自己的项目目录,对自己的目录有完全权限
    • 项目组中的成员对项目目录也有完全权限
    • 其他人对项目目录没有任何权限
    • 对于被分配进入项目的临时人员,只有读和执行权限,不能修改
    1. 如何实现

    初步思路:

    • 创建一个临时组(例如:temp),并将临时组的权限设置位 r-w
    • 将临时组也作为项目目录的所属组
    • 对于临时用户作为临时组的成员即可

    问题:

    • Linux基本权限中,文件和目录同时只能有一个分组
    • 使用ACL来解决上面的问题

    1.2 操作步骤

    操作流程:

    1. #1,添加测试目录,用户,组,并将用户添加到组
    2. #创建一个目录
    3. [root@localhost ~]# mkdir /project
    4. #创建一个用户
    5. [root@localhost ~]# useradd swt
    6. [root@localhost ~]# useradd dhy
    7. #创建一个组
    8. [root@localhost ~]# groupadd tgroup
    9. #将swt加入到组中
    10. [root@localhost ~]# gpasswd -a swt tgroup
    11. 正在将用户“swt”加入到“tgroup”组中
    12. #将dhy加入到组中
    13. [root@localhost ~]# gpasswd -a dhy tgroup
    14. 正在将用户“dhy”加入到“tgroup”组中
    15. #可以查看组是否建立成功
    16. [root@localhost ~]# cat /etc/group
    17. root:x:0:
    18. bin:x:1:
    19. daemon:x:2:
    20. sys:x:3:
    21. adm:x:4:
    22. tty:x:5:
    23. disk:x:6:
    24. lp:x:7:
    25. mem:x:8:
    26. kmem:x:9:
    27. wheel:x:10:
    28. cdrom:x:11:
    29. mail:x:12:postfix
    30. man:x:15:
    31. dialout:x:18:
    32. floppy:x:19:
    33. games:x:20:
    34. tape:x:33:
    35. video:x:39:
    36. ftp:x:50:
    37. lock:x:54:
    38. audio:x:63:
    39. nobody:x:99:
    40. users:x:100:
    41. utmp:x:22:
    42. utempter:x:35:
    43. input:x:999:
    44. systemd-journal:x:190:
    45. systemd-network:x:192:
    46. dbus:x:81:
    47. polkitd:x:998:
    48. libstoragemgmt:x:997:
    49. ssh_keys:x:996:
    50. abrt:x:173:
    51. rpc:x:32:
    52. sshd:x:74:
    53. slocate:x:21:
    54. postdrop:x:90:
    55. postfix:x:89:
    56. chrony:x:995:
    57. ntp:x:38:
    58. tcpdump:x:72:
    59. stapusr:x:156:
    60. stapsys:x:157:
    61. stapdev:x:158:
    62. swt:x:1000:
    63. dhy:x:1001:
    64. tgroup:x:1002:swt,dhy
    65. #2,修改目录的所有者和所属组
    66. [root@localhost ~]# chown root:tgroup /project
    67. [root@localhost ~]# ll -d /project
    68. drwxr-xr-x. 2 root tgroup 6 315 11:57 /project
    69. #3,设定权限
    70. [root@localhost ~]# chmod 770 /project
    71. [root@localhost ~]# ll -d /project
    72. drwxrwx---. 2 root tgroup 6 315 11:57 /project
    73. #4,此时需要为临时用户进行分配权限,r-x
    74. # 添加临时用户
    75. [root@localhost ~]# useradd tempuser
    76. [root@localhost ~]# passwd tempuser
    77. 更改用户 tempuser 的密码 。
    78. 新的 密码:
    79. 无效的密码: 密码少于 8 个字符
    80. 重新输入新的 密码:
    81. 抱歉,密码不匹配。
    82. 新的 密码:
    83. 无效的密码: 密码少于 8 个字符
    84. 重新输入新的 密码:
    85. passwd:所有的身份验证令牌已经成功更新。
    86. # 为临时用户分配权限
    87. [root@localhost ~]# setfacl -m u:tempuser:rx /project
    88. [root@localhost ~]# getfacl /project
    89. getfacl: Removing leading '/' from absolute path names
    90. # file: project
    91. # owner: root
    92. # group: tgroup
    93. user::rwx
    94. user:tempuser:r-x
    95. group::rwx
    96. mask::rwx
    97. other::---
    98. # 查看目录权限,注意+,表示文件或目录由acl权限
    99. [root@localhost ~]# ll -d /project
    100. drwxrwx---+ 2 root tgroup 6 315 11:57 /project
    101. #5,验证acl权限
    102. #切换到tempuser用户
    103. [root@localhost ~]# su tempuser
    104. # 进入到tempuser目录
    105. [tempuser@localhost root]$ cd /project
    106. # 创建一个test.txt文件,明显权限不够
    107. [tempuser@localhost project]$ touch test.txt
    108. touch: 无法创建"test.txt": 权限不够
    109. #切换到管理员
    110. [tempuser@localhost project]$ su root
    111. 密码:
    112. #6,控制组acl权限
    113. # 创建一个temp组
    114. [root@localhost project]# groupadd temp
    115. # 设置组的acl权限
    116. [root@localhost project]# setfacl -m g:temp:rx /project
    117. # 查看设置后的acl
    118. [root@localhost project]# getfacl /project
    119. getfacl: Removing leading '/' from absolute path names
    120. # file: project
    121. # owner: root
    122. # group: tgroup
    123. user::rwx
    124. user:tempuser:r-x
    125. group::rwx
    126. group:temp:r-x
    127. mask::rwx
    128. other::---
    129. # 创建一个用户,并将该用户设置为temp组
    130. [root@localhost project]# useradd tempu02
    131. [root@localhost project]# passwd tempu02
    132. 更改用户 tempu02 的密码 。
    133. 新的 密码:
    134. 无效的密码: 密码少于 8 个字符
    135. 重新输入新的 密码:
    136. passwd:所有的身份验证令牌已经成功更新。
    137. # 将用户添加到temp组中
    138. [root@localhost project]# gpasswd -a tempu02 temp
    139. 正在将用户“tempu02”加入到“temp”组中
    140. # 验证
    141. [root@localhost project]# su tempu02
    142. # 可以进入目录
    143. [tempu02@localhost project]$ cd /project
    144. [tempu02@localhost project]$ ls
    145. # 不能创建文件
    146. [tempu02@localhost project]$ touch aa.txt
    147. touch: 无法创建"aa.txt": 权限不够

    1.3 acl中的mask修改最大权限

    看下面的信息:

    1. [root@localhost ~]# getfacl /project
    2. getfacl: Removing leading '/' from absolute path names
    3. # file: project
    4. # owner: root
    5. # group: tgroup
    6. user::rwx
    7. # 所属用户权限
    8. user:tempuser:r-x
    9. # 临时用户权限
    10. group::rwx
    11. # 所属组权限, 文件创建时的所属组
    12. group:temp:r-x
    13. # 一般组的权限 创建的临时组
    14. mask::rwx
    15. # 权限掩码,用来控制最大权限 ✨
    16. other::---

    最大权限是什么?

     如果给用户赋予了ACL权限,则用户所获取的权限并不是ACL时所附的权限,而是赋予的ACL权限 与 mask权限 进行 与 操作 之后的权限。例如:user:tempuser:r-x 第一位是r, mask的第一位也是r, 则与操作后,用户则有 r 的权限, user:tempuser:r-x 第二位是 - ,mask的第二位是 w,则与操作后用户则没有 w 的权限。

    最大权限的作用?

    mask的默认值为rwx,即最大权限,任何其他的权限值和mask相“与”都会得到其自身; 可以通过调整mask的方式来控制分配给用户的最大权限,例如: mask值调整为 r-x ,则不管是否给用户分配”w”权限,用户都没有“w”的权限。mask可以用来避免权限分配不当而给系统带来的风险。

    注意:mask不会影响文件所有者的权限

    实验:

    1. #设置mask
    2. [root@localhost ~]# setfacl -m:rx /project
    3. # 查看mask
    4. [root@localhost ~]# getfacl /project
    5. getfacl: Removing leading '/' from absolute path names
    6. # file: project
    7. # owner: root
    8. # group: tgroup
    9. user::r-x
    10. user:tempuser:r-x
    11. group::rwx
    12. # 所属组虽然设置的权限为rwx,但实际的权限r-x
    13. group:temp:r-x
    14. # 修改之后的mask
    15. mask::rwx
    16. other::---

    1.4,ac权限的删除

    1. # 删除指定acl其权限
    2. [root@localhost ~]# setfacl -x u:tempuser /project
    3. # 查看acl权限
    4. [root@localhost ~]# getfacl /project
    5. getfacl: Removing leading '/' from absolute path names
    6. # file: project
    7. # owner: root
    8. # group: tgroup
    9. user::r-x
    10. group::rwx
    11. group:temp:r-x
    12. mask::rwx
    13. other::---
    14. # 删除所有acl权限
    15. [root@localhost ~]# setfacl -b /project
    16. [root@localhost ~]# getfacl /project
    17. getfacl: Removing leading '/' from absolute path names
    18. # file: project
    19. # owner: root
    20. # group: tgroup
    21. user::r-x
    22. group::rwx
    23. other::---
    24. # 注意 权限没有+
    25. [root@localhost ~]# ll -d /project
    26. dr-xrwx---. 2 root tgroup 6 315 11:57 /project

    1.5,acl权限的递归及默认值

    所属递归:指定目录下的所有文件及其子目录,都具体指定的ACL权限属性

    注意:ACL权限只对已有的文件或目录起作用,对新加的不起作用

    acl的默认值:如果希望新加的文件或目录都具有父目录所拥有的ACL权限属性,则需要设置默认值

    1. # 切换到project目录
    2. [root@localhost ~]# cd /project
    3. # 设置acl权限
    4. [root@localhost project]# setfacl -m u:tempuser:rx /project
    5. [root@localhost project]# ll -d
    6. dr-xrwx---+ 2 root tgroup 6 315 11:57 .
    7. # project目录已经设置好了ACL权限,在该目录中添加一个文件,文件并不具有ACL权限,因为在设置ACL权限时并没有指定递归属性
    8. [root@localhost project]# touch abc.txt
    9. [root@localhost project]# ll
    10. 总用量 0
    11. -rw-r--r--. 1 root root 0 315 18:35 abc.txt
    12. # 设置ACL权限可以递归,注意:R参数的位置在此处是固定的,这算是Linux中命令的一个特例,Linux中命令参数的位置一般是不敏感的
    13. [root@localhost project]# setfacl -m u:tempuser:rx -R /project
    14. [root@localhost project]# ll /project
    15. 总用量 0
    16. -rw-r-xr--+ 1 root root 0 315 18:35 abc.txt
    17. # 在设置了project目录递归ACL权限属性后,再在该目录中创建一个新的文件,此时发现新的文件并没有ACL权限,这说明ACL权限只对已有的文件或目录起作用,对新加的不起作用
    18. [root@localhost project]# touch def.txt
    19. [root@localhost project]# ll
    20. 总用量 0
    21. -rw-r-xr--+ 1 root root 0 315 18:35 abc.txt
    22. -rw-r--r--. 1 root root 0 315 18:36 def.txt
    23. # 设置acl默认值,默认值的参数是d,可以和-R一起使用
    24. [root@localhost project]# setfacl -m d:u:tempuser:rx -R /project[root@localhost project]# getfacl /project
    25. getfacl: Removing leading '/' from absolute path names
    26. # file: project
    27. # owner: root
    28. # group: tgroup
    29. user::r-x
    30. user:tempuser:r-x
    31. group::rwx
    32. mask::rwx
    33. other::---
    34. default:user::r-x
    35. default:user:tempuser:r-x
    36. default:group::rwx
    37. default:mask::rwx
    38. default:other::---
    39. [root@localhost project]# touch www.txt
    40. [root@localhost project]# ll
    41. 总用量 0
    42. -rw-r-xr--+ 1 root root 0 315 18:35 abc.txt
    43. -rw-r--r--. 1 root root 0 315 18:36 def.txt
    44. # 该文件在设置规则之后,默认值之前创建,两头都不管,所以没有ACL权限属性
    45. -r--rw----+ 1 root root 0 315 18:37 www.txt

    二,特殊位

    2.1 SUID

    什么是SUID?

    • SUID是对二进制可执行的文件才有效, 普通文件设置之后是没有意义的
    • 执行者对该程序有x权限
    • 当程序具有suid时,程序执行者在执行程序期间,会暂时获得该程序所有者的身份
    • 程序执行者所获取的属主身份,只在程序运行过程中有效

    为什么需要SUID?

    Linux中具有suid权限的文件,如passwd

    1. [root@localhost ~]# whereis passwd
    2. passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
    3. [root@localhost ~]# ll /usr/bin/passwd
    4. -rwsr-xr-x. 1 root root 27856 41 2020 /usr/bin/passwd
    5. [root@localhost ~]#

    注意:passwd的权限中在文件所有者的权限中有一个“s”,这说明:

    • passwd执行程序具有suid权限
    • 在passwd执行期间会获取root权限
    • 同时所属组和其他用户是用户r和x权限

    为什么需要这么设置权限?

    • passwd修改的实际上是/etc/shadow的内容,但该文件只有root超级管理员才能修改,一般用户不可以
    • 但一般用户应该可以修改自己的账户密码,这是正当的需求
    • 在passwd执行期间,让普遍用户暂时获取root用户的权限,以便于修改shadow文件,执行完成临时赋予的权限消失,这即满足了用户可以修改自己密码的需求,也照顾到了系统安全性。
    1. 怎么设置suid?
    • 字母方式
      • chmod u+s <文件名>
      • u代表设置的是suid
    • 数字方式
      • chmod 4755 <文件名>
      • 最前方的4表示设置的是suid,后面的755分别代码 所有者,所属组,其他人的权限
    1. 怎样移除suid
    • 设置设置权限
      • chmod 755 <文件名>
    • 字符方式
      • chmod u-s <文件名>

    2.2,BIT粘着位权限

    SBIT权限的特点:

    • SBIT权限只能针对目录有效
    • 普通用户对目录拥有w和x权限,即普通用户对目录有写入权限
    • 若没有SBIT,则普通用户可以删除目录下的所有文件,包括其他用户创建的文件;若目录有SBIT权限,则只用root用户可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,对于其他用户创建的文件则无权删除。
    • SBIT权限的设置只能是root用户,其他用户不可以
      1. # Linux中的tmp目录是使用SBIT权限的典型目录,注意权限部分最后的t字母
      2. [root@localhost ~]# ll -d /tmp
      3. drwxrwxrwt. 10 root root 218 102 16:05 /tmp
      4. # 创建一个新用户,并设置密码
      5. [root@localhost ~]# useradd test
      6. [root@localhost ~]# passwd test
      7. # 切换到lisen用户,在/tmp目录下创建文件
      8. [lisen@localhost root]$ touch /tmp/abcd.txt
      9. # 切换到test用户,删除/tmp/目录下的abcd.txt文件,因为tmp目录具有SBIT权限,且abcd.txt
      10. # 文件不是当前用户创建,所以无权删除。
      11. [test@localhost root]$ cd /tmp
      12. [test@localhost tmp]$ ls
      13. abcd.txt
      14. abc.txt
      15. systemd-private-a092fa5008e44207b2cdbcae85170c80-chronyd.service-WocDs1
      16. test
      17. vmware-root_665-3988687359
      18. [test@localhost tmp]$ rm abcd.txt
      19. rm:是否删除有写保护的普通空文件 "abcd.txt"?y
      20. rm: 无法删除"abcd.txt": 不允许的操作
      21. # ---- 设置SBIT权限 ----
      22. [root@localhost /]# mkdir /test
      23. # 创建的目录默认的权限是755
      24. [root@localhost /]# ll -d /test
      25. drwxr-xr-x. 2 root root 6 102 17:33 /test
      26. # 设置SBIT权限
      27. [root@localhost /]# chmod 1755 /test
      28. [root@localhost /]# ll -d /test
      29. drwxr-xr-t. 2 root root 6 102 17:33 /test
      30. # 上面的设置test的其他用户没有写入的权限,所以SBIT权限的没有什么含义
      31. [root@localhost ~]# chmod 1777 /test
      32. [root@localhost ~]# ll -d /test
      33. drwxrwxrwt. 2 root root 6 102 17:33 /test

      2.3,SGID

      相对于SUID只能设置可执行的文件,SGID可以设置可执行文件,也可以设置目录,SGID有如下特征:

    • 如果设置的对象是文件,则只能是可执行的二进制文件,且命令的执行者需要对文件有 x 权限
    • 命令执行过程中,组身份升级为该文件的所属组
    • 只有在程序执行的过程中才有效

    使用案例

    1. # 到根目录去
    2. [root@localhost /]# cd ~
    3. # centos7 默认没有安装locate 先执行安装
    4. [root@localhost ~]# yum install mlocate
    5. 已加载插件:fastestmirror, langpacks
    6. There are no enabled repos.
    7. Run "yum repolist all" to see the repos you have.
    8. To enable Red Hat Subscription Management repositories:
    9. subscription-manager repos --enable <repo>
    10. To enable custom repositories:
    11. yum-config-manager --enable <repo>
    12. [root@localhost ~]# updatedb
    13. [root@localhost ~]# locate inittab
    14. /etc/inittab
    15. /usr/share/augeas/lenses/dist/inittab.aug
    16. /usr/share/man/zh_CN/man5/inittab.5.gz
    17. /usr/share/vim/vim74/syntax/inittab.vim
    18. # 查看locate命令,注意权限 所属组部分的s,这个s即表示开启了SGID,在执行该
    19. # 命令时,会在执行期间临时将组身份升级为该文件的所属组
    20. [root@localhost ~]# ll /usr/bin/locate
    21. -rwx--s--x. 1 root slocate 40520 411 2018 /usr/bin/locate
    22. # locate命令需要使用mlocate.db文件,但该文件默认情况下普通用户是没有权限读的,当用户
    23. # 运行locate命令时,临时获取了SGID属性,组身份升级为了该文件的所属组,所以具有了对
    24. # mlocate文件的读权限。
    25. [root@localhost ~]# ll /var/lib/mlocate/mlocate.db
    26. -rw-r-----. 1 root slocate 855084 315 18:51 /var/lib/mlocate/mlocate.db
    1. # ---- 为目录设置SGID的示例 -----
    2. # 查看当前目录
    3. [root@localhost ~]# pwd
    4. /root
    5. # 在tmp目录下创建一个目录
    6. [root@localhost ~]# mkdir /tmp/test
    7. # 给test赋予SGID的权限,(第一2表示SGID),如果需要清除SGID则可以使用 777
    8. # 也可以使用 chmod g+s 文件或目录名
    9. [root@localhost ~]# chmod 2777 /tmp/test
    10. # 权限所属组部分的s,表示拥有SGID权限
    11. [root@localhost ~]# ll -d /tmp/test
    12. drwxrwsrwx. 2 root root 6 102 14:58 /tmp/test
    13. # 切换用户
    14. [root@localhost ~]# su lisen
    15. [lisen@localhost root]$ pwd
    16. /root
    17. # 普通用户无权在root目录下创建文件
    18. [lisen@localhost root]$ touch abc.txt
    19. touch: 无法创建"abc.txt": 权限不够
    20. # 在home目录下创建一个文件,文件的默认的所属组为,当前用户的所属组
    21. [lisen@localhost root]$ cd /home/lisen
    22. [lisen@localhost ~]$ touch abc.txt
    23. [lisen@localhost ~]$ ll
    24. 总用量 0
    25. -rw-rw-r--. 1 lisen lisen 0 102 15:01 abc.txt
    26. # 在设置了SGID的目录中,创建文件,默认的所属组变成了目录的所属组,这是SGID的作用
    27. [lisen@localhost ~]$ cd /tmp/test
    28. [lisen@localhost test]$ touch bcd.txt
    29. [lisen@localhost test]$ ll
    30. 总用量 0
    31. -rw-rw-r--. 1 lisen root 0 102 15:01 bcd.txt
    32. [lisen@localhost test]$

    三,文件系统属性chattr权限

    命令格式: chattr [+-=] [权限选项] 文件或目录, + 增加权限, -删除权限, =赋予权限

    权限选项:

    • i 如果文件被设置i属性,则不允许文件进行删除,改名,文件内容也不允许改动; 如果目录被设置了i选项,则只能修改目录下的文件数据,但不允许建立和删除文件。需要注意的是该属性对root用户也同样有效
    • a 如果对文件设置了a属性,则只能在文件中增加数据,但不能修改也不能删除数据; 如果对目录设置了a属性,那么只能在目录中建立或修改文件,但不能删除

    使用示例

    1. # 文件chattr属性示例
    2. # 文件的i属性
    3. # 创建一个文件,先不为其设置i属性,此时可以正常写入内容
    4. [root@localhost ~]# touch abc
    5. [root@localhost ~]# ll
    6. 总用量 4
    7. -rw-r--r--. 1 root root 0 315 19:11 abc
    8. -rw-------. 1 root root 1284 39 20:16 anaconda-ks.cfg
    9. drwxr-xr-x. 2 root root 6 311 16:06 a.txt
    10. drwxr-xr-x. 2 root root 6 311 16:05 sa
    11. [root@localhost ~]# echo 12345 > abc
    12. [root@localhost ~]# cat abc
    13. 12345
    14. # 为abc文件设置i属性
    15. [root@localhost ~]# chattr +i abc
    16. # 一般ls命令不能显示文件的i属性,需要使用lsattr命令
    17. [root@localhost ~]# lsattr -a abc
    18. ----i----------- abc
    19. # 设置了abc文件的i属性后,测试修改其内容,无权修改,删除也不行
    20. [root@localhost ~]# echo swt >> abc
    21. -bash: abc: 权限不够
    22. [root@localhost ~]# rm abc
    23. rm:是否删除普通文件 "abc"y
    24. rm: 无法删除"abc": 不允许的操作
    25. # 目录的i属性示例
    26. [root@localhost ~]# mkdir /test
    27. mkdir: 无法创建目录"/test": 文件已存在
    28. [root@localhost ~]# cd /test
    29. [root@localhost test]# ll
    30. 总用量 0
    31. # 没有设置chattr属性之前,可以添加文件
    32. [root@localhost test]# touch a.txt
    33. [root@localhost test]# ls
    34. a.txt
    35. # 设置chattr属性之后,可以对原来的目录中有的文件进行修改,但不能在目录中
    36. # 添加或删除文件(报权限不够)
    37. [root@localhost test]# chattr +i /test
    38. [root@localhost test]# lsattr -a /test/
    39. ----i----------- /test/.
    40. ---------------- /test/..
    41. ---------------- /test/a.txt
    42. [root@localhost test]# echo asas >> /test/a.txt
    43. [root@localhost test]# touch /test/b.txt
    44. touch: 无法创建"/test/b.txt": 权限不够
    45. [root@localhost test]# touch a.txt
    46. [root@localhost test]# chattr +a a.txt
    47. # 将内容写入文件
    48. [root@localhost test]# echo 123 > a.txt
    49. -bash: a.txt: 不允许的操作
    50. # 将内容追加到文件
    51. [root@localhost test]# echo sad >> a.txt
    52. [root@localhost test]# cat a.txt
    53. asas
    54. sad
    55. [root@localhost test]# cd /
    56. #目录的a属性
    57. [root@localhost /]# mkdir swt
    58. [root@localhost /]# chattr +a swt
    59. [root@localhost /]# cd /swt
    60. [root@localhost swt]# touch a.txt
    61. [root@localhost swt]# rm a.txt
    62. rm:是否删除普通空文件 "a.txt"y
    63. rm: 无法删除"a.txt": 不允许的操作
    64. [root@localhost swt]# mv a.txt b.txt
    65. mv: 无法将"a.txt" 移动至"b.txt": 不允许的操作

    四,sudo

    作用:

    • root把本来只能由超级用户使用的命令赋予普通用户使用
    • sudo的操作对象是系统命令

    使用场景:

    • 在需要将超级管理员的某些功能权限临时下方与普通用户时可以使用使用,(尚方宝剑)

    修改sudo的配置(/etc/sudoers):

    • 修改格式:
      • root ALL=(ALL) ALL
      • 用户名 被管理主机IP=(可使用的身份) 授权命令(绝对路径)
      • %wheel ALL=(ALL) ALL
      • 组名 被管理主机IP=(可使用的身份) 授权命令 (绝对路径)
    1. # 查看或修改sudo的配置,也可以直接编辑/etc/sudoers文件
    2. [root@localhost ~]# visudo
    3. ## The COMMANDS section may have other options added to it.
    4. ##
    5. ## Allow root to run any commands anywhere
    6. root ALL=(ALL) ALL
    7. ## 增加lisen用户,可以执行服务器重启命令
    8. lisen ALL=/sbin/shutdown -r now
    9. ## 切换到到lisen用户后可以使用上面的命令,但是需要注意两个地方:1. 和sudo一起用,2. 使用命令
    10. ## 的绝对路径
    11. 如果要退出的话就ctrl+z

    注意事项:

    主要不要将vim等编辑工具配置到sudo中去,如果在sudo的配置文件中配置了vim,则普通用户在运行vim中就拥有了超级用户的身份,这是很危险的,使用普通用户有权修改任何文件。

    用户,用户组,其他人

    五,拥有者(user),拥有组(group),其他人(other)

             由于Linux是一个多人多任务的系统,因此经常会出现同一台机器同时有多个人进行操作,为了考虑每个人的隐私权以及每个人喜好的工作环境,所以文件的权限归属就至关重要。

             为了保障系统的安全性和文件的隐私性,一个文件针对不同权限的账户有着不同的权限,如下图

      如图所示,文件权限是由一个字符串所表示,其所代表的含义为

      其中,文档类型有如下表示方法:  

        d - 目录,例如上表档名为『.gconf』的那一行;
        - - 文档,例如上表档名为『install.log』那一行;
        l  - 连结档(link file);
        b - 装置文件里面的可供储存的接口设备(可随机存取装置);
        c - 装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

      权限由rwx三个字幕表示,分别表示为可读、可写、可执行,如果没有该权限,则用“ - ”表示,对于目录来说,必须有x权限,否则无法读取目录内容

      如果文件名前面有“ . ”,则表示这个文档或目录是隐藏的

    用户和用户组

      /etc/group  存储当前系统中的用户组信息

      注意:  

        1.当该组内只有一个用户,并且用户名和组名相同时,在组列表中,包含用户一列可以为空

        2.系统中root分组的组编号一定为0

        3.组号1~499为系统预留的组编号,一般是预留给系统安装的软件或者服务的编号,越早安装的软件或者服务的组编号约早。用户手动创建的用户组编号从500开始

        4.组密码占位符,无一例外,全部用x表示

      /etc/gshadow  存储当前系统中用户组的密码信息

      注意:

        1.如果组密码处为“*” “!”或者为空时候,则该组没有密码

        2.如果组管理者为空,则表示该组内所有成员都可以管理该组

      /ect/passwd  存储当前系统中所有的用户信息

      注意:

        在linux中,超级管理员root的用户编号一定为0

      /ect/shadow  存储当前系统中所有用户的密码信息

      注意:

        密码是一个单向加密过的字符串

      创建用户:

    useradd xxx    //创建一个名为xxx的用户

      该命令执行后   

        1.会在/etc/passwd文件中添加xxx用户的信息

        2.会在/etc/group文件中添加一个名为xxx的用户组信息

    passwd xxx    //为xxx用户设置密码

     useradd可以使用的参数包含

    -d    设置该用户的home目录
        例如:useradd -d /home/helloworld hello    //新建hello用户,并且将其home目录设置为/home/helloworld
    
    -u    设置其userid
        例如:useradd -u 668 hello    //新建一个hello用户,将他的id设置为668
    
    -g    设置其主组
        例如:useradd -g root hello    //新建一个hello用户,并将其假如root组
    
    -m    生成home目录的文件夹
        例如:useradd -m hello    //新建一个hello用户,并且在默认位置申城一个hello文件夹(/home/hello),并且将/etc/skel下的文件复制到该目录下
    

      修改用户信息

    usermod 参数 用户名

      该命令可以使用的参数包括

    -l    //修改新用户名
        例如:usermod -l helloworld hello    将hello用户名改为helloworld,但其home目录不改变
    
    -u    //修改用户的userid
        例如:usermod -u 888 hello    将hello的userid改为888
    
    -d    //修改用户的home目录
    
    -g    //修改用户的主用户组
    
    -L    //锁定用户,使其不能登录
    
    -U    //解除锁定
    

      删除用户

    userdel 参数 用户名

      可使用参数

    -r 删除用户的同时将其home目录也删掉  

      创建用户组  

    groupadd 组名

      修改用户组

    groupmod -n 新组名 旧组名    //修改组名
    
    groupmod -g 新组id    旧组id    修改组ID

      删除用户组

    groupdel 组名

    改变文档(目录)的所有者(所有组

      改变文档所有者 - chown命令(change owner),可使用参数 -R使得其子目录也同时修改

      改编文档所有组 - chgrp命令 (change group),可使用参数 -R使得其子目录也同时修改

      也可以使用

    chown username:group 文件名 
    来同时修改文档或目录的拥有者和所在组
    修改文档的执行权限
    chmod命令
    chmod 参数 文件名
    
    可以使用如下方法直接设置文件的权限
    1.直接设置代表权限的数字
    chmod 777(对应权限的数字) 文件名
    2.给文件添加或减去某些权限
        chmod u+w 文件名    给user用户加上w权限
        chmod g-r 文件名    将group中的r权限去掉
        chmod a+x 文件名    给user、group、other全部加上x权限           
    
  • 相关阅读:
    OpenCV-Python小应用(一):人脸识别
    NodeJS技巧:在循环中管理异步函数的执行次数
    【多线程笔记02】多线程之CyclicBarrier的介绍和使用
    Palantir大数据技术在乌克兰战场的应用
    【二叉树从无到有】
    socket转modbus协议转换应用案例介绍
    synchronized有几种用法?
    Nebula Graph介绍和SpringBoot环境连接和查询
    java 实现二维码打印并设计标题
    上海华清071班
  • 原文地址:https://blog.csdn.net/m0_74229802/article/details/136735689