linux的帐号与群组
使用者标识符: UID 与 GID
ID 与账号的对应就在 /etc/passwd 当中;
计算机只认得ID(即数字),并不能区别账号;
每个登陆的使用者至少都会取得两个 ID ,一个是使用者 ID (User ID ,简称 UID)、一个是群组 ID (Group ID ,简称 GID)。
使用者账号
登录的时候,输入账号口令,系统的动作如下:
1.先找寻 /etc/passwd 里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的 UID 与 GID (在 /etc/group 中) 读出来,另外,该账号的家目录与 shell 配置也一并读出;
2.再来则是核对口令表,这时 Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚刚输入的口令与里头的口令是否相符;
3.如果一切都 OK 的话,就进入 Shell 控管的阶段。
/etc/passwd 文件结构:
每一行都代表一个账号,有几行就代表有几个账号在你的系统中。 不过需要特别留意的是,里头很多账号本来就是系统正常运行所必须要的,我们可以简称他为系统账号, 例如 bin, daemon, adm, nobody 等等。
每一行使用『:』分隔开,共有七个咚咚,分别是:
1.账号名称;
2.口令:
早期 Unix 系统的口令就是放在这字段上!但是因为这个文件的特性是所有的程序都能够读取,很容易被窃取, 因此后来就将这个字段的口令数据改放到 /etc/shadow 中了。所以这里你会看到一个x;
3.UID:
0为系统管理员;
1~499为系统帐号,其中1~99:由 distributions 自行创建的系统账号;100~499:若用户有系统账号需求时,可以使用的账号 UID;
4.GID;
5.用户信息说明栏;
6.家目录;
7.Shell。
*很多程序的运行都与权限有关,而权限与 UID/GID 有关。因此各程序当然需要读取 /etc/passwd 来了解不同账号的权限。 因此 /etc/passwd 的权限需配置为 -rw-r–r– 。
/etc/shadow 文件结构:
shadow 同样以『:』作为分隔符,共有九个字段啊,这九个字段的用途是这样的:
1.账号名称;
2.口令:
这个文件的默认权限是『-rw——-』或者是『-r——–』,口令是加密过的;
3.最近更动口令的日期;
4.口令不可被更动的天数(与第 3 字段相比);
5.口令需要重新变更的天数(与第 3 字段相比);
6.口令需要变更期限前的警告天数(与第 5 字段相比);
7.口令过期后的账号宽限时间(口令失效日)(与第 5 字段相比);
8.账号失效日期;
9.保留。
*口令过期与口令失效并不相同,口令过期但是该账号还是可以用来进行其他工作的,包括登陆系统取得 bash 。不过如果口令过期了, 那当你登陆系统时,系统会强制要求你必须要重新配置口令才能登陆继续使用,这就是口令过期特性。而失效则是该账号再也无法使用该口令登陆了。
例子:
口令过期:
You are required to change your password immediately (password aged)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user dmtsai.
Changing password for dmtsai
(current) UNIX password:
口令失效:
Your account has expired; please contact your system administrator
关于群组: 有效与初始群组、groups, newgrp
/etc/group 文件结构:
这个文件每一行代表一个群组,也是以冒号『:』作为字段的分隔符,共分为四栏,每一字段的意义是:
1.组名;
2.群组口令:
同样的,口令已经移动到 /etc/gshadow 去,因此这个字段只会存在一个『x』而已;
3.GID;
4.此群组支持的账号名称。
账号相关文件之间的 UID/GID 与口令相关性示意图
有效群组(effective group)与初始群组(initial group):
/etc/passwd 里面第四栏那个 GID 就是所谓的『初始群组 (initial group) 』!也就是说,当用户一登陆系统,立刻就拥有这个群组的相关权限。
groups: 有效与支持群组的观察,第一个输出的群组即为有效群组 (effective group)
(当我们使用当前帐号去创建一个新档案时,档案的群组为有效群组。)
newgrp: 有效群组的切换
newgrp 这个命令可以变更目前用户的有效群组, 而且是另外以一个 shell 来提供这个功能的。虽然用户的环境配置(例如环境变量等等其他数据)不会有影响,但是使用者的『群组权限』将会重新被计算。 需要注意,由于是新取得一个 shell ,因此如果你想要回到原本的环境中,请输入 exit 回到原本的 shell。
/etc/gshadow文件结构:
四个字段的意义为:
1.组名;
2.口令栏,同样的,开头为 ! 表示无合法口令,所以无群组管理员;
3.群组管理员的账号 (相关信息在 gpasswd 中介绍);
4.该群组的所属账号 (与 /etc/group 内容相同)
以系统管理员的角度来说,这个 gshadow 最大的功能就是创建群组管理员。