/etc/passwd文件

/etc/passwd文件的内容如下:

1root:x:0:0:root:/root:/bin/bash
2daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3bin:x:2:2:bin:/bin:/bin/sh
4sys:x:3:3:sys:/dev:/bin/sh
5sync:x:4::sync:/bin:/bin/sync
6games:x:5:60:games:/usr/games:/bin/sh
7...

每一行是由分号分隔的字串组成,它的格式如下:

1username:password:uid:gid:gecos:homedir:shell
2各域对应的中文说明如下:
3用户名:密码:用户ID:组ID:用户全名:主目录:登录shell

/etc/group文件

用户组的所有信息都存放在/etc/group文件中

将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段。每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。

用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。用户组的所有信息都存放在/etc/group文件中。此文件的格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段,这些字段有:

组名:口令:组标识号:组内用户列表
1)“组名”是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
2)“口令”字段存放的是用户组加密后的口令字。一般Linux系统的用户组都没有口令,即这个字段一般为空,或者是*。
3)“组标识号”与用户标识号类似,也是一个整数,被系统内部用来标识组。root组的标识是0
4)“组内用户列表”是属于这个组的所有用户的列表/b],不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
/etc/group文件的一个例子如下:

1#cat/etc/group
2root::0:root
3bin::2:root,bin
4sys::3:root,uucp
5adm::4:root,adm
6daemon::5:root,daemon
7lp::7:root,lp
8users::20:root,sam

/etc/shadow文件

shadow 是 passwd 的影子文件。在linux中,口令文件在/etc/passwd中,早期的这个文件直接存放加密后的密码,前两位是”盐”值,是一个随机数,后面跟的是加密的密码。为了安全,现在的linux都提供了 /etc/shadow这个影子文件,密码放在这个文件里面,并且是只有root可读的。/etc/passwd文件的每个条目有7个域,分别是

1名字:密码:用户id:组id:用户信息:主目录:shell
2例如:ynguo:x:509:510::/home/ynguo:/bin/bash

在利用了shadow文件的情况下,密码用一个x表示,普通用户看不到任何密码信息。影子口令文件保存加密的口令;/etc/passwd文件中的密码全部变成x。Shadow只能是root可读,从而保证了安全。

/etc/shadow文件每一行的格式如下:用户名:加密口令:上一次修改的时间(从1970年1月1日起的天数):口令在两次修改间的最小天数:口令修改之前向用户发出警告的天数:口令终止后账号被禁用的天数:从1970年1月1日起账号被禁用的天数:保留域。

1例如:root:$1$t4sFPHBq$JXgSGgvkgBDD/D7FVVBBm0:11037:0:99999:7:-1:-1:1075498172
2 
3/etc/gshadow文件的每一行,以“:”分隔成4个字段。
41.         用户组名
52.         用户组密码
63.         用户组管理员的名称
74.         支持的账号名称

/etc/gshadow文件

/etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。/etc/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极有必要的。比如我们不想让一些非用户组成员永久拥有用户组的权限和特性,这时我们可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用到用户组密码;

1/etc/gshadow 格式如下,每个用户组独占一行;
2groupname:password:admin,admin,...:member,member,...
3第一字段:用户组
4第二字段:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;
5第三字段:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;
6第四字段:组成员,如果有多个成员,用,号分割;

举例:

1beinan:!::linuxsir
2linuxsir:oUS/q7NH75RhQ::linuxsir
  1. 第一字段:这个例子中,有两个用户组beinan用linuxsir
  2. 第二字段:用户组的密码,beinan用户组无密码;linuxsir用户组有已经,已经加密;
  3. 第三字段:用户组管理者,两者都为空;
  4. 第四字段:beinan用户组所拥有的成员是linuxsir ,然后还要对照一下/etc/group和/etc/passwd 查看是否还有其它用户,一般默认添加的用户,有时同时也会创建用户组和用户名同名称; linuxsir 用户组有成员linuxisir ;

相关命令

如何设置用户组的密码? 我们可以通过 gpasswd 来实现;不过一般的情况下,没有必要设置用户组的密码;不过自己实践一下也有必要;下面是一个为linuxsir用户组设置密码的例子;

 1gpasswd 的用法: gpasswd 用户组
 2root@localhost ~]# gpasswd linuxsir
 3正在修改 linuxsir 组的密码
 4新密码:
 5请重新输入新密码:
 6用户组之间的切换,应该用 newgrp ,这个有点象用户之间切换的su ;我先举个例子:
 7[beinan@localhost ~]$ newgrp linuxsir
 8密码:
 9[beinan@localhost ~]$ mkdir lingroup
10[beinan@localhost ~]$ ls -ld lingroup/
11drwxr-xr-x 2 beinan linuxsir 4096 10月 18 15:56 lingroup/
12[beinan@localhost ~]$ newgrp beinan
13[beinan@localhost ~]$ mkdir beinangrouptest
14[beinan@localhost ~]$ ls -ld beinangrouptest
15drwxrwxr-x 2 beinan beinan 4096 10月 18 15:56 beinangrouptest

说明:我是以beinan用户组切换到linuxsir用户组,并且建了一个目录,然后再切换回beinan用户组,又建了一个目录,请观察两个目录属用户组的不同;还是自己体会吧。