Linux用户与用户组管理

一、用户及用户组的基本概述

基本概念:

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户:

登录Linux系统需要以用户的身份进行登录,登陆后会通过该用户的权限来确定该用户在系统中能做些什么。

在Linux系统中,用户(User)是指与系统交互的个体或实体,每个用户都有自己的用户名(Username)和用户ID(User ID),用于标识其在系统中的身份。用户可以登录系统并执行各种操作,例如运行程序、访问文件等。

用户在Linux系统里也是区分角色的,由于角色的不同,权限划分和操作也是不同的。

用户账号类型:

1.root超级管理员用户:

在系统里默认超级管理员为root用户,该用户的UID和GID都是0,是Linux中的"国王",该用户拥有最大的权限,无所不能。可以负责管理下面的普通用户。

2.普通用户:

普通用户是由root创建,该用户可以自由登录,拥有属于自己的家目录;该用户的权限由超级管理员用户来分配。在 centos 7中 ,普通用户的UID范围为1000-60000。

3.程序用户:

该用户为电脑用户,不是给人用的。该用户仅用于为运行服务的,不可以登录系统,无家目录。系统用户的UID在Centers7中是1-999;

centos7
超级管理员 0
普通用户 1000-60000
程序用户 1-999

用户组:

用户组(group)是把相同功能特性的用户集合起来

用户组(User Group)是将用户组织起来的一种方式,它可以包含一个或多个用户。用户组有一个组名(Group Name)和一个组ID(Group ID),用于标识组在系统中的身份。用户组可以帮助管理和控制文件和目录的访问权限,通过将多个用户放置在同一用户组中,可以方便地对这些用户进行统一的权限管理。

组账号类型:

基本组(私有组):

  • 创建用户账号时,如果没有指定用户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组,默认只容纳一个用户。
  • 在用户所属组中的第一个组称为基本组,基本组在/etc/passwd 文件中指定。
  • 基本组只能是唯一的。

附加组:

在用户所属组中,除了第一个组(基本组)以外的其他组就是附加组,附加组在/etc/group文件中指定。基本组只能有一个,而附加组可以有一个或者多个。

二、用户账号管理

管理用户账号主要是用户账号的新增、删除、更改等工作。

1.用户账号文件位置

文件位置:/etc/passwd(虽然此处为密码单词,但实际上还是账号文件位置)

用途: 存放保存用户名称、宿主目录、登录 Shell 等基本信息,其内每行对应一个用户的账号记录

js 复制代码
[root@localhost ~]# cat /etc/passwd     //查看passwd内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

每行字段含义: [root:x:0:0:root:/root:/bin/bash]

每行内用":"作为分隔符进行分割,共分割为七段,以第一段为例

root 用户名字
x 密码占位符
0 uid(属主)
0 gid(属组)
root 备注信息
/root 家目录位置
/bn/bash 登陆时默认的shell类型

可以使用"man 5 passwd" 可以查询该文件的信息

2.用户密码文件

文件位置:/etc/shadow

用途:存储用户的密码信息,又称为"影子文件" 。/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。

同样该文件内容每行对应一个用户的密码信息

查看文件内容:

js 复制代码
[root@localhost ~]# cat /etc/shadow   //以管理员身份查看用户密码信息
root:$6$YDYBjyE0JNrS/OuY$2zatWfmoJqSiE1aThG7BDdOt72Ntc9HDx0PnmXUTuGro1LouJA1zepTTftUypaheSSF8xEdqxREkOe880oskg.::0:99999:7:::
bin:*:17110:0:99999:7:::

同样/etc/shadow文件也是以冒号":"作为分隔符,将每行分成了9段,以root为例,含义如下:

  • 第一段:为用户名

  • 第二段:为加密密码,当此段为!或者*时表示用户不可登录到该系统中,如果为空的话说明登录无需密码。

  • 第三段:为上次修改密码时间和最后一次修改密码时间。时间以Linux元年开始计算。

  • 第四段:最小修改密码间隔天数,即两次修改口令之间所需的最小天数。若不设置,默认为0,表示当天即可修改。 空字段或 0 都表示当天即可修改。

  • 第五段:密码有效期,通常为99999表示永久有效的

  • 第六段:警告时间。表示从系统开始警告用户到用户密码正式失效之间的天数。空字段或者 0 表示没有密码警告期。

  • 第七段:密码过期后的宽限天数。

  • 第八段:账户失效时间。从1970/1/1日起,到用户被禁用的天数。默认为空。账户过期不同于密码过期。账户过期后,用户将不被允许登录。密码过期后,用户将不被允许使用此密码登录。

  • 第九段:保留字段。此字段保留作将来使用。

三、用户账号管理命令

3.1添加用户账号 useradd

命令格式:useradd [选项] 用户名

  • 新建一个用户,并且修改新建目录属性。
  • 自动建立一个同名的基本组。
  • 在/home下建立一个同名的家目录。
js 复制代码
[root@localhost ~]# useradd zhutou           //创建一个名为zhutou的用户
[root@localhost ~]# cat /etc/passwd | grep zhutou  //查看passwd中有关猪头的行
zhutou:x:1001:1001::/home/zhutou:/bin/bash
[root@localhost ~]# tail -1 /etc/passwd    //查看passwd的最后一行,(显示同上)
zhutou:x:1001:1001::/home/zhutou:/bin/bash
[root@localhost ~]# tail -1 /etc/shadow  //查看shadow最后一行,查看该用户密码信息
zhutou:!!:19818:0:99999:7:::

选项

选项 功能说明
-u 指定用户的 UID 号,要求该 UID 号码未被其他用户使用
-d 指定用户的宿主目录位置(当与-M 一起使用时,不生效)无需提前创建目录但必须使用绝对路径
-e 指定用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
-g 指定用户的基本组名(或使用 GID 号)
-G 指定用户的附加组名(或使用 GID 号)
-M 不建立宿主目录,即使/etc/login.defs 系统配置中已设定要建立宿主目录
-s 指定用户的登录 Shell /sbin/nologin(该shell为不可登录范围)

演示:

1.-u指定用户的UID

ruby 复制代码
[root@localhost ~]# useradd -u 2500 haha  //建立一个名为haha的用户并且指定UID号为2500
[root@localhost ~]# tail -1 /etc/passwd   //查看passwd最后一行关于haha的信息
haha:x:2500:2500::/home/haha:/bin/bash

2.-d 指定用户的宿主目录

ruby 复制代码
[root@localhost ~]# useradd -d /home/haha  haha //创建一个haha的用户并指定家目录在/home/haha下
[root@localhost ~]# tail -1 /etc/passwd
haha:x:1002:1002::/home/haha:/bin/bash

3.-e 指定用户的账户失效时间

csharp 复制代码
[root@localhost ~]# useradd -e 2024-4-6  haha  //创建一个名为haha的用户并指定失效时间为2024年4月6日。
[root@localhost ~]# tail -1 /etc/shadow
haha:!!:19818:0:99999:7::19819:     //查看shadow文件,19173表示距离1970年1月1日的19819天

4.-g 指定用户基本组

scss 复制代码
[root@localhost ~]# useradd -g root  haha      //创建用户并指定用户基本组为root组
[root@localhost ~]# id haha           //查看用户信息,基本组为root组
uid=1002(haha) gid=0(root) 组=0(root)

5.-G 指定用户附加组

scss 复制代码
[root@localhost ~]# useradd -G zhutou  haha        //创建用户并指定用户基附加组为zhutou组
[root@localhost ~]# id haha                 //查看用户信息,附加组为zhutou组
uid=1002(haha) gid=1002(haha) 组=1002(haha),1001(zhutou)

6.-M 不建立家目录

csharp 复制代码
[root@localhost ~]# userdel -r haha    //创建用户且不建立家目录
[root@localhost ~]# useradd -M  haha
[root@localhost ~]# ls /home          //查看家目录发现没有haha
zhu  zhutou

7.-s 指定用户的登录shell(一般用于程序用户)

ruby 复制代码
[root@localhost ~]# useradd -s /sbin/nologin  haha   //创建用户并指定登录shell为/sbin/nologin,该用户无法登录系统
[root@localhost ~]# tail -1 /etc/passwd
haha:x:1002:1002::/home/haha:/sbin/nologin

3.2更改或设置用户的密码 passwd

命令格式:passwd [选项] [用户名]

注意:

  • 普通用户只能执行单独的passwd修改自己的用户密码,不可以修改别人的用户密码。
  • 而root用户有着最高权限,可以管理指定用户名作为参数,对指定账号的密码进行管理。不指定用户名时,修改当前账号的密码。

选项

选项 功能说明
-d 清空指定用户的密码,仅使用用户名即可登录系统(不安全不建议使用)
-l 锁定用户密码,锁定的用户账号将无法再登录系统。(一定要事先设好密码才能锁定)
-u 解锁用户密码
-S 查看用户账户的状态是否被锁定

免交互更改用户密码:echo "123456" | passwd -haha --stdin 可快速设置用户密码。
演示:

1.设置或修改用户密码

arduino 复制代码
[root@localhost ~]# passwd haha          //更改haha用户的密码
更改用户 haha 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# echo "1596012265a" |passwd --stdin haha  //更快捷的更改密码。
更改用户 haha 的密码 。
passwd:所有的身份验证令牌已经成功更新。

2.-d 清除用户密码,使用用户名可直接登录

arduino 复制代码
[root@localhost ~]# passwd -d haha     //清空haha用户名的密码
清除用户的密码 haha。
passwd: 操作成功

3.锁定和解锁用户

arduino 复制代码
[root@localhost ~]# passwd -l haha            //锁定用户密码,锁定后用户无法登陆
锁定用户 haha 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -u haha           //解锁用户
解锁用户 haha 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -S haha          //查看haha用户状态,以为解锁
haha PS 2024-04-05 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

3.3 修改用户账号的属性 usermod

命令格式:usermod [选项] 用户名

该命令选项与useradd命令中的含义大多相同

选项 功能
-l 更改用户账号的登录名称。格式:usermod -l 新名称 旧名称 (仅对已有用户)
-L 锁定用户账户
-U(大) 解锁用户账户
-u(小) 修改用户的UID号
-d 修改用户的宿主目录位置
-e 修改用户的账户失效时间,可使用YYYY--MM-DD的日期格式
-g 修改用户的基本组名(或使用GID号)
-G 修改用户的附加组名(或使用GID号)
-s 指定用户的登录Shell

演示:

scss 复制代码
[root@localhost ~]# usermod -l bao zhu   //把zhu用户的旧名改成bao新用户名
[root@localhost ~]# usermod -L bao       //锁定用户bao
[root@localhost ~]# passwd -S bao        //查看用户名bao的状态,发现已经被锁定了
bao LK 1969-12-31 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U bao       //解锁用户bao
[root@localhost ~]# passwd -S bao        //查看bao状态,发现已经恢复
bao PS 1969-12-31 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

3.4删除用户 userdel

命令格式: userdel [选项] 用户名

userdel [-r] 用户名 //加-r可以删除宿主目录

less 复制代码
root@localhost ~]# ls /home      //查看home目录内有哪些用户
haha  hehe  zhu  zhutou
[root@localhost ~]# useradd all  
[root@localhost ~]# ls /home
all  haha  hehe  zhu  zhutou
[root@localhost ~]# userdel -r all   //删除指定用户all及家目录(加-r可连同家目录一起删除)
[root@localhost ~]# ls /home     //查看/home下的all用户及家目录是否存在,查看已经删除
haha  hehe  zhu  zhutou

3.5用户账号的初始配置文件

文件位置:/etc/skel/

主要用途:

新建用户时,用户初始家目录文件都来源于/etc/skel/文件夹下。包括家目录的路径、shell类型,用户宿主目录下的初始配置文件只对当前用户有效。

主要的用户初始配置文件:

  • ~/.bash_profile : 这个文件是为系统全局变量配置文件,可以通过重启系统或者执行 "source /etc/profile" 命令使profile文件被读取。(开机启动前进行操作)
  • ~/.bashrc: 这个文件实际上是/etc/profile的子目录,存放的是一些应用程序所需的启动脚本。(开机启动前进行操作)
  • ~/.bash_logout: 每一个允许bash shell 的用户都会执行此文件。可通过执行bash命令打开一个新的bash,使bashrc文件被读取。(关机时进行操作)

备注:

  • 在当前用户家目录里.bashrc设置的改变只对当前用户有效,当需要影响所有用户的话需要在/etc/profile/写入配置文件。
  • 修改/etc/profile文件中相关配置,切换bash或者用户后都需要source /etc/profile才生效;
  • 修改/etc/bashrc文件中相关配置,切换bash或者用户后直接生效。

四、组管理

4.1组账号文件

文件位置:

  • /etc/group:保存组账号基本信息。
  • /etc/gshadow:保存组账号的密码信息。

group文件每行分成了4段,每个字段含义如下:

  • 字段1:组账号名称。
  • 字段2:密码占位符x;通常不需要设置组密码。由于安全原因,该密码被记录在/etc/gshadow中,因此显示为'x'。类似/etc/shadow文件。
  • 字段3:组编号GID。
  • 字段4:本组的成员用户列表 (一般不包括基本组对应的用户帐号),多个成员之间以逗号","分隔 。

演示:

vbnet 复制代码
[root@localhost ~]# head -5 /etc/group  //查看group文件的前五行
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:

4.2添加组账号 groupadd

命令格式:groupadd [-g GID] 组账户名

演示:

js 复制代码
[root@localhost ~]# groupadd -g 2500 zhubao  //添加一个名为zhubao的组并指定DIP号为2500
[root@localhost ~]# tail -n1 /etc/group      //查看group文件,已添加成功
zhubao:x:2500:

4.3添加删除组成员 gpasswd

命令格式:gpasswd [选项] 组账号名

常用选项:

选项 功能说明
-a 添加一个用户
-d 从组内删除一个用户
-M 添加多个

演示:

1.-a添加单个的用户进指定用户组

arduino 复制代码
[root@localhost ~]# ls /home                   //查看当前用户
haha  hehe  zhu  zhutou
[root@localhost ~]# gpasswd -a zhutou  zhubao  //将zhutou用户加入到zhubao用户组里
正在将用户"zhutou"加入到"zhubao"组中            //加入成功
[root@localhost ~]# tail -n1 /etc/group       //查看用group文件,添加成功
zhubao:x:2500:zhutou

2.-d将用户组内删除一个指定用户

arduino 复制代码
[root@localhost ~]# gpasswd -d  zhutou  zhubao   //删除用户组内指定用户,将zhutou用户从猪宝用户组里删除。
正在将用户"zhutou"从"zhubao"组中删除              //删除成功
[root@localhost ~]# tail -n1 /etc/group         //查验group,删除成功
zhubao:x:2500:

3.-M 定义组成员列表,在指定用户组内同时加入多个用户

csharp 复制代码
[root@localhost ~]# useradd guinv                   //先新建多个用户
[root@localhost ~]# useradd zhuwo                   //查看当前home目录下的用户
[root@localhost ~]# ls /home                      
guinv  haha  hehe  zhu  zhutou  zhuwo              
[root@localhost ~]# gpasswd -M zhuwo,zhutou,guinv  zhubao    //指定多个用户同时加入zhubao组
[root@localhost ~]# cat /etc/group| grep zhubao              //查看zhubao组里的用户
zhubao:x:2500:zhuwo,zhutou,guinv                             //添加成功

4.4删除组账号 groupdel

命令格式:groupdel 组账号名

演示:

makefile 复制代码
[root@localhost ~]# groupadd -g 2510 zhuzhu         //先建立一个新的组用户
[root@localhost ~]# tail -n1 /etc/group             //验证创建成功
zhuzhu:x:2510:
[root@localhost ~]# groupdel zhuzhu                 //对刚刚创建的组用户进行删除
[root@localhost ~]# tail -n5 /etc/group             //查看group内的zhuzhu组用户是否删除
haha:x:1002:
hehe:x:1003:
zhubao:x:2500:zhuwo,zhutou,guinv
guinv:x:2501:
zhuwo:x:1004:

查询

5.1查询用户账号的详细信息 finger

命令格式:finger 用户名

此命令需要安装后才可使用

演示:

yaml 复制代码
[root@localhost ~]# finger zhutou              //查看当前用户信息
Login: zhutou(登录用户名)         			Name: 
Directory: /home/zhutou (家目录)            	Shell: /bin/bash(shell类型)
Never logged in.  (最后一次登录时间)
No mail.
No Plan.

5.2查询已登录到主机的用户信息

w命令,查询已登录的所有用户信息

sql 复制代码
[root@localhost ~]# w                                              //查询当前主机已登录过的用户信息
 11:19:53 up  1:39,  1 user,  load average: 0.00, 0.01, 0.03
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    192.168.83.1     09:40    1.00s  0.09s  0.01s w

文件和目录的权限与归属

访问权限

rwx rw- --x

  1. r 读取:允许查看文件内容和目录列表
  2. w 写入:可以修改文件的内容,新建文件(文件夹),删除文件(文件夹),移动文件(文件夹)。
  3. x 执行:执行是最小的权限也是基础,没有执行,读写无法使用,对于文件可以运行(命令,脚本),颜色是绿色,

归属(所有权):

  1. 属组:拥有该文件或目录的组账号(文件的拥有组)
  2. 属主:拥有该文件或目录的用户账号(文件的主人,文件的拥有者,拥有最高权限)
  3. 其他人:除了上面两种

数字表示法:

读:100------4

写:010------2

执行:001------1

最高权限:111------7

将二进制转化成十进制

修改文件属性权限命令:chmod

chmod命令格式:chmod 【选项】 指明属主,属组,其他人+权限 文件

常用选项:

选项 功能
-R 递归
u 属主
g 属组
o 其他人
a 所有人
+ 加上
- 减去
= 赋予
  • chmod u+r 文件名(为属主加上读的权限)
  • chmod u-r 文件名(为属主减去读的权限)
  • chmod u+r 文件名(为属主)
  • chmod a+r 文件名(为所有人都加上读的权限)

演示:

csharp 复制代码
[root@localhost /]# ll zhutou                  //查看当前该文件的权限
-rw-r--r--. 1 root root 0 4月   7 13:53 zhutou
[root@localhost /]# chmod a+rwx zhutou        //给当前文件权限升级为777
[root@localhost /]# ll zhutou
-rwxrwxrwx. 1 root root 0 4月   7 13:53 zhutou

也可写成数字表示法,会较为方便一些

arduino 复制代码
[root@localhost /]# ll zhutou                   //查看当前该文件权限
-rw---x--x. 1 root root 0 4月   7 13:53 zhutou
[root@localhost /]# chmod 777 zhutou            //给所有人加上最高权限
[root@localhost /]# ll zhutou                   //查验
-rwxrwxrwx. 1 root root 0 4月   7 13:53 zhutou
相关推荐
小糖学代码8 小时前
LLM系列:1.python入门:3.布尔型对象
linux·开发语言·python
shizhan_cloud8 小时前
Shell 函数的知识与实践
linux·运维
Deng8723473488 小时前
代码语法检查工具
linux·服务器·windows
霍夫曼10 小时前
UTC时间与本地时间转换问题
java·linux·服务器·前端·javascript
月熊11 小时前
在root无法通过登录界面进去时,通过原本的普通用户qiujian如何把它修改为自己指定的用户名
linux·运维·服务器
大江东去浪淘尽千古风流人物12 小时前
【DSP】向量化操作的误差来源分析及其经典解决方案
linux·运维·人工智能·算法·vr·dsp开发·mr
赖small强13 小时前
【Linux驱动开发】NOR Flash 技术原理与 Linux 系统应用全解析
linux·驱动开发·nor flash·芯片内执行
IT运维爱好者14 小时前
【Linux】LVM理论介绍、实战操作
linux·磁盘扩容·lvm
LEEE@FPGA14 小时前
ZYNQ MPSOC linux hello world
linux·运维·服务器
郝学胜-神的一滴14 小时前
Linux定时器编程:深入理解setitimer函数
linux·服务器·开发语言·c++·程序人生