Linux 用户与群组

548 阅读4分钟

用户(User)

  • 系统中的每一个用户都有一个唯一的用户标识符(号码),即uid(user identifier)

uid 0root 用户的标识符。)

  • 所有的用户名和用户标识符都被存放在 /etc/passwd 文件中。

  • passwd 文件中还存放了每个用户的家目录,以及该用户登录后第一个执行的程序(通常是 shell,在很多 Linux 系统中默认是 bash。)

  • 如果没有相应的权限就不能读、写或执行其他用户的文件。

  • passwd 文件:/etc/passwd 用户信息数据库:储存用户信息

/etc/passwd 的内容:

exp  :  x  :     500    :       500     : Example_User: /home/exp : /bin/bash
用户名:密码否:uid(用户ID):gid(所属群组ID): 注释信息     : 家目录     : 启动后第一个执行程序

关于第二个字段:如果是x,表示这个用户登录Linux系统时必须使用密码,如果为则该用户在登录系统时无须提供密码。

  • shadow文件:/etc/shadow 用户密码数据库:里储存用户密码

⚠️ 普通用户无权访问 /etc/shadow

/etc/shadow 的内容:

e.g|  exp :$1$wg...w4:14561:0:99999:7:::

说明| 用户名:   密码   :      :      :  :::

关于第二个字段:第 2 列是密码,这个密码是经过 MD5 加密算法加密过的密码。

  • 如果该列以 $1$ 开头,则表示这个用户已经设定了密码。 (包括手动把 passwd 中的 x 去掉,不用密码即可登录的“空秘密”)

  • 如果该列以 !! 开头,则表示这个用户还没有设定密码。 (新建后 passwd -S 显示 Password locked 的状态,这种用户不可登录)

用户操作

su:切换用户

$ su [-] 用户名
  • - 加上 - 则重启shell,重装 $PATH(环境变量),pwd切换至用户名的 $HOME(家目录);无则不变环境变量(检索命令的目录),pwd不变

  • 用户名:可以不写,缺省为 root

[me@Example ~]$ su - root
密码:
[root@Example~]# whoami
root
[root@Example~]# exit
logout
[me@Example~]$ whoami
me

passwd:修改密码

1⃣️ 普通用户:

$ passwd            修改当前用户密码

多按几个回车可取消退出

对于root “too short”的密码重输也可以成功

2⃣️ root:

# passwd username    修改某用户密码
# passwd -S username    查看密码状态,【注意】S大写

新建、删除用户

  1. useradd:新建用户:# useradd new_user_name
[root@CDFMLR ~]# **useradd** newone

[root@CDFMLR ~]# passwd -S newone

newone LK [2018-08-18 0 99999 7 -1]() (密码已被锁定。)    # 说明密码未设定

[root@CDFMLR ~]# passwd newone

更改用户 newone 的密码 。

新的 密码:             # 尝试键入一个弱口令

无效的密码:  过于简单化/系统化        # 提示口令过于简单,但不阻止

重新输入新的 密码:                   # 仍输入那个弱口令,可以成功,因为是root

passwd: 所有的身份验证令牌已经成功更新。

# 如果是普通用户,键入弱口令不可成。(不会叫“Retype“,而是“New“)

[root@CDFMLR ~]# passwd -S newone

newone PS [2018-08-18 0 99999 7 -1]() (密码已设置,使用 SHA512 加密。
  1. userdel:删除用户: userdel [-r] [-f] user_name
  • -r :同时删除用户的家目录
    • -r 时,家目录不会被删除
  • -f :强行删除,哪怕用户已登录,这个选项有些危险,会使系统进入不一致状态
[root@Example ~]# userdel -r newone
userdel: user newone is currently used by process 3848    # 用户正登录,删除失败
[root@Example ~]# userdel -fr newone                      # 用 -f 强行删除
userdel: user newone is currently used by process 3848    # 说明用户正登录,但命令本身已经成功
# 这时虽然还被删user还是登入、活跃状态,但已经被删除,登出后不可再登入

--------------------

[newone@Example ~]$ exit      # 退出用户
logout

--------------------

[root@Example ~]# userdel -r newone  # 再作尝试删除时,确定用户已被之前的 -f 删除
userdel:用户“newone”不存在
[root@Example ~]# ls /home
c  lost+found                        # 家目录已被 -r 删除

参考:

www.linuxidc.com/Linux/2016-…

群组(Group)

  • Linux群组的特性

  • Linux系统中,每一个用户都一定隶属于至少一个群组,而每一个群组都有一个 group 标识符(号码),即 gid

  • 所有的群组和对应的gids都存放在 /etc/group 文件中。

  • Linux系统在创建用户时为每一个用户创建一个同名的群组并且把这个用户加入到该群组中,也就是说每个用户至少会加入一个与他同名的群组中,并且也可以加入到其他的群组中。加入到其他群组的目的是为了获取适当的权限来访问(存取)特定的资源。

  • 如果有一个文件属于某个群组,那么这个群组中所有的用户都可以存取这个文件。

group 文件

/etc/group 保存着群组信息。示例内容:

foobar :   x   : 503 : foo,bar
群组名  : 密码否 : gid : 群组成员

第二字段为 x 表示这个群组在登录 Linux 时必须使用密码。

gshadow 文件

/etc/gshadow 保存着群组信息。

⚠️普通用户无权访问 /etc/gshadow

# more /etc/gshadow

root:::root            # 在gshadow中,每个群组占一行记录

bin:::root,bin,daemon ......

foo:!::

bar:!::

群组名:加密后的密码::