Linux系统的账号

Linux系统的账号


1、概述

1.1、用户(user)的概念

通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(user)。

比如我们的同事想用我的计算机,但我不想让他用我的用户名登录,因为我的用户名下有不想让别人看到的资料和信息(也就是隐私内容)这时我就可以给他建一个新的用户名,让他用我所开的用户名去折腾,这从计算机安全角度来说是符合操作规则的;

当然用户(user)的概念理解还不仅仅于此,在Linux系统中还有一些用户是用来完成特定任务的,比如nobody和ftp 等,我们访问LinuxSir.Org 的网页程序,就是nobody用户;我们匿名访问ftp 时,会用到用户ftp或nobody ;如果您想了解Linux系统的一些帐号,请查看 /etc/passwd ;


1.2、用户组(group)的概念

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

举例:我们为了让一些用户有权限查看某一文档,比如是一个时间表,而编写时间表的人要具有读写执行的权限,我们想让一些用户知道这个时间表的内容,而不让他们修改,所以我们可以把这些用户都划到一个组,然后来修改这个文件的权限,让用户组可读,这样用户组下面的每个用户都是可读的;


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

一对一:某个用户可以是某个组的唯一成员;

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

一对多:某个用户可以是多个用户组的成员;比如beinan可以是root组成员,也可以是linuxsir用户组成员,还可以是adm用户组成员;

多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的组;其实多对多的关系是前面三条的扩展;理解了上面的三条,这条也能理解;


2、配置文件

2.1、/etc/passwd

该文件保存系统中所有用户的资料,但没有保存用户的密码。


为什么密码没有保存到passwd中?

因为在/etc/passwd文件中保存了用户信息,所以很多操作过程中会调用这些信息,调用这些信息的时候就会读取/etc/passwd文件,用“ll”命令可以看到每个用户对/etc/passwd文件都有读的权限,若是真的把加密后的密码放在/etc/passswd中,那么任何用户都可以拿到加密的密码,然后去尝试破解这个密码,这种情况就比较危险了。在早期,加密的密码的确是存在/etc/passwd文件中的,后面为了安全性考虑。将加密的密码文件存在了/etc/shadow(影子口令文件)中了。


2.1.1、passwd文件格式

下面是截取部分片段:

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

sys:x:3:3:sys:/dev:/usr/sbin/nologin

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/usr/sbin/nologin

man:x:6:12:man:/var/cache/man:/usr/sbin/nologin


每条记录对应一个用户账号,每条记录由七个字段组成,字段之间用冒号:分隔,以下是字段含义:

用户名:密码:UID:GID:注释:home目录:登录shell路径


  • 用户名 (username):这是用户账号的唯一标识符。用户在登录时使用此用户名。

  • 密码(password):该字段存放的是加密后的密码。通常,这个字段为空或者包含一个占位符(如x),实际的加密密码存储在/etc/shadow 文件中.

  • 用户ID (User ID,UID)这是用户的唯一标识符。在 Linux 系统中,系统使用 UID 来标识用户,而不是用户名。UID 是一个整数,不同用户的 UID 是互不相同的。

  • 组ID(Group ID,GID)这是与用户相关的组账号的唯一标识符。用户可以属于多个组。与 UID 类似,GID 也是一个整数,并且不同组的 GID 是互不相同的。

  • 注释字段 (comment)这个字段通常用于存储用户的全名、房间号、电话号码等信息,但这些信息通常没有固定的格式。

  • HOME目录 (home directory)这个字段指定了用户的家目录,即用户登录后所处的目录。默认情况下,新用户的HOME目录通常是/home/username'.

  • 默认的shell (shell)这个字段指定了用户的默认 shell,即用户登录后用来执行命令的程序。例如,`/bin/bash'或/usr/bin/zsh`.



2.2、/etc/shadow 

该文件称之为影子文件,用于保存用户的登录密码。

在早期,加密的密码的确是存在/etc/passwd文件中的,后面为了安全性考虑。将加密的密码文件存在了/etc/shadow(影子口令文件)中了。


注意:

/etc/passwd对所有用户都有读的权限

/etc/shadow只对root用户有读权限


2.2.1、shadow格式说明

下面采取一段shadow文件的格式:

root:$6$aSpwa4Va$3trQ3gR9MOOXaGz0.q8zn5Qrzz.0zRWRzzJwvGNvbhjmZKSfzJ50gAJH42vtqFatwcETU0JNrSJ3trwJW2dhr.:19298:0:99999:7:::

bin:*:18353:0:99999:7:::

ych:$6$XRpTtzPazFsNX7Uw$ZM8BPxZuRfsMz0PBxkOKIrLrwXXZtF9f7r9FZjUyx7bJItYcXtvBQB/IZQK2HHgk86yH/ffHmJZhP826uRzC1/::0:99999:7:::


  • 用户名(账户):用户登录系统时使用的用户名

  • 加密后的密码:若删除此密码,那么登录就不需要密码了

  • 最后一次修改时间:用户最后一次修改密码的天数(距离1970年1月1日有多少天,空字段表示密码年龄功能被禁用)

  • 最小时间间隔:两次修改密码之间的最小天数,空字段或0表示没有最小时间限制

  • 最大时间间隔:

    - 密码保持有效的最多天数,这些天之后,用户必须更改密码; 这些天之后,密码仍然可用。用户将会在下次登录的时候被要求更改密码。

    - 空字段表示没有最大密码年龄,没有密码警告时间段,没有密码禁用时间段-

    - 99999表示不限定

    - 如果最大密码年龄小于最小密码年龄,用户将会不能更改密码。

  • 警告时间:

    - 密码过期之前,提前警告用户的的天数。

    - 空字段或者 0 表示没有密码警告期。

  • 账号闲置时间:

    - 密码过期(查看上边的密码最大时间间隔)后,仍然接受此密码的天数(在此期间,用户应该在下次登录时修改密码)。

    - 空字段表示没有强制密码过期。

  • 失效时间:密码失效的绝对天数。可以在不删除用户的情况下锁定用户,不让其登录

  • 标志一般不使用


2.2.2、关于修改密码

用户密码信息存放在/etc/shadow文件中,为什么在/etc/passwd中还要继续留着那个密码位呢,删除不好吗?

[root@centos01 ~]# grep root /etc/passwd /etc/shadow

/etc/passwd:root:x:0:0:root:/root:/bin/bash

/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin

/etc/shadow:root:$6$aSpwa4Va$3trQ3gR9MOOXaGz0.q8zn5Qrzz.0zRWRzzJwvGNvbhjmZKSfzJ50gAJH42vtqFatwcETU0JNrSJ3trwJW2dhr.:19298:0:99999:7:::


解释:其实,在真正我们添加用户设置密码或者修改密码的时候,是先把加密密码写到/etc/passwd中的,然后系统调用pwconv将加密密码转换到/etc/shadow中的。

在Linux系统中,提供了命令pwunconvpsconv

pwunconv作用是将/etc/shadow中的加密密码写到/etc/passwd中;

pwconv是将/etc/passwd中的加密密码信息写到/etc/shadow中。


2.3、/etc/default/useradd

该文件存储创建新用户的默认配置。


2.3、/etc/group

用户组的配置文件;


2.4、/etc/gshadow

用户组的影子文件;


2.5、/etc/sudoers


阅读 171