Edehuag

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

Linux之用户管理

Linux用户管理

用户 & 用户组
用户:
Linux是多用户多任务操作系统,换句话说,Linux 、系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。
不同用户具有不同的权限,毎个用户在权限允许的范围内完成不同的任务,Linux 正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。
因此,如果要使用 Linux 系统的资源,就必须向系统管理员申请一个账户,然后通过这个账户进入系统(账户和用户是一个概念)。
通过建立不同属性的用户,一方面可以合理地利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。
每个用户都有唯一的用户名和密码。在登录系统时,只有正确输入用户名和密码,才能进入系统和自己的主目录。

用户组:
用户组是具有相同特征用户的逻辑集合。
简单的理解,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有10个用户的话,就需要授权10次,那如果有100、1000甚至更多的用户呢?
显然,这种方法不太合理。最好的方式是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中。那么,所有用户就具有了和组一样的权限,这就是用户组。
将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很大程度上简化了对用户的管理工作。

UID & GID

1)User ID,简称UID,是用来区分不同用户的数字,系统会自动记录“用户名”和UID的对应关系。
注:登陆Linux系统时,虽然输入的是自己的用户名和密码,但其实Linux并不认识你的用户名称,它只认识用户名对应的ID号(也就是一串数字)
Linux系统中的用户分为3类,即:普通用户、根用户、系统用户

普通用户

指所有使用Linux系统的真实用户,这类用户可以使用用户名及密码登录系
统。Linux有着极为详细的权限设置,所以一般来说普通用户只能在其家目
录、系统临时目录或其他经过授权的目录中操作,以及操作属于该用户的文
件。通常普通用户的UID大于500,因为在添加普通用户时,系统默认用户
ID从500开始编号。
使用 id 命令可以查看当前用户的uid以及gid:
[user1@linux30 ~]$ id
uid=1003(user1) gid=1003(user1) 组=1003(user1) 环境
=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[user1@linux30 ~]$

根用户

也就是root用户,它的ID是0,也被称为超级用户,root账户拥有对系统的
完全控制权:可以修改、删除任何文件,运行任何命令。所以root用户也是
系统里面最具危险性的用户,root用户甚至可以在系统正常运行时删除所有
文件系统,造成无法挽回的灾难。所以一般情况下,使用root用户登录系统
时需要十分小心。
[root@linux30 ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境
=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@linux30 ~]#

系统用户

系统运行时必须有的用户,但并不是指真实的使用者。比如在RedHat或CentOS下运行网站服务时,需要使用系统用户apache来运行httpd进程,
而运行MySQL数据库服务时,需要使用系统用户mysql来运行mysqld进程。
在RedHat或CentOS下,系统用户的ID范围是1~499。如下,我们在安装mysql数据库时,经常会创建mysql数据库组和mysql用户

Group ID

简称GID,是用于区分不同用户组的ID。
在下面的例子中,使用ls -l查看文件时,第三列和第四列显示的是这个文件的所有者是用户root,所有组是root组,
如果加上了-n参数,第三列和第四列则是用UID和GID来显示的,这里分别是0和0。

[root@linux30 ~]# ls -l
总用量 4
-rw-------. 1 root root 1440 96 15:43 anaconda-ks.cfg
drwxr-xr-x. 5 root root 53 1021 17:49 logs
drwxr-xr-x. 4 root root 34 1025 15:47 nacos
[root@linux30 ~]# ls -ln
总用量 4
-rw-------. 1 0 0 1440 96 15:43 anaconda-ks.cfg
drwxr-xr-x. 5 0 0 53 1021 17:49 logs
drwxr-xr-x. 4 0 0 34 1025 15:47 nacos
[root@linux30 ~]#

在Linux下每个用户都至少属于一个组。

获取自己的UID:
[root@linux30 ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境
=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
获取自己的组
[root@linux30 ~]# groups
root

/etc/passwd

Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作
/etc/passwd 文件中的内容非常规律,每行记录对应一个用户。

[root@localhost ~]# cat /etc/passwd

Linux系统中默认怎么会有这么多的用户?
这些用户中的绝大多数是系统或服务正常运行所必需的用户,这种用户通常称为系统用户或伪用户。
系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。
不仅如此,每行用户信息都以 ":" 作为分隔符,划分为7个字段,每个字段所表示的含义如下:

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认 Shell

用户名:
用户名,就是一串代表用户身份的字符串。
密码:
"x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在/etc/shadow 文件中(为了保证密码安全)

UID:
UID,也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID
来识别不同的用户,实际上,UID 就是一个 0~65535 之间的数,不同范围
的数字表示不同的用户身份,具体如表所示

GID:
全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号

描述性信息:
这个字段并没有什么重要的用途,只是用来解释这个用户的意义而已。

主目录:
也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。

默认Shell:
Shell就是Linux的命令解释器,是用户和Linux内核之间沟通的桥梁。

用户登陆Linux系统后,通过使用Linux命令完成操作任务,但系统只认识类似0101的机器语言,这里就需要使用命令解释器。也就是说,
Shell命令解释器的功能就是将用户输入的命令转换成系统可以识别的机器语言。
通常情况下,Linux系统默认使用的命令解释器是bash(/bin/bash),当然还有其他命令解释器,例如 sh、csh 等。

/etc/passwd 文件中,可以把这个字段理解为用户登录之后所拥有的权限。如果这里使用的是bash命令解释器,就代表这个用户拥有权限范围内的所有权限。
例如:

[root@localhost ~]# vi /etc/passwd
lamp:x:502:502::/home/lamp:/bin/bash

我手工添加了lamp用户,它使用的是bash命令解释器,那么这个用户就可以使用普通用户的所有权限。
如果把lamp用户的Shell 命令解释器修改为 /sbin/nologin,那么,这个用户就不能登录了,例如:

[root@localhost ~]# vi /etc/passwd
lamp:x:502:502::/home/lamp:/sbin/nologin

因为 /sbin/nologin 就是禁止登录的Shell。同样,如果我在这里放入的系统命令,如 /usr/bin/passwd
例如:

[root@localhost ~]#vi /etc/passwds
lamp:x:502:502::/home/lamp:/usr/bin/passwd

那么这个用户可以登录,但登录之后就只能修改自己的密码。但是不能随便写入和登陆没有关系的命令(如 ls),系统不会识别这些命令,同时也就意味着这个用户不能登录。

/etc/shadow

/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
前面介绍了/etc/passwd 文件,由于该文件允许所有用户读取,易导致用户密码泄露,因此Linux系统将用户的密码信息从/etc/passwd 文件中分离出来,并单独放到了此文件中。
/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。

同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 ":" 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

忘记密码

对于普通账户的密码遗失,可以通过 root 账户解决,它会重新给你配置好指定账户的密码,而不需知道你原有的密码(利用 root 的身份使用 passwd 命令即可)。
如果root账号的密码遗失,则需要重新启动进入单用户模式,系统会提供 root权限的 bash 接口,此时可以用 passwd 命令修改账户密码;
也可以通过挂载根目录,修改 /etc/shadow,将账户的 root 密码清空的方法,此方式可使用root无密码即可登陆,建议登陆后使用passwd命令配置root密码。
如下:

$ passwd user_name

添加新用户

Linux系统中,可以使用useradd命令新建用户,此命令的基本格式如下

[root@localhost ~]#useradd [选项] 用户名
[root@localhost ~]# useradd lamp

条简单的命令,它会完成以下几项操作:

  1. 在 /etc/passwd 文件中创建一行与 lamp 用户相关的数据:
[root@localhost ~]# grep "lamp" /etc/passwd
lamp:x:500:500::/home/lamp:/bin/bash

可以看到,用户的 UID 是从 500 开始计算的。同时默认指定了用户的家目
录为 /home/lamp/,用户的登录 Shell 为 /bin/bash。

  1. 在 /etc/shadow 文件中新增了一行与 lamp 用户密码相关的数据:
[root@localhost ~]# grep "lamp" /etc/shadow
lamp:!!:15710:0:99999:7:::

当然,这个用户还没有设置密码,所以密码字段是 "!!",代表这个用户没有合理密码,不能正常登录。
同时会按照默认值设定时间字段,例如密码有效期有 99999 天,距离密码过期7天系统会提示用户“密码即将过期”等。

  1. 在 /etc/group文件中创建一行与用户名一模一样的群组,该群组会作为新建用户的初始组。
[root@localhost ~]# grep "lamp" /etc/group
lamp:x:500:
  1. 在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息:
    当然,我们没有设定组密码,所以这里没有密码,也没有组管理员。
[root@localhost ~]# grep "lamp" /etc/gshadowlamp:!::
  1. 默认创建用户的主目录和邮箱:
    注意这两个文件的权限,都要让lamp用户拥有相应的权限。
[root@localhost ~]#ll -d /home/lamp/
drwx------ 3 lamp lamp 4096 16 00:19 /home/lamp/
[root@localhost ~]#ll /var/spool/mail/lamp
-rw-rw---- 1 lamp mail 0 16 00:19 /var/spool/mail/lamp
  1. 将 /etc/skel目录中的配置文件复制到新用户的主目录中

备注:useradd 命令在添加用户时参考的默认值文件主要有两个,分别是
/etc/default/useradd 和 /etc/login.defs
流程:useradd 命令创建用户的过程是这样的,系统首先读取 /etc/login.defs
和 /etc/default/useradd,根据这两个配置文件中定义的规则添加用户,也就是
向 /etc/passwd、/etc/group、/etc/shadow、/etc/gshadow 文件中添加用户
数据,接着系统会自动在 /etc/default/useradd 文件设定的目录下建立用户主
目录,最后复制 /etc/skel 目录中的所有文件到此主目录中,由此,一个新的用
户就创建完成了。

删除用户

userdel 命令功能很简单,就是删除用户的相关数据。此命令只有root用户才能使用。
用户的相关数据包含如下几项:
用户基本信息:存储在 /etc/passwd 文件中;
用户密码信息:存储在 /etc/shadow 文件中;
用户群组基本信息:存储在 /etc/group 文件中;
用户群组信息信息:存储在 /etc/gshadow 文件中;
用户个人文件:主目录默认位于 /home/用户名,邮箱位于/var/spool/mail/用户名。
userdel 命令的作用就是从以上文件中,删除与指定用户有关的数据信
息。
userdel 命令的语法很简单,基本格式如下:

[root@localhost ~]# userdel -r 用户名
-r 选项表示在删除用户的同时删除用户的家目录。

注意,在删除用户的同时如果不删除用户的家目录,那么家目录就会变成没有属主和属组的目录,也就是垃圾文件。
例如,删除lamp用户,只需执行如下命令:

[root@localhost ~]# userdel -r lamp

Linux的用户管理总结

添加用户:useradd
修改密码:passwd 普通用户只能修改自己,root可以修改所有人
临时root权限:sudo

posted on   饿得慌~  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示