2024-03-21
Linux
00
请注意,本文编写于 108 天前,最后修改于 100 天前,其中某些信息可能已经过时。

目录

用户/组基本概念与特性
查看用户的 uid/gid
用户基本信息文件
用户名
密码
UID
GID
描述性信息
主目录
Shell
用户的密码文件
组文件信息
用户/组基本管理
useradd
passwd
userdel
usermod
lchage
w
groupadd
groupdel
usermod

用户/组基本概念与特性

系统上的每个进程(正在运行的程序)都以特定用户的身份运行。每个文件都由特定的用户拥有。对文件和目录的访问受用户限制。与正在运行的进程关联的用户确定该进程可访问的文件和目录

查看用户的 uid/gid

bash
[root@localhost ~]# id root uid=0(root) gid=0(root) 组=0(root)

能看到 uid(用户ID), gid(初始组ID), groups 是用户所在组,这里既可以看到初始组,如果有附加组,则也能看到附加组.

用户基本信息文件

用户基本信息文件存在于 /etc/passwd 中,由 : 分割为 7 段字符

bash
用户名 : 密码 : UID : GID : 描述性信息 : 主目录 : 默认 Shell

用户名

用户名,就是一串代表用户身份的字符串。用户名仅是为了方便用户记忆,Linux 系统是通过 UID 来识别用户身份,分配用户权限的。/etc/passwd 文件中就定义了用户名和 UID 之间的对应关系。

密码

x 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中。为了防止密码的泄露,现 Linux 系统把真正的加密密码串放置在 etc/shadow 文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全。需要注意的是,虽然 x 并不表示真正的密码,但也不能删除,如果删除了 x ,那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆。

UID

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

在 CentOS7 的 Linux 系统中 UID:0 为超管的 uid;

1~999 为系统自行创建的 uid,保留给系统使用;

1000~2^32 为普通用户的 uid。

GID

全称 Group ID ,简称 组ID ,表示用户初始组的 组ID 号。

初始组,指用户登陆时就拥有这个用户组的相关权限。每个用户的初始组只能有一个,通常就是将和此用户的用户名相同的组名作为该用户的初始组。比如说,我们手工添加用户 user001 ,在建立用户 user001 的同时,就会建立 user001 组作为 user001 用户的初始组。

附加组,指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组外,用户再加入其他的用户组,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限。

描述性信息

这个字段没有重要的意义,只用来添加解释。

主目录

用户登录后有操作权限的访问目录,称为用户的主目录。

Shell

Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。Linux 系统默认使用的命令解释器 bash(/bin/bash),如果我把 lamp 用户的 Shell 命令解释器修改为 /sbin/nologin,那么,这个用户就不能登录了。

用户的密码文件

/etc/shadow, 用于存储 Linux 系统中用户的密码信息

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

组文件信息

/etc/group 是用户组配置文件

bash
组名 : 密码 : GID : 该用户组中的用户列表

用户/组基本管理

useradd

useradd 命令用于建立用户账号。如果没有 -D 选项的情况下调用,useradd 命令将使用命令行上指定的值加上系统中的默认值创建一个新的用户账户。

  • 使用语法:
  1. `useradd -D:查看创建用户的默认值
  2. `useradd [选项] 用户名:根据选项创建用户
  • 参数说明:
  1. -b:新账户主目录的基本目录
  2. -c:新账户的 GECOS 字段
  3. -d:新账户的主目录
  4. -D:打印或更改默认用户添加配置
  5. -e:新账户到期时间
  6. -f:新账户的密码不活动期
  7. -g:新账户的主组的名称或 ID
  8. -G:新账户的补充组列表
  9. -h:显示此帮助详细并退出
  10. -k:使用这个替代的框架目录
  11. -K:覆盖 /etc/login.defs 默认值
  12. -l:不要将用户添加到 lastlogfaillog 数据库
  13. -m:创建用户的主目录
  14. -M:不要创建用户的主目录
  15. -N:不要创建与用户同名的组
  16. -o:允许创建具有重复(非唯一)UID 的用户
  17. -p:新账户的加密密码
  18. -r:创建一个系统账户
  19. -R:要导入的目录
  20. -u:新账户的用户 ID
  21. -U:创建于用户同名的组

passwd

设置密码,远程ssh连接是需要密码的,所以想让某个用户登录系统,必须设置密码

  • 用 root 用户给普通用户修改密码
bash
passwd test1 [root@localhost ~]# passwd test1 更改用户 test1 的密码 。 新的 密码:123456 无效的密码: 密码是一个回文 重新输入新的 密码:123456 passwd:所有的身份验证令牌已经成功更新。
  • 普通用户自己修改密码
bash
[test1@localhost ~]$ passwd # 给当前登录用户修改密码,root用户修改密码不需要输入旧密码,普通用户需要输入旧密码 更改用户 test1 的密码 。 为 test1 更改 STRESS 密码。 (当前)UNIX 密码: 新的 密码: 无效的密码: 密码少于 8 个字符 新的 密码: 无效的密码: 密码少于 8 个字符 新的 密码: 无效的密码: 密码未通过字典检查 - 过于简单化/系统化 passwd: 已经超出服务重试的最多次数

一般 Linux 的密码是有复杂度要求的,比如下面这种密码就可以通过:大小写组合、数字、特殊字符组合起来超过8位。

bash
LyuRrx@qq.COM LyuRrx@XSWL
  • 免交互修改密码

这样不需要输入两次密码确认。echo 是打印的意思,有结果输出给 passwd 命令来修改 test1 用户的密码。

bash
echo 123456|passwd --stdin test1

这种一般同时改多个 Linux 服务器系统的密码时比较方便。

userdel

删除用户

被删除的用户还在登录状态,是不能删除的。被删除的用户,退出登录之后,可以正常删除.

bash
[root@localhost ~]# userdel test1 userdel: user test1 is currently used by process 2356 [root@localhost ~]# userdel test1

Linux 删除用户之后,/home/ 目录下对应的用户文件夹还在,如果还想加回来这个用户,那么会提示家目录存 在,不会从样板目录 (skel) 中复制任何文件了,通过 ls -a /etc/skel ,可以看到 skel 目录下的内容了。

还提示邮箱文件已经存在,ls /var/spool/mail 下面。

windows 删除用户之后,C:\Users 目录下的用户文件夹也还在。

注意:删除之后的用户,再次创建出来,密码是需要重新设置的。

bash
userdel -r test1

删除用户,并删除用户相关目录。

usermod

修改用户信息,修改属性

modify 它有很多选项(参数),-L 是锁定用户,通过命令 -h(或者--help,一个-后面一般跟一个字母即可,两个-后面一般跟完整单词) ,可以查看命令的各种选项的意思,比如 usermod -h

  • 锁定用户
bash
[root@localhost ~]# usermod -L test1 # 被锁定的用户,下次就登录不上系统了。 [root@localhost ~]# usermod -U test1 # 解锁用户 [root@localhost ~]# lchage -l test1 # 查看用户详细信息 帐号被锁。 至少: 0 至多: 99999 警告: 7 不活跃: 从不 最后一次改变: 2021年07月20日 密码过期: 从不 密码不活跃: 从不 帐号过期: 从不
  • 禁止用户登录
bash
[root@localhost ~]# usermod -s /sbin/nologin test2 [root@localhost ~]# grep -w 'test2' /etc/passwd test2:x:1001:1001::/home/test2:/sbin/nologin

lchage

查看用户详细信息

bash
[root@localhost ~]# lchage -l test1 帐号没被锁。 至少: 0 至多: 99999 警告: 7 不活跃: 从不 最后一次改变: 2021年07月20日 密码过期: 从不 密码不活跃: 从不 帐号过期: 从不

所有的用户信息存储在 /etc/passwd 文件中,每创建一个用户该文件就会多一行记录。

w

查看当前登录了几个用户,或者打开了几个终端

登录主机的两种方式:

  1. 本地登录:直接在主机上输入用户名和密码登录
  2. 远程登录:ssh远程登录

windows 默认只能同时一个用户登录,登录另外一个用户,前一个用户就会自动下线。

linux 支持多个用户在多个地方同时登录一个系统,每个用户都有一个终端来控制操作系统。终端的意思就是连接窗口。

bash
w 12:15:42 up 21 min, 2 users, load average: 0.00, 0.01, 0.03 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 12:15 6.00s 0.00s 0.00s -bash root pts/0 192.168.61.1 11:55 6.00s 0.02s 0.01s w

tty1 表示本地登录的、pts/0 表示远程登录的。

groupadd

/etc/group 是 Linux 系统中记录用户组的信息的文件。

用法:

bash
groupadd [选项] 组

选项:

  • -f:如果组已经存在则成功退出,并且如果 GID 已经存在则取消
  • -g:为新的组使用 GID
  • -h:显示此帮助信息并退出
  • -k:不使用 /etc/login.defs 中的默认值
  • -o:允许创建有重复 GID 的组
  • -p:为新组使用此加密过的密码
  • -r:创建一个系统账户

新建组

bash
[root@localhost ~]# groupadd test [root@localhost ~]# tail -1 /etc/group test:x:1000:

groupadd -g 指定组 ID

bash
[root@localhost ~]# groupadd -g 500 test [root@localhost ~]# tail -1 /etc/group test:x:500:

groupdel

删除组,如果组内有用户,会报错,需要先删除主组属于这个组的所有用户(userdel -r 用户名),或者将用户移到其他的组之后在删除组。

bash
groupdel 组名

修改组名,将 test1 组名修改为 test2

bash
groupdel -n test1 test2

usermod

修改用户所属的主组

test2 用户的主组改为 test1,然后就可以删除 test2 组了

bash
[root@localhost ~]# usermod -g test1 test2 [root@localhost ~]# groupdel test1

将用户添加到多个其他组中,将 test2 用户也添加到 test1 组中

bash
[root@localhost ~]# usermod -G test1 test2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:@Rrx

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!