用户和用户组-10.18

用户和用户组

概念

在Linux系统中,用户(User)和用户组(Group)是权限管理的核心概念,用于控制系统资源的访问和操作权限。

用户(User)

用户是Linux系统中的一个账户,每个用户都有一个唯一的用户ID(UID)。用户可以是系统用户或普通用户。

  • 用户ID(UID):每个用户都有一个唯一的用户ID,系统通过UID来标识用户。

    • 一般来说,UID为0的是超级用户(root),拥有系统所有的权限。
    • 普通用户的UID通常从1000开始。
  • 主目录:每个用户都有自己的主目录(通常在/home下),用户在自己的主目录下有完全的读写权限。

  • shell:每个用户都有一个默认的命令解释器(Shell),用户可以通过Shell与系统交互。

类型:

  • 超级用户 :

    • 拥有最高权限(uid=0,gid=0)。
    • 不建议在生产环境中使用,因为权限过大而容易导致安全问题。
  • 普通用户:

    • uid 通常为 1000 或更高(具体值可能因发行版而异)。
    • 用于日常系统管理,具有一定权限,但可以通过授权提升权限。
  • 程序用户:

    • uid 在 1 到 999 范围内。
    • 用于守护进程或服务的资源访问。
    • 一般无法登录系统,默认 shell 为 /sbin/nologin。
    • 服务运行需要这些用户存在。

作用:

  • 确保多用户系统中的安全性,每个用户只能访问自己有权限的资源。
  • 提供独立的工作环境,用户可以保存个人配置、文件和工作进程。

用户组(Group)

用户组是用户的集合,用于简化和集中管理用户权限。每个组都有一个唯一的组ID(GID),一个用户可以属于一个或多个用户组。

  • 组ID(GID):每个组都有一个唯一的组ID,用来标识用户组。

  • 初始组和附加组:

    • 初始组(Primary Group):用户默认所属的组,当用户创建文件时,文件的所属组为初始组。
    • 附加组(Supplementary Group):用户可以属于多个附加组,提供更多的资源访问权限。
  • 组文件:用户组信息存储在/etc/group文件中,用户信息存储在/etc/passwd文件中。

类型:

基本组(主组):

  • 用户创建时自动生成,可以称为主组。
  • 允许其他用户加入,不一定是该用户自己创建的。
  • 有些用户可能没有独立的主组,而是属于一个共享的基本组。

附加组:

  • 独立创建,与用户无关。
  • 附加组不能作为用户的主组。

配置文件位置:

  • 用户组信息存储在 `/etc/group` 文件中。
  • 文件格式包括:用户组名称、密码占位符、组 ID 和成员列表。

作用:

  • 通过将多个用户添加到同一个组,简化权限的管理。用户组可以对文件、目录或设备赋予读、写、执行权限,使得同组用户能够共享访问权限。
  • 在权限设置上,文件或目录可以指定所属的用户和用户组,以便更细粒度地控制资源访问。

相关查询

  • 查询当前用户的uid和gid:id

  • 查询系统所有用户:/etc/passwd

  • 格式:用户名:密码占位符:uid:gid:用户备注:用户家目录:用户shell类型
  • 其中如果取消密码占位符则可实现本地免密登录,但是不能远程登陆
  • 真正的密码存储在/etc/shadow
  • 用户备注通常为空
  • 查询保存用户的账号、密码、有效期等:/etc/shadow

  • 格式:用户名:加密的密码:密码最近更改时间:密码修改冷却时间:密码最长有效期:警告时间(默认无限长,提示修改时间):不活动时间:失效时间:标志

相关命令

用户相关

添加用户

格式:useradd [option] 用户名

选项:

  • -u :自定义UID,但是不能超过/etc/login.defs中设置的UIDMAX
  • -g :自定义GID或者组名,前提是这个GID已经存在。如果删除某个组,要先删除其组中的成员。
  • -d :自定义用户的家目录,需要使用绝对路径,且目录不存在
  • -M :不使用用户的家目录,是系统账号的默认值,在创建程序用户时使用
  • -s :自定义shell,默认为/etc/default/useradd中定义的shell
  • -G :指定附加组,可指定多个
  • -r :创建UID小于1000的系统用户,此用户默认没有家目录

修改用户属性信息

格式:usermod [option] 用户名

选项:

  • -l :修改用户名,格式为usermod -l newname oldname
  • -u :修改用户uid
  • -g :放弃当前组,加入其他组,适用于主组
  • -G :修改并替换当前的附加组
  • -a :将用户追加进某个组,配合-G使用,不覆盖原组
  • -L :锁定用户
  • -U :解锁用户

-g修改

-G修改一个组

-G修改多个附加组

删除用户

被删除的用户不能处于登录状态,不能是别的用户的主组。

  • 解释:

    在Linux系统中,每个用户都有一个主组(Primary Group),这是用户在创建时默认被分配的组。通常,用户的主组与用户名相同。例如,当创建用户user1时,系统会默认创建一个同名的组user1,并将该用户的主组设置为user1。

    当使用userdel命令删除用户时,如果该用户是某个组的“主组成员”(即该组是用户的主组),则该组会和用户一起被删除(前提是没有其他用户属于这个组)。不过,如果有其他用户也属于这个组,或该用户被指定为其他组的主组成员,就会产生冲突。这时,系统不允许直接删除该用户,因为这会导致组的管理出现问题。

格式:userdel [-r] 用户名

-r 参数为同时删除用户的目录

修改密码

格式:passwd

普通用户只能修改自己的密码,超级用户可以修改任何用户的密码

使用方法:

  • passwd username

    • 修改username的密码
  • passwd --stdin username <<< password

    • 使用重定向的方法修改密码

用户组相关

添加用户组

格式:groupadd [-g GID] 用户组

如果添加-g则按照用户自定义的标识符GID,不添加则系统默认创建

修改用户组

格式:groupmod [option] 用户组名

选项:

  • -g :修改现有的组的GID
  • -n :修改现有的组的组名

删除用户组

格式:groupdel 用户组名

如果删除的用户组为某个用户的基本组(主组),那么不能对其进行删除

其他命令

id

格式:id [option] [username]

选项:

  • -u :显示用户的ID
  • -g :显示用户所属组的ID
  • -G :显示用户附加组的ID
  • -n :显示用户、所属组、所属附加组的名称,不能单独使用

su

主要用于切换用户

su USER:非登录切换

su - USER:登陆切换,读取相应信息的配置文件

pwck

审计密码文件的完整性

chage

修改用户和密码的有效期

chsh

修改指定用户的shell

posted @ 2024-12-04 14:23  阳光彩虹小能猫  阅读(60)  评论(0)    收藏  举报