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系统中,提供了命令pwunconv和psconv。
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