Linux 用户和组的概念

来自CloudWiki
跳转至: 导航搜索

用户和组

Linux基于用户身份对资源访问进行控制

Linux3-103.jpg

假设:你有一套非常好的漫画,同宿舍的及班里班外的人都想看 ?你怎么办呢 ?

一种办法是对所有人都赋予相同的权限,但是这样漫画主人可能就比较吃亏;

还一种办法是对所有人根据远近亲疏授予不同的权限,你自己和同宿舍的可以多看,本班和外班的可以少看。这就是Linux将用户划分为不同类别的缘由。

用户的类别

Linux下的用户可以分为三类:超级用户、系统用户和普通用户。

超级用户

超级用户的用户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。

普通用户

而普通用户是为了让使用者能够使用Linux系统资源而建立的,我们的大多数用户属于此类。

系统用户

系统用户是Linux系统正常工作所必需的内建的用户,主要是为了满足相应的系统进程对文件属主的要求而建立的,系统用户不能用来登录,例如:bin、daemon、adm、lp等用户。


每个用户都有一个数值,称为UID。超级用户的UID为0,系统用户的UID一般为1~499,普通用户的UID为500~60 000之间的值。

什么是组

组是Linux对用户的划分。

用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组。这样用户组下的用户对该文件或目录都具有相同的权限。

举例:对于一份时间表

 一些用户只能查看时间表的内容而不能修改
 另一些用户具有读写时间表的权限

这样我们就可以把用户划分为两组,一组只能读这个文档,一组可以读、可以写。

初始组、系统组和标准组

Linux的组有私有组、系统组、标准组之分。建立账户时,若没有指定账户所属的组,系统会建立一个组名和用户名相同的组,这个组就是私有组,这个组只容纳了一个用户。而标准组可以容纳多个用户,组中的用户都具有组所拥有的权利。系统组是Linux系统正常运行所必需的,安装Linux系统或添加新的软件包会自动建立系统组。

Linux系统关于组的信息存放在文件/etc/group中


组标识号: GID(Group Identify,组标识号)

关联知识: UID(User Identity,用户标识号) GID(Group Identify,组标识号)

用户和组的关系

用户和用户组的对应关系是:一对一、多对一、一对多或多对多;

  • 一对一:某个用户可以是某个组的唯一成员;
  • 多对一:多个用户可以是某个唯一的组的成员,不归属其它用户组;比如beinan和linuxsir两个用户只归属于beinan用户组;
  • 一对多:某个用户可以是多个用户组的成员;比如beinan可以是root组成员,也可以是linuxsir用户组成员,还可以是adm用户组成员;

用户和组文件

用户帐号文件 —— passwd

用于保存用户的帐号基本信息

文件位置:/etc/passwd

每一行对应一个用户的帐号记录

[root@localhost ~]# tail -2 /etc/passwd
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
student:x:500:500:Student User:/home/student:/bin/bash
  • 字段1:用户帐号的名称
  • 字段2:用户密码字串或者密码占位符“x”
  • 字段3:用户帐号的UID号
  • 字段4:所属基本组帐号的GID号
  • 字段5:用户全名
  • 字段6:宿主目录
  • 字段7:登录Shell信息


cat /etc/passwd查看所有的用户信息,详情如下图

文件:Linux3-101.jpg

从文件中我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

用户帐号文件 —— shadow

由于文件是任何用户都有权限读取的,所以用户口令很容易被黑客盗取,针对这种情况,linux使用影子文件/etc/shadow,来提高口令的安全性。

/etc/shadow用于保存密码字串、密码有效期等信息

文件位置:/etc/shadow

每一行对应一个用户的密码记录

[root@localhost ~]# tail -2 /etc/shadow
sabayon:!!:15495:0:99999:7:::
student:$1$po/zD0XK$4HSh/Aeae/eJ6dNj1k7Oz1:15495:0:99999:7:::
  • 字段1:用户帐号的名称
  • 字段2:加密的密码字串信息
  • 字段3:上次修改密码的时间
  • 字段4:密码的最短有效天数,默认值为0
  • 字段5:密码的最长有效天数,默认值为99999
  • 字段6:提前多少天警告用户口令将过期,默认值为7
  • 字段7:在密码过期之后多少天禁用此用户
  • 字段8:帐号失效时间,默认值为空
  • 字段9:保留字段(未使用)


思考:哪些文件是用户账号文件?

用户帐号的初始配置文件

文件来源:

新建用户帐号时,从 /etc/skel 目录中复制而来

主要的用户初始配置文件

~/.bash_profile:用户每次登录时执行
~/.bashrc:每次进入新的Bash环境时执行
~/.bash_logout:用户每次退出登录时执行

[root@maxin ~]# cat ~/.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH


组帐号文件 — group、gshadow

与用户帐号文件相类似

/etc/group:保存组帐号基本信息
/etc/gshadow:保存组帐号的密码信息
[root@localhost ~]# grep "adm" /etc/group
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon