• RHCE8 资料整理(二)


    在这里插入图片描述

    第二篇 用户及权限管理

    第8章 用户管理

    8.1 基本概念

    详细参考: https://blog.csdn.net/u010230019/article/details/132224998

    用户信息:/etc/passwd
    密码信息:/etc/shadow
    群组信息:/etc/group
    群组密码:/etc/gshadow

    用户信息也可以通过getent获取

    [root@server yurq]# getent shadow yurq root
    yurq:$6$kKNzhuprgmIZd5Ma$L5mUUIwFM8gUDztJOfvWWGyviUpvWSS1X6q/L5Ss5h5tOyHx/5wl9MLBLdVsYtZygeZHEOFeHdIMI.eLYYuWB.:19608:0:99999:7:::
    root:$6$rgRTLqdztP39Kgqd$WGy53xGZ2gg1Fr8BalJbSibzzSiI5aGk2ighMuiyP1Ofn1ZW20ZdzHkfx0qo8b3yDHe4zUmJkYfeSiIxWhtxx/::0:99999:7:::
    
    • 1
    • 2
    • 3

    判断用户是否存在

    [root@server yurq]# id yurq
    uid=1000(yurq) gid=1000(yurq) groups=1000(yurq),10(wheel)
    
    • 1
    • 2

    8.2 管理用户

    8.2.1 创建用户
    useradd [options] username
    -d
    -M
    -G
    -g
    -s
    -u
    -m
    -c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    passwd username		#隐式
    echo 'password'|passwd --stdin username	#显式
    -l	#锁定
    -u	#解锁
    -S	#显示信息
    -d	#清除密码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    锁定的账号登录会提示

    [alex@server ~]$ su - yurq
    Password:
    su: Authentication failure
    
    • 1
    • 2
    • 3
    8.2.2 修改用户属性
    usermod [options] username
    -c
    -s
    -g
    -u
    -d
    -L#锁定用户
    -U#解锁用户
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    被锁定的账号同样不能登录,提示认证失败

    [root@server yurq]# passwd -l yurq
    Locking password for user yurq.
    passwd: Success
    [root@server yurq]# passwd -S yurq
    yurq LK 2023-09-08 0 99999 7 -1 (Password locked.)
    [root@server yurq]# passwd -u yurq
    Unlocking password for user yurq.
    passwd: Success
    [root@server yurq]# passwd -S yurq
    yurq PS 2023-09-08 0 99999 7 -1 (Password set, SHA512 crypt.)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    锁定前后

    删除用户

    userdel [options] username
    -f #强制,即使登录
    -r #删除家目录
    
    • 1
    • 2
    • 3

    组管理

    groupadd groupname
    groupdel groupname
    groups groupname			#查看组信息
    gpasswd -a username groupname	#添加用户到组
    gpasswd -d username groupname	#从组中删除用户
    
    • 1
    • 2
    • 3
    • 4
    • 5

    8.3 用户的密码策略

    详细参考 https://blog.csdn.net/u010230019/article/details/132224998

    [root@study ~]# chage [-ldEImMW] 账号名
    选项与参数:
    -l :列出该账号的详细密码参数;
    -d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式 YYYY-MM-DD,(0为下次登录需修改,常用)
    -E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD,(-1 永不过期,1 立即过期)
    -I :后面接天数,修改 shadow 第七字段(密码失效日期)
    -m :后面接天数,修改 shadow 第四字段(密码最短保留天数)
    -M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)
    -W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    8.4 用户授权

    普通用户的权限往往不够,例如有些命令只能root执行,所以可以让root对普通用户进行授权
    详细参考:https://blog.csdn.net/u010230019/article/details/132269498

    普通用户可以通过root添加授权,来实现root的权限,并且不需要知道root密码。有两种方式:

    1. 修改/etc/sudoers
    2. 在/etc/sudoers.d/目录中添加配置文件,文件名称建议以用户名命名

    这两种方式添加的内容格式一致,格式:

    user1	主机名A=(user2)  命令1,命令2,命令3...
    
    • 1

    这里授权表明用户user1在主机A拥有user2的执行命令1,命令2,命令3的权限

    套用到root,则为

    yurq	server.rhce.cc=(root)	/bin/mount
    
    • 1

    此时yurq就拥有root执行mount的权限,这里需要指明命令的绝对路径

    此时yurq在server.rhce.cc可以执行mount命令,但是执行的时候需要通过sudo命令,例如

    sudo mount /dev/ /mnt/sda
    
    • 1

    但此时,仍需要输入yurq的密码,如下修改则免除密码

    yurq	server.rhce.cc=(root)	NOPASSD:	/bin/mount
    
    • 1

    如果需要赋权的指令较多,总不能加一堆吧,可通过ALL这个关键字实现,这个ALL可以替代主机名,用户和指令

    yurq    ALL=(ALL) NOPASSWD:    ALL
    
    • 1

    yurq 不论来自哪部主机登入,他可以变换身份成为任何人,且可以进行系统上面的任何指令

    想管理一个赋权账号,就需要有时间限制,在/etc/sudoers中,添加

    Defaults	timestamp_timeout=N
    
    • 1

    可以设置密码保留时间为N分钟(默认为5分钟),此时配置文件中不能有NOPASSD:字段

    用户可以通过sudo -k可以立即清除保留的密码
    用户可以通过sudo -i切换到root用户,如果配置了NOPASSD:可以无密码直接切换

    8.5 重置root密码

    1. 在内核引导界面,通过上下键选择第一行,按e键进入grub编辑界面,编辑grub菜单
      在这里插入图片描述
    2. 将linux行的ro改为rw,行尾加init=/bin/bash,按ctrl+x进行启动
      在这里插入图片描述
    3. 这样我们进入bash
      在这里插入图片描述
    4. 挂载根目录
      mount -o remount, rw /
      
      • 1
    5. 接着在此处可以直接重置root密码,并且不需要知道原密码
      在这里插入图片描述
    6. 更改selinux
      vi etc/selinux/config #把 enforcing 改为 disable
      
      • 1
    7. 重启该虚拟机就可以使用新密码登录root了
      exec /sbin/reboot
      
      • 1
      命令重启不好用,可以直接手动重启

    第9章 权限管理

    9.1 所有者和所属组

    所有者和所属组又称为属主和属组,这里一般指文件或目录的权限
    详细参考 https://blog.csdn.net/u010230019/article/details/132208697

    改变属主和属组命令为chown,格式

    chown [OPTION]... [OWNER][:[GROUP]] FILE...
    -R #递归,通常针对目录
    
    • 1
    • 2

    这里指的一提的是属主和属组之间的关联符号,官方默认是:,但也可以用.,例如

    chown user.group file 等价于chown user:group file
    
    • 1

    修改群组有单独的命令chgrp,格式

    chgrp user file...
    
    • 1

    9.2 查看及修改权限

    一般都是通过ls -lll查看,输入alias可以看到llls -l的别名

    [root@server ~]# alias
    ...
    alias ll='ls -l --color=auto'
    
    • 1
    • 2
    • 3

    关于ls -l 查看的文件权限一共九位,分三组。另外第10位.,也需要注意其含义,这里不展开写了,参考
    https://blog.csdn.net/u010230019/article/details/132208697

    修改权限一般使用chmod,格式

    chmod [OPTION]... MODE[,MODE]... FILE...
    chmod [OPTION]... OCTAL-MODE FILE...
    -R #递归
    
    • 1
    • 2
    • 3

    这里对权限的修改,格式还是比较多的

    字符权限

    对应所属赋值符类型含义
    a+,-,=[r|w|x]对所有所属(属主,属组,其他人)进行操作
    u+,-,=[r|w|x]对属主进行操作
    g+,-,=[r|w|x]对属组进行操作
    o+,-,=[r|w|x]对其他人进行操作

    9.3 数字权限

    八进制数字权限
    可对[a,u,g,o]直接使用=进行数字赋权

    r	-- 4	#读
    w -- 2		#写
    x -- 1		#执行
    --- -- 0	#无任何权限,我们可以看到/etc/shadow每组都是这个权限
    
    • 1
    • 2
    • 3
    • 4

    9.4 默认权限

    目录的默认权限是755,文件的默认权限是644,这些权限是根据umask计算获得

    [root@server ~]# umask
    0022
    [root@server ~]# umask -S
    u=rwx,g=rx,o=rx
    
    • 1
    • 2
    • 3
    • 4

    修改umask可以直接赋值,或者修改/etc/bashrc

    umask 002
    
    • 1

    umask 过滤计算结论:

    1. 目录默认权限=777 - umask
    2. 文件默认权限=666 - (umask每个奇数 -1),如umask=333,则文件默认权限位444

    9.5 特殊权限

    这里主要说suid,sgid,sbit,详细参考:https://blog.csdn.net/u010230019/article/details/132171439

    1. SUID:当 s 这个标志出现在文件拥有者的 x 权限上时,那么:

    SUID 权限仅对二进制程序(binary program)有效;
    执行者对于该程序需要具有 x 的可执行权限;
    本权限仅在执行该程序的过程中有效 (run-time);
    执行者将在执行该程序过程中具有拥有者 (owner) 的权限。

    修改方法:

    chmod u[+|-]s binary_program
    
    • 1

    这个有什么用呢?举个例子,我们可以修改自己的登录密码,却不用联系管理员,因为/bin/passwd就设置了SUID

    	[root@server yurq]# ll /bin/passwd
    	-rwsr-xr-x. 1 root root 32648 Aug 10  2021 /bin/passwd
    
    • 1
    • 2

    再举个例子,默认文件权限644,其他人是否可以修改文件内容呢?理论上不行,但是可以如下操作:

    [root@server opt]# touch testfile
    [root@server opt]# ll testfile
    -rw-r--r-- 1 root root 10 Oct 19 22:14 testfile
    [root@server opt]# chmod u+s /bin/vim
    [root@server opt]# ll /bin/vim
    -rwsr-xr-x. 1 root root 4025616 Feb 24  2022 /bin/vim
    [root@server opt]# su - yurq
    [yurq@server ~]$ vim /opt/testfile
    [yurq@server ~]$ cat /opt/testfile
    testfile1
    [yurq@server ~]$ exit
    logout
    [root@server opt]# chmod u-s /bin/vim
    [root@server opt]# su - yurq
    [yurq@server ~]$ vim /opt/testfile
    ...
    "/opt/testfile"
    "/opt/testfile" E212: Can't open file for writing
    Press ENTER or type command to continue
    [yurq@server ~]$ exit
    logout
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    1. SGID:当 s 标志在文件/目录 群组的 x 项目上时,
      那么如果是文件的话:

    SGID 对二进制程序有用;
    程序执行者对于该程序来说,需具备 x 的权限;
    执行者在执行的过程中将会获得该程序群组的支持!

    参考SUID的示例,这个很好理解

    如果是目录的话:

    用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录;
    用户在此目录下的有效群组(effective group)将会变成该目录的群组;
    用途:若用户在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。

    修改方法:

    chmod g[+|-]s binary_program
    
    • 1
    1. SBIT:这个 Sticky Bit, SBIT 目前只针对目录有效,对于文件已经没有效果了。SBIT 对于目录的作用是:

    当用户对于此目录具有 w, x 权限,亦即具有写入的权限时;
    当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件

    即如果某个目录o位置上设置t时,那么此目录中的文件除所有者和root外,其他用户即使对此文件具有所有权限,也无法删除此文件

    可以查看/tmp,也不难理解

    [root@server opt]# ll -d /tmp/
    drwxrwxrwt. 21 root root 4096 Oct 19 22:35 /tmp/
    
    • 1
    • 2

    验证:
    以 root 登入系统,并且进入 /tmp 当中;
    touch test,并且更改 test 权限成为 777 ;
    以一般使用者登入,并进入 /tmp;
    尝试删除 test 这个文件!

    修改方法:

    chmod o[+|-]s binary_program
    
    • 1

    9.6 隐藏权限

    系统中还存在一些隐藏权限,这些权限的设置对root也是生效的。查看命令lsattr,格式:

    lsattr [ -RVadlpv ] [ files...  ]
    -a :将隐藏文件的属性也秀出来;
    -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
    -R :连同子目录的数据也一并列出来!
    
    • 1
    • 2
    • 3
    • 4

    修改命令chattr,格式:

    chattr [+-=][ASacdistu] 文件或目录名称
    
    选项与参数:
    + :增加某一个特殊参数,其他原本存在参数则不动。
    - :移除某一个特殊参数,其他原本存在参数则不动。
    = :设定一定,且仅有后面接的参数
    
    a :当设定 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有 root 才能设定这属性
    c :这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
     		但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
    i :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、设定连结也无法写入或新增数据!』
     		对于系统安全性有相当大的帮助!只有 root 能设定此属性
    s :当文件设定了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,
     		所以如果误删了,完全无法救回来了喔!
    u :与 s 相反的,当使用 u 来配置文件案时,如果该文件被删除了,则数据内容其实还存在磁盘中,
     		可以使用来救援该文件喔!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    [root@server yurq]# ll 123
    -rw-rw-rw- 1 root root 0 Oct 19 21:51 123
    [root@server yurq]# chattr +i 123
    [root@server yurq]# su - yurq
    [yurq@server ~]$ echo 123>123
    -bash: 123: Operation not permitted
    [yurq@server ~]$ exit
    logout
    [root@server yurq]# chattr -i 123
    [root@server yurq]# su - yurq
    [yurq@server ~]$ echo 1234 >123
    [yurq@server ~]$ cat 123
    1234
    [yurq@server ~]$ lsattr 123
    ---------------------- 123
    
    [root@server yurq]# chattr +a 123
    [root@server yurq]# lsattr 123
    -----a---------------- 123
    [root@server yurq]# su - yurq
    [yurq@server ~]$ echo 12345 > 123
    -bash: 123: Operation not permitted
    [yurq@server ~]$ echo 12345 >> 123
    [yurq@server ~]$ cat 123
    1234
    12345
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    第10章 ACL权限

    详细可查看https://blog.csdn.net/u010230019/article/details/132269498

    10.1 ACL介绍及基本用法

    ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的read,write,execute 权限之外的细部权限设定。ACL 可以针对单一使用者,单一文件或目录来进行r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。

    说白了,就是直接对用户进行权限设置,而非依托于属主,属组和其他

    查看ACL使用getfacl,格式

    getfacl [options] file
    -c #去除以#行首的行
    
    • 1
    • 2

    设置ACL使用setfacl,格式

    setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名
    选项与参数:
    -m :设定后续的 acl 参数给‘文件’使用,不可与 -x 合用;
    -x :删除后续的 acl 参数,不可与 -m 合用;
    -b :移除『所有的』 ACL 设定参数;
    -k :移除『预设的』 ACL 参数,关于所谓的『预设』参数于后续范例中介绍;
    -R :递归设定 acl ,亦即包括次目录都会被设定起来;
    -d :设定『预设 acl参数』的意思!只对‘目录’有效,在该目录新建的数据会引用此默认值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 用户设定规范:『 u:[使用者账号列表]:[rwx] 』
      比如说:
    [root@server yurq]# getfacl yurq -c
    user::rw-
    group::r--
    other::r--
    
    [root@server yurq]# setfacl -m u:alex:rwx yurq
    [root@server yurq]# getfacl yurq -c
    user::rw-
    user:alex:rwx
    group::r--
    mask::rwx
    other::r--
    
    [root@server yurq]# su - alex
    [alex@server ~]$ echo 123 > /home/yurq/yurq
    -bash: /home/yurq/yurq: Permission denied
    [alex@server ~]$ ll /home/yurq/
    ls: cannot open directory '/home/yurq/': Permission denied
    [alex@server ~]$ exit
    logout
    [root@server yurq]# ll /home/yurq/ -d
    drwx------. 15 yurq yurq 4096 Oct 20 17:39 /home/yurq/
    [root@server yurq]# chmod o+rwx /home/yurq/
    [root@server yurq]# su - alex
    [alex@server ~]$ echo 123 > /home/yurq/yurq
    [alex@server ~]$ ll /home/yurq/yurq
    -rw-rwxr--+ 1 root root 4 Oct 20 17:54 /home/yurq/yurq
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    如果使用setfacl -m u::rwx file,则为所有用户加rwx

    • 特定的单一群组的权限设定:『 g:群组名:权限 』
      这个参考“用户”的设定即可,例如
    setfacl -m g:mygroup1:rx acl_test1
    
    • 1

    10.2 ACL的mask权限

    • 针对有效权限设定:『 m:权限 』,即针对有效权限 mask 的设定方式
    [root@study ~]# setfacl -m m:r acl_test1
    [root@study ~]# getfacl acl_test1
    # file: acl_test1
    # owner: root
    # group: root
    user::rwx
    user:vbird1:r-x 		#effective:r-- 	<==vbird1+mask 均存在者,仅有 r 而已,x 不会生效
    group::r--
    group:mygroup1:r-x 	#effective:r--
    mask::r--
    other::r--
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    实际用户权限会和有效权限mask取余

    10.3 设置默认权限

    • 使用默认权限设定目录未来文件的 ACL 权限继承『 d:[u|g]:[user|group]:权限 』,针对预设权限的设定方式:
    [root@study ~]# setfacl -m d:u:myuser1:rx /srv/projecta
    [root@study ~]# getfacl /srv/projecta
    # file: srv/projecta
    # owner: root
    # group: projecta
    # flags: -suser::rwx
    user:myuser1:r-x
    group::rwx
    mask::rwx
    other::---
    default:user::rwx
    default:user:myuser1:r-x
    default:group::rwx
    default:mask::rwx
    default:other::---
    
    [root@study ~]# cd /srv/projecta
    [root@study projecta]# touch zzz1
    [root@study projecta]# mkdir zzz2
    [root@study projecta]# ll -d zzz*
    -rw-rw----+ 1 root projecta 0 Jul 21 17:50 zzz1
    drwxrws---+ 2 root projecta 6 Jul 21 17:51 zzz2
    # 看吧!确实有继承喔!然后我们使用 getfacl 再次确认看看!
    [root@study projecta]# getfacl zzz2
    # file: zzz2
    # owner: root
    # group: projecta
    # flags: -suser::rwx
    user:myuser1:r-x
    group::rwx
    mask::rwx
    other::---
    default:user::rwx
    default:user:myuser1:r-x
    default:group::rwx
    default:mask::rwx
    default:other::---
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    透过这个『针对目录来设定的默认 ACL 权限设定值』的项目,我们可以让这些属性继承到次目录底下呢! 非常方便啊!那如果想要让 ACL 的属性全部消失又要如何处理?透过『 setfacl -b 檔名 』即可啦!

    权限内容远远不止介绍中的内容,可参考
    https://blog.csdn.net/u010230019/article/details/132208697

  • 相关阅读:
    智慧家庭中的人体动作识别研究综述
    RabbitMQ相关问题
    从源码看Spring如何解决循环依赖的脉络?鸡生蛋与蛋生鸡的问题!
    LeetCode每日一题(1717. Maximum Score From Removing Substrings)
    如何在 Debian/Ubuntu/Kali 上重新打包 已安装的 软件
    Linux——基础指令
    vue实战入门后台篇五:springboot+mybatis实现网站后台-操作日志功能实现
    MATLAB变量
    springboot在idea中可以访问jsp页面打包之后访问不了
    mac苹果电脑需要安装杀毒软件吗?
  • 原文地址:https://blog.csdn.net/u010230019/article/details/133946315