零基础学红帽RHCE-学霸手搓笔记(第四章)-管理本地用户和组

第八天 管理本地用户和组

学习日期:2024.6.7 学习课程:RH124-v9x-06-管理本地用户和组

笔记:

  1. 用户和组的概念

用户账户:

用以标识用户,具有人看得懂的名称、和电脑读得懂的唯一标识UID。

用以划分不同人员、程序之间的安全边界。

每个进程(即程序)会以特定用户身份运行,每个文件会以特定用户拥有。

用户类型:

超级用户:Linux中超级用户为root(UID=0),对系统具有完全访问权限,超级用户账户用于管理系统。还可以创建ID和root一样,但是名字不一样的影子账户。

系统用户:系统用户账户用于服务进程。分配到的非特权账户,确保其文件、资源不受彼此或其他普通用户的影响。不同系统用户之间,不能交互式登录。

普通用户:处理日常工作的大多数用户。和系统用户一样,普通用户也是具有有限的访问权限,但一般可交互式登录。

用户ID(UID):

“0”:ID=0的用户,是超级用户root。

“1~200”:静态分配给系统进程的系统账户。

“200~999”:分配给不拥有系统文件的系统进程的系统账户。需要非特权UID的软件,将从池中动态分配UID。

“1000+”:分配给普通非特权用户的UID范围。

使用useradd和groupadd命令,可以在文件“/etc/login.defs”中更改默认范围设置。

用户文件:

存储位置:系统使用/etc/passwd文件存储有关本地用户的信息,使用命令:cat /etc/passwd

文件结构:“user_name: password: UID: GID: GECOS: /home/dir: shell”,从左到右一共七列,依次为1用户名、2密码字段、3用户UID、4用户GID、5用户描述GECOS、6用户家目录、7用户的登录shell。其中,第2列密码字段,已经独立出来并存储在“/etc/shadow”的独立文件中(该文件一般称为影子文件),所以显示为“X”。

用户组:

用户组是用户的集合,与用户类似,组也具备系统唯一标识对象(GID),信息保存在文件“/etc/group”中。

用户组的类别:

主要组:又叫主组、初始组。每个用户仅有一个主要组,一般与用户名相同。

次要组:又叫附加组、补充组。用户可能属于附加组,附加组中用户具备访问其他用户资源的能力。用户为附加组成员时,附加组权限能力几乎与主要组相当。

用户组的文件:

存储位置:系统使用/etc/group文件存储有关本地组的信息,使用命令:cat /etc/group

文件结构:“group_name: password: GID: user_list”,从左到右一共四列,依次为1组名、2过时的组密码字段(该字段始终为X)、3组ID(GID)、4附加组成员列表。

  1. 获取超级用户访问权限

切换到超级用户账户来管理Linux系统,并使用sudo命令授予其他用户访问权限。

超级用户:Linux中的root用户,大致相当于Windows上的Administrator用户。

权限:安装卸载软件、控制设备、管理系统都需要将权限提升到root用户。普通用户实际上也能控制大部分设备,但有一些例外,此时就需要root用户,比如普通用户能够控制USB设备,同时管理一部分文件,但对系统“固定”磁盘则无法控制。

控制风险:维护系统时建议使用普通用户,在有需要时再使用其他机制(su、sudo、PolicyKit等)临时获取超级用户权限。

Su命令:用于切换,环境变量相应变化,当前账户并未退出。普通用户切换到root用户,需要输入目标用户的密码,root用户切换到普通用户,则不需要输入密码。有三种命令:

  1. “su username”:切换到non-login shell,不切换环境变量;
  2. “su - username”:切换到login shell,会带入环境变量;
  3. “su - username -c<commands>”:以指定用户身份非交互式运行命令。

Sudo命令:用于临时提权,可配置(su不能获取交互式shell,sudo则提供了可以获取root访问权限的功能),sudo需要当前普通用户输入自己的密码,su则需要输入切换的目标用户密码。Sudo的所有操作默认记录到“/var/log/secure”日志文件中,主配置文件为“/etc/sudoers”,补充配置文件为“/etc/sudoers.d/*”。有多种命令:

  1. “sudo su -”:用于普通用户获取交互式,和正常登录一样,因为su -这个命令会忽略sudo所做的设置并从头开始设置环境;
  2. “sudo -i”:会受到sudo配置的影响,如PATH环境变量不同,可以通过编辑sudo配置文件/etc/sudoers以设置;
  3. “sudo -s”:运行一个非登录shell;
  4. “sudo -l”:当配置好sudo后,普通用户可以运行此命令查看能够运行的命令;
  5. “sudo -S”:read password from standard input以标准输入读取,使用管道输出输入时,有些它不认,要把它标准化一下,类似于grep一下,演示:

[root@servera ~]→echo ‘redhat’ | passwd root→显示New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password→echo ‘redhat’ | passwd --stdin root就可以完成changing。

获取超级用户访问权限,演示:

[root@servera ~]→exit→ssh student@servera→[student@servera ~]→id→uid=1000(student)gid=1000(student) groups=1000(student),10(wheel) context=unconfined _u:..当前用户在wheel组内→tail /var/log/secure→tail: cannot open ‘/var/log/secure’ for reading: Permission denied没有权限,看不了→sudo tail /var/log/secure输入密码,就显示出来了→exit→sudo su -即可完成提权至root,不安全→[root@servera ~]→id→uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:..

RHEL7+中的wheel组:wheel组中的成员拥有sudo能力,不在wheel组中的普通用户,若需要拥有sudo能力,就必须在sudo配置文件(/etc/sudoers或/etc/sudoers.d/*)中定义,否则没有sudo能力。

配置sudo:

(1)配置语法,“ALL=(ALL)  ALL”,第一个ALL是主机、第二个ALL是可以变换的身份、第三个ALL是可以执行的命令。

student   ALL=(ALL)   ALL:对用户、

%wheel   ALL=(ALL)   ALL:%表示组账号、

ansible    ALL=(ALL)  NOPASSWD:ALL:NOPASSWD表示普通用户运行sudo时不需要提供自己的密码

  1. 配置方法:

方法一演示:

[root@servera ~]→ll /etc/sudoers.d/回车显示90-cloud-init-users→cat /etc/sudoers.d/按Tab→补全为cat /etc/sudoers.d/90-cloud-init-users→回车显示devops ALL=(ALL) NOPASSWD:ALL→完成配置

方法二演示:

[root@servera ~]→vim /etc/sudoers→进入vim编辑器,输入100,跳转到100行处,看见“root ALL=(ALL) ALL”、“%wheel ALL=(ALL) ALL”、“# %wheel ALL=(ALL) NOPASSWD:ALL”→在“# %wheel ALL=(ALL) NOPASSWD:ALL”的下一行插入,输入o→粘贴一遍,把wheel改为student,删除#后,字体变色→%student ALL=(ALL) NOPASSWD:ALL→:wq→[root@servera ~]→exit→ssh student@servera→进入[student@servera ~]→sudo su -→回车→不用输入密码,完成设置

方法三演示:

[root@servera ~]→echo ‘student ALL=(ALL) NOPASSWD:ALL’ > /etc/suders.d/stu→cat /etc/suders.d/stu→回车显示student ALL=(ALL) NOPASSWD:ALL→完成设置

  1. sudo权限配置拓展

演示:[root@servera ~]→vim /etc/sudoers→进入vim编辑器,输入57,跳转到57行处,看见多行# Cmnd_Alias→编辑插入行Cmnd_Alias CUSTOMCMDS = /bin/su, /bin/sed禁止这两个文件运行,使用绝对路径→将%student ALL=(ALL) NOPASSWD:ALL改为%student ALL=(ALL) NOPASSWD:ALL !CUSTOMCMDS实现批量排除“/bin/su”和“/bin/sed”→:wq→visudo -c回车显示parsed ok→rm -rf /etc/sudoers.d/stu尝试删除文件stu→无反应,无法删除→[root@servera ~]→exit→ssh student@servera→进入[student@servera ~]→sudo su -→回车显示sorry, user student is not allowed to execute ‘/bin/su -’ as root on servera.lab.example.com.验证已经禁用“/bin/su”成功→还可以设置不能改密码,即批量排除后面再加一个“/bin/passwd”

注:su命令虽然可以切换用户,但是没有完整的tty,实际上是没有完整登录shell的,有些特定程序是没有加载的,而ssh登录是完整登录shell的。

  1. 管理本地用户账户

知识要点概览:

创建用户useradd<username>

修改用户usermod

用户文件的结构:“user_name: password: UID: GID: GECOS: /home/dir: shell”,从左到右一共七列,依次为1用户名、2密码字段、3用户UID(系统账户)、4用户GID(主要组)-aG附加组、5用户描述GECOS、6用户家目录、7用户的登录shell;其中,4用户GID,就是用户组ID,包含主要组、次要组的概念。-aG:-a和-G合用,-a是--append,-G是--groups GROUPS合用即附加组。

补充知识点:当一个能够登录到系统的账户没有家目录,命令界面能够登录,但是有些功能会受限,登录后会默认切换到根目录;图形界面就无法登录,因为图形界面登录或者一些程序,需要在家目录下创建一些配置,作为运行支撑。

从命令行创建用户:

useradd<username> #添加用户账户默认会引用/etc/login.defs文件的配置,如UID的范围;系统默认会使用/etc/skel/,自动把家目录的文件复制好;此外,使用/etc/default/useradd命令,可以设置默认状态下家目录的位置HOME=/home、是否需要创建邮件相关文件CREATE_MAIL_SPOOL=yes等。

演示1:[student@servera ~]→cat /etc/default/useradd→回车显示出7行默认设置→ll /var/spool/mail/→回车显示默认邮箱用户名

演示2:[student@servera ~]→tail -1 /etc/passwd→回车显示用户文件信息,从左到右一共七列

演示3:useradd --help→usermod --help→观察发现创建和修改的命令大致一样

创建用户useradd:

useradd命令演示:

[student@servera ~]→useradd --help→回车显示“-r”(自动分配一个系统账户,并且默认创建家目录,同时分配好登录shell)、“-u”(强制指定一个UID)、“g”(创建一个主要组)、“-G”(创建一个附加组)、“-s”(指定登录shell)、“-m”(创建家目录)、“-M”(不创账户)、“-p”(设置加密的密码)、“-o”(允许创建不唯一的账户)、“-k”(如果有家目录会自动复制在家目录,但是这个命令可以指定)、“-e”(expire date新账户何时到期)等→useradd stu01→回车创建失败,权限不够→sudo su -→进入[root@servera ~]→useradd stu01系统会默认创建一个账户→id stu01回车显示出默认创建的账户ID信息→grep stu01 /etc/passwd查此用户是否存在→回车显示存在→grep stu01 /etc/group查此用户组是否存在→回车显示存在→使用getent命令getent --help→回车显示passwd、group、aliases、hosts、shadow等→getent passwd stu01查用户是否存在→回车显示存在→getent group stu01→回车显示存在→ls /home/stu01/ -d→回车显示加了家目录/home/stu01→ls /home/stu01/ -dl→回车显示文件详细信息→ls /home/stu01/ -la→回车显示六行文件信息→ls -la /etc/skel/→回车显示六行文件信息,发现相同,即消息来源是skel→vim /etc/login.defs→回车可看见系统默认配置规则

创建一个普通用户stu02演示:

进入[root@servera ~]→useradd -m -s /bin/bash -G wheel,student -c “ student admins” -g stu01 stu02→回车,创建了一个保证它有家目录、指定登录shell的使用bash脚本的用户stu02,它同时在附加组wheel组和student组中,它的comment是“student管理员”(comment是value of the GECOS field),且它属于主要组stu01组→id stu02→回车显示用户信息→getent group student→回车显示student:x:1000:stu02,即student是stu02的附加组

创建一个系统账户演示1:

进入[root@servera ~]→useradd -r sys01→id sys01→ll /home→getent passwd sys01→完成自动分配默认账户信息

创建一个系统账户演示2:

进入[root@servera ~]→useradd -r -M -s /sbin/nologin sys02→id sys02→getent passwd sys02→回车显示sys02:x:985:984::/home/sys02:/sbin/nologin(不能交互式登录——nologin)

创建一个系统账户演示3:

进入[root@servera ~]→查一下有没有983:grep 983 /etc/passwd→回车显示无,未被占用,可用→useradd -u 983 -M -s /sbin/nologin sys03→回车显示警告983不在UID正常范围内1000~60000→getent passwd sys03→回车显示成功,警告不影响创建

修改用户usermod:

usermod命令演示:

[student@servera ~]→useradd --help→回车显示“-U”(已被锁的账户,解锁)、“-u”(更改UID)、“-G”(重新指定一个附加组)、“-aG”(新增一个附加组)、“-s”(重新指定登录shell)、“-m”(强制指定家目录)、“-p”(重新指定密码)、“-d”(强行修改新的目录)等

修改账户stu02信息演示:

进入[root@servera ~]→usermod -c ‘student’ -s /bin/sh -g 1000 -G wheel,student,devops即把comment从“student管理员”修改为了“student”,主要组ID改为了1000,使用附加组-G命令时,要把原附加组先罗列出来,再列上新加组→usermod -c ‘student’ -s /bin/sh -g 1000 -aG devops使用附加组-aG命令时,可以省略原附加组,只列新加组即可→id stu02→回车显示uid=1003(stu02) gid=1000(student) groups=1000(student),10(wheel),1001(devops)

修改目录演示:

进入[root@servera ~]→mkdir -p /data/home/stu02→usermod -m -d /data/home/stu01 stu01→ll /data/home/→回车显示stu01文件信息,即stu01存在→getent passwd stu01→回车显示stu01:x:1002:1002::/data/home/stu01:/bin/bash

删除用户userdel:

这个命令只能删掉创建之初,系统默认配置的用户账户文件,无法追踪到由用户自主创建的其他文件,如果该用户账户被删除,则剩下的这些其他文件,还保留用户ID信息,但该用户已不存在。

查看userdel命令演示:

[student@servera ~]→userdel --help→回车显示“-f”(强制删除)、“-r”(移除)等

删除用户stu02演示:

进入[root@servera ~]→userdel stu02→ll /home/→回车显示,还能看见stu02账户信息→useradd -u 1003 -d /home/stu02 restorestu→完成把restorestu创建在了原stu02的位置

  1. 管理本地组账户
  1. 组的创建

Groupadd命令演示:

[root@servera ~]→groupadd --help→回车显示“-r”(自动分配一个系统账户,并且默认创建家目录,同时分配好登录shell)、“-U”(组成员清单)、“g”(组的GID)、“-p”(设置加密的密码)等

创建一个用于系统管理的组演示:

[root@servera ~]→groupadd -g 5000 admin -U student,devops→getent group admin→回车显示admin:x:5000:student,devops→添加一个成员进组useradd -G admin adm001→id adm001→回车显示uid=4002(sdm001) gid=4002(adm001) groups=4002(adm001),5000(admin)

自动创建一个系统管理组演示:

[root@servera ~]→groupadd -r sysadmin→getent group sysadmin→回车显示sysadmin:x:983:→完成创建

  1. 组的修改

Groupmod命令演示:[root@servera ~]→groupmod --help→回车显示“-a”(添加组成员)、“-U”(改变组成员清单)、“n”(改组名字)、“g”(改组GID)、“-p”(设置加密的密码)等

修改sysadmin组信息演示:[root@servera ~]→groupmod→回车显示所有组清单,选一个刚刚创建的组sysadmin,并且编一个新名字(新名字不在所有组清单中)→groupmod sysadmin -n sysadm→getent group sysadm→回车显示sysadm:x:983:→getent group sysadmin→回车无显示,说明改名成功

(3)组的删除,前提是组里无成员把该组作为主要组:

删除组演示1:[root@servera ~]→groupdel sysadm→删除成功,因为sysadm组中未创建过用户

删除组演示2:[root@servera ~]→查一下tail /etc/group→回车显示现有组的ID信息,选一个有组成员的组admin:x:5000:student,devops,admin001→groupdel admin→tail /etc/group→回车显示现有组中,已经没有admin组了→说明删除成功,因为其组成员student,devops,admin001均未把它设为主要组,仅作为附加组,所以可以删除

删除组演示3:[root@servera ~]→新建一个组成员useradd admin01→tail -3 /etc/group→回车显示admin01:x:4003:→groupdel admin01→回车显示无法删除组,原因是该组是用户admin01的主要组

  1. 组成员管理

Groupmems命令格式是:groupmems [options] [action],其中,[options]是命令选项,[action]是动作,即先指定要修改的组名如“-g admins”,再指定动作如“-l”。

常用选项演示:[root@servera ~]→groupmems --help→回车显示大标题“Options: -g(改变组名)等和大标题Actions: -l(列出组成员)、-a(添加组成员)、-d(删除组成员)等”→创建一个新的组groupadd -g 5000 admins→groupmems -g admins -l→回车无反应,新建组中无组成员→groupmems -g admins -a student→groupmems -g admins -l→回车显示student→tail /etc/group→回车显示admins:x:5000:student→groupmems -g admins -a devops→tail /etc/group→回车显示admins:x:5000:student,devops→或者直接在vim中添加组成员→vim /etc/group→按Tab按Enter进入vim编辑器,翻到最下admins:x:5000:student,devops→按shift+a,在命令行后添加新的组成员stu01→:wq→groupmems -g admins -l→回车显示student devops stu01→groupmems -g admins -d stu01删除stu01→groupmems -g admins -l→回车显示student devops,已无stu01,删除成功

(5)Gpasswd命令

Gpasswd命令格式:gpasswd [options] GROUP,即将用户添加到组,其中,[options]是命令选项,GROUP的意思是直接指定某个组。

Gpasswd命令演示:[root@servera ~]→gpasswd --help→回车显示“-a”(添加组成员)、-d(删除组成员)、“-r”(删除组密码)、“-M”(设置组成员清单)、“-A”(设置具有管理组权限的管理者清单)等

  1. 管理用户密码

早期Linux中加密密码一度存放于/etc/passwd,直到对加密密码的攻击变得常见,才转移到独立文件/etc/shadow,/etc/shadow仅root用户可读。

/etc/shadow文件结构,一共九列,依次为:name: password: lastchange: minage: maxage: warning: inactive: expire: blank

name用户名、

password加密密码、

lastchange上一次更改时间(距离1970.01.01天数)、

minage密码最小修改频率(最小生命周期,0表示可以随意修改)、

maxage密码有效天数、

warning密码过期前多少天警告、

inactive账号失效天数(即到期后还能活几天)、

expire账户有效期(以1970.01.01开始计算)、

blank保留字段

/etc/shadow中用户密码加密后的格式,是由三个$符号,分成三段:

$6$Jf/FY4irXgGvthWn$CD2zREJRcoG6W1.nfAyb...output omitted...

第一个$,表示哈希算法(是一种唯一的单向加密算法),符号之后的数字,可为1、5、6,其中,数字1表示MD5哈希、数字5表示SHA-256、数字6表示SHA-512

命令查看演示:man - 3 crypt

第二个$后的字符串,是加密种子(salt),是随机生成的,

第三个$后的字符串,是算法+加密种子,最终算出来的加密密码

生成一个加密的哈希值演示:[root@servera ~]→openssl passwd --help→openssl passwd -6 redhat→回车,随机生成一个密码,从第一个$开始把一长串密码复制到/etc/shadow中→openssl passwd -6 -salt 123 redhat加盐,可限定多个账户都是同一个密码→openssl passwd -6 redhat不加盐,每一次随机生成一个不同的密码,复制该密码→新建一个用户useradd -p ‘粘贴密码’ stu10→tail -1 /etc/shadow→回车显示创建成功→su - student→su - stu10→回车显示Password:→输入redhat,完成登录

  1. chage命令使用(仅针对现有账户设置)

演示:[root@servera ~]→ll /home/→回车显示文件名(也即用户名)→chage --help→回车显示命令格式:chage [options] LOGIN;命令选项:“-d”即最后登录日期、“-l”即列出密码相关日期信息、“-m”最小时间、“-M”最大时间、“-W”报警时间、“-I”缓冲时间、“-E”用户账户有效期、“-L”用户锁定等→chage -m 7 -M 90 -W 15 -I 7 stu01→chage -E ‘025-01-10’ stu01→usermod -L stu01用户锁定,不能修改→chage -l stu01→回车显示账户信息,但是不能更改

  1. login.defs针对默认账户设置

编辑/etc/login.defs以设置密码策略,仅对后续创建的用户生效,对老用户无用。

演示:[root@servera ~]→vim /etc/login.defs→进入vim编辑器第122行→以前的版本中,还可以设置密码长度,现在只能修改设置三个参数:“PASS_MAX_DAYS 99999”、“PASS_MIN_DAYS 0”、“PASS_WARN_AGE 7”→改为“PASS_MAX_DAYS 90”、“PASS_MIN_DAYS 5”→:wq→useradd test01→chage -l test01→回车显示该新建用户的指标已经改为90、5

  1. passwd命令也可以实现chage的功能

总结:

/etc/passwd          用户存储位置

/etc/shadow          用户密码存储位置

/etc/group           组存储位置

/etc/gshadow         组密码存储位置

/etc/login.defs        最重要的功能是针对新建用户,配置密码有效期

/etc/skel/            用户家目录下bash相关配置文件来源于此

/etc/default/useradd   添加用户时的默认配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sompure_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值