用户在终端界面通过login接口,输入帐号密码后,linux系统做了什么?
- 先找寻 /etc/passwd 里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的 UID 与GID (在 /etc/group 中) 读出来,另外,该账号的家目录与 shell 设定也一并读出;
- Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚刚输入的密码与里头的密码是否相符;
- 如果一切都 OK 的话,就进入 Shell 控管的阶段啰
/etc/passwd文件结构
文件每一行代表一个帐号
e.g.
root:x:0:0:root:/root:/bin/bash
- 帐号名称
- 密码(以x代替,实际密码加密存储在/etc/shadow中)
- UID (user id)(0代表root,1~999为系统帐号,1000~给一般使用者用的)
- GID (group id)(与/etc/group有关)
- 用户信息说明栏
- 家目录
- Shell (用哪个帐号登录时获取的shell)
/etc/group文件结构
文件每一行代表一个群组
e.g.
root:x:0:
- 组名
- 群组密码(以x代替,实际密码存储在/etc/gshadow中)
- GID
- 在此群组中的帐号(我们知道一个账号可以加入多个群组,那某个账号想要加入此群组时,将该账号填入这个字段即可。 举例来说,如果我想要让 a与 b 也加入 root 这个群组,注意不要有空格, 使成为root:x:0:a,b )(其中初始群组(initial group)的用户已默认加入,因此不会在显式写出,比如在这个root群组中root这个帐号已经默认加入,因此第四段为空)
问题:当用户加入多个群组时,在工作时,是以哪个群组为准的呢?
答:针对已经存在的文件和目录,只要是加入的群组的功能均可使用;新建文件或目录时,文件和目录的群组应为这个用户的有效群组
通过groups指令可以获取当前用户加入的所有群组,显示出的第一个群组即为有效群组
在root环境中可以使用usermod指令给用户添加群组
添加用户以及用户密码的指令
useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
passwd [账号名称]
删除用户的指令
userdel [-r] 帐号名称 //-r表示家目录删除掉
什么是ACL?
ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的read,write,execute 权限之外的细部权限设定。ACL 可以针对单一使用者,单一文件或目录来进行r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助
那 ACL 主要可以针对哪些方面来控制权限呢?他主要可以针对几个项目:
1. 使用者 (user):可以针对使用者来设定权限;
2. 群组 (group):针对群组来设定其权限;
3. 默认属性 (mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限;