账户和组管理
账户和组管理
1.账户和工作组的分类
1.1 用户分类
- 超级用户——账户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。
- 系统账户——是Linux系统正常工作所必需的账户,主要为了满足相应的系统进程对文件属主的要求而建立的,如:bin、daemon、adm、sshd等,注意:系统账户不能登录。
- 普通用户——是为了让使用者能够使用Linux系统资源而建立的,大多数用户属于此类。
1.2 工作组分类
- 基本组(私有组):新建立账户时,若没有指定账户所属的工作组,会建立和账户名相同的组
- 扩展组(公有组):可以容纳多个用户,组中的账户都具有组所拥有的权利。
1.3 账户和工作组的配置文件
- 账户名、密码、工作组信息和工作组密码存储在以下配置文件中
文件功能 | 文件名称 |
---|---|
用户账户文件 | /etc/passwd |
用户密码文件 | /etc/shadow |
用户创建和密码设置的默认规则文件 | /etc/login.defs |
用户骨文件模板目录 | /etx/skel |
工作组账号文件 | /etc/group |
工作组密码文件 | /etc/gshadow |
-
用户账号文件/etc/passwd
- /etc/passwd 是一个文本文件,用于定义系统的账号,由于所有账户都对passwd有读权限,所以该文件中只定义用户账号,而不保存口令。
[root@localhost Desktop]# ll /etc/passwd -rw-r--r--. 1 root root 2237 Oct 26 19:15 /etc/passwd [root@localhost Desktop]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash
-
/etc/passwd文件中字段说明
- 由7个字段组成,字段之间用“:”分隔,意义:账号名:密码:UID:GID:个人资料:主目录:Shell
- 账号名:用户登录Linux系统时使用的名称。
- 密码:以前是以加密格式保存密码的位置,现在密码保存在/etc/shadow文件中,此处只是密
码占位符“x”或“*”。若为“x”,说明密码经过了shadow的保护。
- UID:账户的ID值,是一个数字标识,相当于账户的“身份证编号”,具有唯一性
- root账户UID——0
- 系统账户的UID——1~999
- 普通账户的UID——≥1000
- 注意:普通账户从1000开始编号,连续编号,即使系统管理员某些账户号码未使用,普通账户也不可使用
- GID:基本组的ID值,用来区分不同的工作组,相同的组具有相同的GID。
- 个人资料:注释信息,可以记录账户的完整姓名、地址、办公室电话、家庭电话等个人信息。
- 家目录:类似Windows 的个人目录,通常是/home/账户名
- Shell:定义用户登录后激活的Shell,默认是Bash Shell
-
id命令
-
作用:查看账户的UID、GID等信息
-
格式:
id 账户名
-
例:
[root@localhost Desktop]# id root uid=0(root) gid=0(root) groups=0(root)
-
用户创建和密码设置的默认规则文件/etc/login.defs
-
用户创建相关:
-
MAIL_DIR
:指定新用户的邮件目录位置。 -
PASS_MAX_DAYS
:设置密码的最长有效天数。 -
PASS_MIN_DAYS
:设置密码的最短有效天数,防止用户频繁更改密码。 -
PASS_MIN_LEN
:设置密码的最小长度。 -
UID_MIN
和UID_MAX
:定义用户 ID 的范围。 -
GID_MIN
和GID_MAX
:定义用户组 ID 的范围。
-
-
密码设置相关:
ENCRYPT_METHOD
:指定密码加密方法。
-
-
用户骨文件模板目录/etc/skel
-
作用
当创建一个新用户时,系统会自动将
/etc/skel
目录中的所有文件和子目录复制到新用户的主目录中。这样做的目的是为新用户提供一些默认的配置文件和环境设置,以便新用户在登录后能够立即开始使用系统,而无需手动创建一些基本的文件和目录。 -
常见的文件和目录
[root@localhost Desktop]# ls -a /etc/skel . .. .bash_logout .bash_profile .bashrc .mozilla .:表示当前目录本身。 ..:表示当前目录的父目录。 .bash_logout:当用户退出 Bash 会话时执行的脚本。 .bash_profile:在用户登录时执行的脚本,用于设置环境变量等。 .bashrc:Bash shell 的配置文件,可设置命令提示符、别名等。 .mozilla:可能是与 Mozilla 相关的配置目录(如果系统中有安装相关软件)。
-
管理和定制
- 系统管理员可以根据需要修改
/etc/skel
目录中的文件和目录,以满足特定的系统要求或组织标准。例如,可以添加特定的环境变量设置、安装特定的应用程序并提供其配置文件等。 - 当对
/etc/skel
目录进行修改后,新创建的用户将自动获得这些修改后的配置。这使得系统管理员能够轻松地为大量新用户提供一致的初始环境。
-
-
用户密码文件/etc/shadow
-
/etc/shadow存储密码加密后的密文,又称为“影子文件”,该文件为了保证了账户密码的安全性只有
root 账户拥有读权限,注意:若该文件权限发生变化,需要留心恶意攻击
[root@localhost Desktop]# ll /etc/shadow ----------. 1 root root 1340 Oct 27 17:27 /etc/shadow [root@localhost Desktop]# head -1 /etc/shadow root:$6$px.DkOT/y976y8k9$GOfglcENwValUFxReu/UDDssWQL2r7ziK7NPm7ASf6cDHcoPMgg0Ffv951Vy3BuvTEtrbNGHNBBB89o6y88fv1::0:99999:7:::
-
/etc/shadow文件中的每行9个字段的含义为:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
-
-
工作组帐号文件/etc/group
-
/etc/group文件存储每个组工作组信息
[root@localhost Desktop]# ll /etc/group -rw-r--r--. 1 root root 907 Oct 26 19:15 /etc/group [root@localhost Desktop]# head -1 /etc/group root:x:0:
-
字段说明:
字段 说明 Groupname 组的名字 Passwd 组的加密口令 GID 是系统区分不同组的ID,在/etc/passwd域中的GID字段是用这个数来指定账户的基本组 Userlist 是用","分开的账户名,列出的成员以该组为附加组
-
2. 用户管理
2.1 添加新用户
-
格式:
useradd -参数 账户名
-
参数:
参数 解释 -c 注释信息:设置相关的说明信息,如,:真实姓名、邮箱地址等。 -d 目录:设定账户的家目录(默认为/home/用户名)。 -e YYYY-MM-DD:设置用户的失效日期,此日期后将不能使用该账号。 -f 天数:指定密码到期后多少天账号被禁用,若指定为0,则表示账号到期后被立即禁用;若指定 为-1,则表
示账号过期后不被禁用(即密码永不过期)。-g 组名或GID号:为账户指定所属的基本组,该组在指定时必须已存在。 -G 组名或GID号列表:为账户指定所属的扩展组,各组在指定时已存在,附加组可以有多个,组之间用“,”分隔。 -M 不创建账户家目录。 -N 不创建与账户名同名的基本组。 -p 密码:指定账户的登录密码。 -s shell名:指定账户登录后使用的Shell,默认是bash。 -u 用户号:设置账号的UID,默认是已有账户的最大UID加1。如果同时有-o选项,则可以重复使用其他用户的
标识号。 -
例:
-
新建用户test1,并查看对应的配置文件和家目录
[root@localhost Desktop]# useradd test1 [root@localhost Desktop]# tail -1 /etc/passwd test1:x:2003:2005::/home/hhh:/bin/bash [root@localhost Desktop]# tail -1 /etc/shadow test1:!!:20027:0:99999:7::: # !!表示密码未设置 [root@localhost Desktop]# ls -A /home/test1 .bash_logout .bash_profile .bashrc .mozilla [root@localhost Desktop]# ls -ld /home/test1 drwx------. 3 hhh hhh 78 Oct 31 14:59 /home/hhh
-
新建账户test2,指定UID为2001、登录Shell为/bin/bash,账号永不过期
[root@localhost Desktop]# useradd -u 2001 -s /bin/bash -e -1 test2
-
新建用于访问FTP的test3账户,禁止其登录且不创建家目录(系统用户)
[root@localhost Desktop]# useradd -M -s /sbin/nologin test3
-
新建账户test4,UID=3001, 工作组=test2 , 家目录=/test
[root@localhost Desktop]# useradd -u 3001 -g test2 -d /test test4
-
2.2 修改账户信息
-
格式:
usermod -参数 账户名
-
参数:常用参数 -c,-d,-m,-g,-G,-s,-u 等,意义与useradd命令中的参数相同
参数 解释 -l 新账户名:更改账户的名称,必须在该用户未登录的情况下才能使用 -L 锁定(暂停)用户账户,使其不能登录使用 -U 解锁用户账户 -
例:
-
将用户test1的名称修改为TEST1,并暂停使用该账号
[root@localhost Desktop]# usermod test1 -l TEST1 -L
-
将上例账户test4的家目录移至/home/test4目录下
[root@localhost Desktop]# ls /home [root@localhost Desktop]# mkdir /home/test4 [root@localhost Desktop]# usermod test4 -d /home/test4 [root@localhost Desktop]# tail -1 /etc/passwd test4:x:3001:1001::/home/test4:/bin/bash
-
2.3 账号设置密码
-
原则:Linux的账户必须设置密码后,才能登录系统
-
格式:
passwd - 参数 账户名
-
参数:
参数 解释 -d 清空指定用户的口令,与未设置口令的账户不同,未设置口令的账户无法登录系统,而口令为空的账户可以。 -e 使用户的账号密码立即过期,强迫用户下次登录时必须修改口令。 -i 口令过期后多少天停用账户。 -l 锁定(停用)用户账户。 -n 指定口令的最短存活期。 -x 指定密码的最长使用期限。 -u 解锁用户账户。 -
例:
-
例1:设置root账户密码
[root@localhost Desktop]# passwd root 更改用户 root 的密码 。 新的密码: 无效的密码: 密码少于 8 个字符 重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。
-
例2:使用户的账号密码立即过期,强迫用户下次登录时必须修改口令。
[root@localhost Desktop]# passwd -e test1
-
例3:锁定账户test2,尝试登录
[root@localhost Desktop]# passwd -l test2
-
-
注意:
-
密码不能为空
-
密码不要写成回文
-
可以使用以下命令设置密码
echo 密码 | passwd --stdin 用户名 echo 密码 | passwd --stdin 用户名 > /dev/null # 无信息提示
-
只有 root 用户才能指定用户名
[root@server ~]# useradd test5 [root@server ~]# passwd test5 更改用户 test5 的密码 。 新的密码: 无效的密码: 密码少于 8 个字符 重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。 [root@server ~]# su test5 [test5@server root]$ passwd test5 passwd:只有 root 户才能指定用户名。
-
2.4 删除账户
-
格式:
userdel 账户名
-
参数:
- -r:在删除该账户的同时,一并删除该账户对应的家目录
-
例:
[root@localhost Desktop]# userdel -r test1 [root@localhost Desktop]# userdel -r test2 [root@localhost Desktop]# userdel -r test3 [root@localhost Desktop]# userdel -r test4
2.5 账户切换
-
格式:
su 账户名
-
su和su - 命令区别:
- 区别:加载的配置文件不一样
- su 切换方式加载的文件: ~/.bashrc,/etc/bashrc
- su - 切换方式加载的文件: /etc/bashrc,/etc/profile,/.bashrc,/.bash_profile
- 注意:su - 相当于重新建立环境,若全局变量需要继续使用则不能使用su - 命令
-
注意:
- 从root用户切换到任何用户不需要密码验证,而从普通用户到root或其他普通用户均需要输入目标用户的密码且验证成功后才可切换。
2.6 控制用户对系统命令的使用权限–sudo
-
作用:
-
使用 sudo 命令可以提高普通用户的操作权限,使用前需要root进行配置
-
例:
[root@server ~]# su fox [fox@server root]$ cd /root bash: cd: /root: 权限不够 [fox@server root]$ sudo cd /root 我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点: #1) 尊重别人的隐私。 #2) 输入前要先考虑(后果和风险)。 #3) 权力越大,责任越大。 [sudo] fox 的密码: fox 不在 sudoers 文件中。此事将被报告。
-
-
sudo的执行流程如下:
- 当执行sudo提权时,需要输入自己密码来确认(root执行sudo时不需要输入密码)
- 若密码输入成功,系统会去/etc/sudoers文件中查找该用户是否有执行sudo的权限
- 若用户具有执行sudo的权限,便开始sudo后续接的命令;
-
配置**/etc/sudoers**文件方式
-
执行visudo 或 vim /etc/sudoers
[root@server ~]# visudo root ALL=(ALL) ALL # 账户名 允许使用的主机=(以谁的身份) 可执行的命令列表 #说明:ALL是关键字,代表任何身份、主机或命令。
-
-
例:上例继续
[root@server ~]# vim /etc/sudoers # 定位100行输入: fox ALL=(ALL) ALL # 需要wq!强制保存退出 [root@server ~]# su fox [fox@server root]$ cd /root bash: cd: /root: 权限不够 [fox@server root]$ sudo cd /root [sudo] fox 的密码: [fox@server root]$ pwd /root
3. 工作组管理
3.1 创建工作组
-
格式:
groupadd -参数 工作组名
-
参数:
- -g GID:指定新工作组的GID,默认值是已有的最大的GID加1
- -r: 建立一个系统组账号,与-g不同时使用时,则分配一个1~999的GID
-
例:
[root@localhost Desktop]# groupadd -g 3000 group1
3.2 修改工作组
-
格式:
groupmod -参数 工作组名
-
参数:
- -g GID——为用户组指定新的组标识号
- -n 新用户组——将用户组的名字改为新名字修改用户组的名称和用户组的GID值
-
例:
[root@localhost Desktop]# groupmod -g 2000 group1 [root@localhost Desktop]# groupadd -g 2000 -n group group1
3.3 添加/删除组成员
-
格式:
gpasswd -参数 账户 工作组
-
参数:
参数 解释 -r 删除组密码 -a 把用户加入组 -d 把用户从组中删除。 -M 可同时添加多个用户 -A 给组指派管理员。 -
例:
[root@localhost Desktop]# gpasswd -a user1 group [root@localhost Desktop]# gpasswd -A user1 group [root@localhost Desktop]# gpasswd -d user1
-
注意:
- 只有root用户和组管理员才能够使用该命令
3.4 删除工作组
-
格式:
groupdel 工作组名
-
例:
[root@localhost Desktop]# groupdel group
-
注意:
- 被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组
4. 查看用户登录系统的情况
4.1 users命令
-
作用:查看当前登录系统的用户
-
例:
[root@localhost Desktop]# users root root
4.2 last命令
-
作用:列出目前与过去登入系统的用户相关信息,该命令默认会去读取**/var/log/wtmp**文件,并把该文件记录的登入系统的用户名单全部显示出来
-
例:
[root@localhost Desktop]# last root tty2 tty2 Thu Oct 31 14:57 still logged in root seat0 login screen Thu Oct 31 14:57 still logged in reboot system boot 5.14.0-427.13.1. Thu Oct 31 14:45 still running root tty2 tty2 Wed Oct 30 20:56 - crash (17:49) root seat0 login screen Wed Oct 30 20:56 - crash (17:49) reboot system boot 5.14.0-427.13.1. Wed Oct 30 20:43 still running root tty2 tty2 Wed Oct 30 18:27 - crash (02:15)
4.3 lastlog命令
-
作用:查看每个账号的最近登录时间,该命令会读取**/var/log/lastlog**文件
-
例:
[root@localhost Desktop]# lastlog Username(用户名) Port(端口/字符设备) From Latest(最后一次登录时间) root tty2 Thu Oct 31 14:57:22 +0800 2024 bin **Never logged in**
4.4 w命令
-
作用:显示登录到系统的用户信息
-
例:
[root@localhost Desktop]# w 16:00:12 up 1:03, 2 users, load average: 1.19, 0.71, 0.34 USER TTY LOGIN@ IDLE JCPU PCPU WHAT root seat0 14:57 0.00s 0.00s 0.01s /usr/libexec/gdm-wayland-sessio root tty2 14:57 1:14m 0.09s 0.08s /usr/libexec/gnome-session-bina # 通过 w -i 可以查看登录地址 [root@localhost Desktop]# w -i 16:01:09 up 1:04, 2 users, load average: 0.92, 0.72, 0.37 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root seat0 login- 14:57 0.00s 0.00s 0.01s /usr/libexec/gd root tty2 tty2 14:57 1:15m 0.09s 0.08s /usr/libexec/gn
-
结果分析:
-
第一行显示当前的系统时间、开机多久、登录到系统中的用户数和系统平均负载(平均负载是指在1分钟、5分钟、15分钟内系统负载情况)
-
第二行只是各个项目的说明
- USER:表示登录系统的用户
- TTY:表示用户使用的TTY名称
- FROM:表示用户从哪里登录进来
- LOGIN@:用户登录的日期和时间
- idle:表示空闲时间
- JCPU:在某段时间内所有与该终端相关的进程任务所耗费的cpu时间
- PCPU:当前活动进程使用的系统时间
- WHAT:表示当前用户执行的进程名称和选项
-
第三行以后,每行代表一个用户登录的信息
-
4.5 who命令
-
作用:显示目前登录到系统的用户,会从/var/run/utmp文件来获取信息
-
例:
[root@localhost Desktop]# who root seat0 2024-10-31 14:57 (login screen) root tty2 2024-10-31 14:57 (tty2)
-
结果分析:
who命令的输出格式 名称 状态 终端 时间 活动 进程标识 主机名 说明 用户的登录名 表明终端是否对用户都是可写的 类似于pts/1、pts/2等 用户登陆系统的时间 某个用户在自己的终端上最后一次活动发生以来到现在的时间,如果是"."表示一分钟内的终端活动 用户登录shell的进程id 登录到Linux系统上的客户端机器标识 -
例:
[root@server ~]# who -b 列出系统最近启动的日期 system boot 2022-05-09 15:38 [root@server ~]# who -m 列出关于当前终端的信息 root pts/0 2022-05-09 15:38 (192.168.168.1) [root@server ~]# who am i root pts/0 2022-05-09 15:38 (192.168.168.1) [root@server ~]# who am I root pts/0 2022-05-09 15:38 (192.168.168.1) [root@server ~]# who -q 列出在本地系统上的用户和用户数的清单 root # users=1 [root@server ~]# who -r 显示当前系统的运行级别 run-level 3 2022-05-09 15:38 [root@server ~]# who -u 显示当前每个用户的用户名、登录终端、登录时间、终端活动、进程和主机名 root pts/0 2022-05-09 15:38 . 1510 (192.168.168.1) [root@nserver ~]# who -T 显示tty终端的状态,“+”表示对任何人可写,“-”表示仅对root用户或所有者可写,“?”表示遇到终端故障 root + pts/0 2022-05-09 15:38 (192.168.168.1) [root@server ~]# who -w 和-T一样 root + pts/0 2022-05-09 15:38 (192.168.168.1)