一、分类

1.用户和用户组分类

(1)用户分类

  • 超级用户(root)——它具有一切权限,只有进行系统维护(例:建立用户)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。---UID:0
  • 系统用户(伪用户)——是linux系统正常工作所必需的内建用户---UID:201-999
  • 普通用户——是为了让使用者能够使用linux系统资源而建立的---UID:1000-60000

(2)用户组分类

  • 基本组(私有组):创建用户时,默认情况下创建一个和用户同名的组
  • 附加组(公共组):可以容纳多个用户。
  • 系统组:创建系统时,创建一个和系统同名的组。

在linux中,用户账号、密码、用户组信息和用户密码均是放在不同的配置文件中的

文件功能文件名称
用户账号文件/etc/passwd
用户密码文件

/etc/shadow

用户组账号文件/etc/group
用户组密码文件/etx/gshadow

2.用户及组文件

(1)用户账号文件---/etc/passwd

超级用户root:x:0:0:root:/root:/bin/bash

                  账户名称:密码占位符:UID:GID:个人资料:主目录:shell

字段说明

字段含义
账号名称用户登录linux系统使用的名称
密码占位符此处只是密码占位符“x” 或“*”。若为“x”,说明密码经过了shadow的保护
UID用户标识,数值,用来区分不同用户
GID用户所在基本组的标识
个人资料记录用户完整姓名、地址等等个人信息
主目录

用户的主目录(家目录)(普通用户的主目录,在home目录下面,和用户名同名)

Shell

定义用户登录后激活的Shell,默认是Bash Shell

不允许登录:/sbin/nlogin;不允许交互:/bin/false

(2)用户密码文件---/etc/shadow


账号名称:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

字段说明

字段含义
账号名称登录名
加密口令使用SHA-512/SHA-256/MD5算法加密后的密码
最后一次修改时间以距离1970年1月1日的天数表示
最小时间间隔密码多少天内不能修改。默认为0,表示不限制
最大时间间隔密码多少天内必须修改。默认99999,表示不进行限制
警告时间提前多少天警告密码将过期,默认7天,0为不提供警告
不活动时间密码过期多少天禁用用户
失效时间以距离1970年1月1日的天数表示,默认为空,表示永久可用
标志保留

例:计算用户上次修改密码的日期

[root@server ~]# head -1 /etc/shadow
root:$6$ySIbEt.2ieNLyZRD$XC4ssD7iMSiGzJ.2wxGrH9tKSbwmetdtE75aKp9WtnH.0HiCC7zzD7DpAPIqT5OVO1rJ9RFA6ycE9KJ9Ht9CK/:19286:0:99999:7:::
[root@server ~]# date -u -d "1970-01-01 UTC $((19286 * 86400 )) seconds"    
Fri Oct 21 00:00:00 UTC 2022

(3)用户组账号文件---/etc/group


系统中的每一个组,在/etc/group文件中都有一行记录

字段说明:

字段说明
Groupname组的名字
Passwd组的加密口令
GID是系统区分不同组的
Userlist用“,”分开的用户名。列出的是附加组的成员

(4)用户组密码文件 --- /etc/gshadow

二、管理

1.用户

(1)创建用户:

  • 格式: useradd [选项]
  • 常用选项:
选项作用
-c(注释信息)设定与用户相关的说明信息
-d(目录)设定用户的家目录
-e(YYYY-MM-DD)设定用户失效日期,过期不能使用该账号
-f(天数)指定密码到期后多少天账号被禁用。0--到期立即禁用;-1--过期不被禁用
-g(组名或GID号)为用户指定所属的基本组,该组在指定时必须已存在
-M不创建用户家目录
-N不创建与用户名同名的基本组
-p(密码)指定用户的登录密码
-s(shell)指定用户登陆使用的Shell,默认bash
-u(用户号)设定账号UID,默认已有用户的最大UID加1。若有-o选项,则可重复使用其它用户标识号

<1> 示例1:创建用户user1

[root@server ~]# useradd user1
[root@server ~]# grep user1 /etc/passwd---在passwd中查看含有user1的行
user1:x:1001:1001::/home/user1:/bin/bash
[root@server ~]# grep user1 /etc/group---在group中查看含有user1的行
user1:x:1001:

<2> 示例2:创建用户user2,uid为1111

[root@server ~]# useradd -u 1111 user2
[root@server ~]# grep user2 /etc/group
user2:x:1111:
[root@server ~]# grep user2 /etc/passwd
user2:x:1111:1111::/home/user2:/bin/bash

<3> 示例3:创建用户mysql,说明信息‘mysql server’,系统账号,可以登录

[root@server ~]# useradd -c 'mysql server' -r mysql
[root@server ~]# grep mysql /etc/passwd
mysql:x:977:975:mysql server:/home/mysql:/bin/bash

<4> 示例4:创建用户li4,指定用户的家目录为/usr/li4

[root@server ~]# useradd -d /usr/li4 li4
[root@server ~]# grep li4 /etc/passwd
li4:x:1112:1112::/usr/li4:/bin/bash

<5> 示例5:创建用户,为其设置密码

[root@server ~]# openssl passwd -1 -salt `openssl rand -hex 8 ` '123456'---将123456设置成为随机数
$1$efe34e21$k.sLYXp7oZ/W7IA2aFNXm1
[root@server ~]# useradd -p '$1$efe34e21$k.sLYXp7oZ/W7IA2aFNXm1' user4—将设置为的随机数设置为密码
可用123456作为密码登录

<6> 示例6:新建用户user5,指定用户附加组是user1

[root@server ~]# useradd -G user1 user5
[root@server ~]# grep user1 /etc/group
user1:x:1001:user5

(2)修改用户

  • 格式:usermod [选项] username
  • 常用选项:-c,-d,-m,-g,-G,-s,-u,-o这些选项的意义与useradd命令中的选项意义相同
选项作用
-l更改账户的名称,必须在该用户未登录的情况下才能使用
-L锁定账户,令其不能登录使用
-U解锁用户账户

<1> 示例1:修改用户user1的失效时间为2022.11.07

[root@server ~]# usermod -e '2022-11-27' user1
[root@server ~]# grep user1 /etc/shadow

<2> 示例2:修改用户li4为lis

[root@server ~]# usermod -l lis li4

<3> 示例3:锁定用户user4

[root@server ~]# usermod -L user4(锁定当前用户)
[root@server ~]# passwd -S user4---查看当前user4的状态
user4 LK 2022-11-06 0 99999 7 -1 (Password locked.)

<4> 示例4:解锁用户user4

[root@server ~]# usermod -U user4(解锁当前用户)
[root@server ~]# passwd -S user4
user4 PS 2022-11-06 0 99999 7 -1 (Password set, MD5 crypt.)

(3)删除用户账号

  • 格式:userdel [-r] 账户名
  • 常用选项:-r——在删除用户该账户的同时,一并删除该账户对应的主目录

<1> 示例:删除用户user4

[root@server ~]# userdel -r user4---连同用户的家目录以及邮件队列一起删除

(4)用户设置密码(linux账户必须设置密码,才能登录系统)

  • 格式:passwd [账户名]
  • 常用选项
选项功能
-l锁定用户
-u解锁用户
-S显示用户当前状态信息
-i口令过期多少天后停用账户
-n指定口令最短存活期

<1> 示例1:设置密码

法1:
[root@server ~]# passwd user1
法2:利用管道实现,将前面命令的标准输出作为后面命令的标准输入
[root@server ~]# echo 2 | passwd --stdin user1
法3:
[root@server ~]# echo "user1:3" | chpasswd

<2> 强制用户下次登录修改密码

[root@server ~]# chage -d 0 user1---强制user1下次登录修改密码

(5)用户间切换

  • 格式:su [用户名]
  • 从root切换到任何用户不需要密码验证,普通用户到root用户或者其他用户均需要输入目标密码验证,验证成功才可正常切换。

PS:su 和 su - 命令区别就是加载文件不一样

  • su 切换方式加载的文件为:~/.bashrc,/etc/bashrc
  • su - 切换方式加载文件为:/etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile

(6)控制用户对系统命令的使用权限

  • 格式:sudo
  • 执行流程:
当用户执行sudo时,会让用户输入自己的密码来确认(root执行sudo时不需要输入密码);
若欲切换的身份与执行者身份相同,那也不需要输入密码。
若密码输入成功,系统会去/etc/sudoers文件中查找该用户是否有执行sudo的权限;
若用户具有执行sudo的权限,便开始sudo后续接的命令
  • 常用选项
sudo -l
列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项
sudo -u 用户名 命令
以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是UID
sudo -k
清除存活期时间,下次再使用sudo时要再输入密码
sudo -b 命令
在后台执行指定的命令
sudo -p 提示语 <操作选项>
可以更改询问密码的提示语,其中%u会代换为使用者账号名称,%h会显示主机名称。
  • 配置/etc/sudoers文件的两种方式
[root@localhost ~]# vim /etc/sudoers或者[root@localhost ~]# visudo
root ALL=(ALL) ALL

参数代表含义:
1、用户账号:系统哪个账号可以使用sudo这个命令。
2、登录者的来源主机名
3、可切换的身份:这个账号可以切换成什么身份来执行后续的命令。默认root可以切换成任何人。
4、可执行的命令:这个命令最好使用绝对路径编写。默认root可以切换任何身份且进行任何命令。

说明:ALL是关键字,代表任何身份、主机或命令

例:为用户student增加添加用户和删除用户的权限

[root@tianqinwei ~]# visudo --- 在管理员层面修改配置文件
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
student ALL=(ALL)       /usr/sbin/useradd,/usr/sbin/userdel --- 为student用户增加添加用户和删除用户的权限
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
[student@tianqinwei ~]$ sudo -l --- 查看student用户的权限

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for student: 
Matching Defaults entries for student on tianqinwei:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS
    DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
    LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
    LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
    XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User student may run the following commands on tianqinwei:
    (ALL) /usr/sbin/useradd, /usr/sbin/userdel --- 其所拥有的权限

[student@tianqinwei ~]$ sudo useradd z3 --- 用sudo命令创建用户z3(由于是分配的权限,所以得用sudo)
[student@tianqinwei ~]$ sudo userdel -r z3 --- 删除用户z3

2.用户组

(1)创建用户组

  • 格式:groupadd [-r] 用户组名称
  • 常用选项:
选项功能
-g GID制定新用户组的标识号(GID),默认是已有最大GID值加1
-r建立一个系统组账号,与-g不同时使用时,分配一个1-999的GID

<1> 示例1:创建组hr

[root@server ~]# groupadd hr

<2> 示例2:创建组IT,gid为1234

[root@server ~]# groupadd -g 1234 IT

(2)修改用户组属性

  • 命令格式: groupmod 选项 用户组
  • 常用选项:
选项功能
-g GID为用户组指定新的组标识号
-n将用户组的名字改为新名字,修改用户组的名称和用户组的GID值

<1> 示例1:修改用户组hr为HR

[root@server ~]# groupmod -n HR hr

(3)管理组成员(root用户和组管理员才可使用)

  • 格式: gpasswd [选项] [用户] [组]

  • 常用选项
选项功能
-a将用户加入组
-d将用户移出组
-M同时添加多个用户
-A给组指派管理员

<1> 示例1:向组内添加成员:将user1添加到HR组

法1:
[root@server ~]# usermod -a user1 -G HR
[root@server ~]# grep HR /etc/group
HR:x:1115:user1
法2:
[root@server ~]# gpasswd -d user1 HR---将user1从HR组中移除
Removing user user1 from group HR
[root@server ~]# gpasswd -a user1 HR---将user1添加到HR组中
Adding user user1 to group HR

<2> 示例2:将user2和user1都加入IT组

[root@server ~]# gpasswd -M user2,user1 IT
[root@server ~]# grep IT /etc/group
IT:x:1234:user2,user1

<3> 示例3:设置user2为IT组管理员

[root@server ~]# gpasswd -A user2 IT

(4)删除组账户

  • 格式: groupdel 用户组名

<1> 示例:删除用户组IT、HR

[root@server ~]# groupdel IT
[root@server ~]# groupdel HR

附:信息显示

命令格式作用
uesrs | w | who显示当前用户信息(三条命令)
id [用户名]显示当前用户或指定用户的ID,以及所属组ID
groups [用户名]显示当前用户或指定用户所属组账号的信息

三、查询

1.查询用户和组信息

[root@localhost ~]# id root --- 显示出某个用户的详细信息
uid=0(root) gid=0(root) groups=0(root)
[root@localhost ~]# id student
uid=1000(student) gid=1000(student) groups=1000(student)

[root@localhost ~]# groups root --- 显示出用户的所属组信息
root : root
[root@localhost ~]# groups student
student : student

2.查看用户登录系统的情况

(1)users --- 查看当前登录系统的用户

[root@localhost ~]# users
root root

(2)last --- 列出目前与过去登入系统的用户相关信息,该命令默认会去读取/var/log/wtmp文件,并把该文件记录的登入系统的用户名单全部显示出来

[root@localhost ~]# last -2 --- 显示出最近登录的两条用户信息
root     pts/0        192.168.174.1    Fri Mar  3 13:56   still logged in
root     tty2         tty2             Fri Mar  3 13:56   still logged in

wtmp begins Fri Oct 21 08:54:34 2022

[root@localhost ~]# last -f /var/log/wtmp -n 2 --- 显示/var/log/wtmp文件中的最近两条登录信息
root     pts/0        192.168.174.1    Fri Mar  3 13:56   still logged in
root     tty2         tty2             Fri Mar  3 13:56   still logged in

wtmp begins Fri Oct 21 08:54:34 2022

(3)who --- 显示目前登录到系统的用户,who通常通过/var/run/utmp文件来获取信息

[root@localhost ~]# who 
root     tty2         2023-03-03 13:56 (tty2)
root     pts/0        2023-03-03 13:56 (192.168.174.1)
[root@localhost ~]# who -s --- 仅显示名称、终端、时间字段信息和主机名,默认输出
root     tty2         2023-03-03 13:56 (tty2)
root     pts/0        2023-03-03 13:56 (192.168.174.1)
[root@localhost ~]# who am i --- 列出关于当前终端的信息
root     pts/0        2023-03-03 13:56 (192.168.174.1)
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐