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
相关推荐
pk_xz12345628 分钟前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强30 分钟前
Linux之sed命令详解
linux·运维·服务器
Lary_Rock3 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
云飞云共享云桌面4 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq5 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮6 小时前
Linux 使用中的问题
linux·运维
dsywws7 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零8 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
小林熬夜学编程9 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
程思扬10 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节