一、名词理解
用户、组和权限
用户:
标识符:
用户名,用户ID
登录:用户名,密码
认证机制:
认证,授权,审计(日志)
进程(动态):以特定用户身份运行
文件(静态的):以属主,属组等从属关系
组:将多个用户与权限建立关联关系的容器
权限:资源的支配边界
用户有两类:
管理员:root UID:0
普通用户: UID:1-60000
系统用户:
CentOS6:1-499
CentOS7:1-999
仅用于运行某些服务类进程而存在,一般不用于登录系统
普通用户:
CentOS6:500+
CentOS7:1000+
交互式登录
组有两类:
管理员组:root GID:0
普通组:1-65535
系统组:1-499
1-1000
普通组:500+
1000+
权限: 文件 目录
r:readable 可使用查看工具看内容 可以使用ls命令列出其内容所有文件或子目录的相关信息
w:writable 可编辑其内容 可在此目录内创建或删除文件
x:executable 可将此文件内核提请启动为进程 可以cd进此目录,可以使用ls -l查看其内部所有文件或子目录的相关详细信息
安全上下文:用户启动某进程访问某文件资源时,权限匹配机制:
1、首先查看此进程的属主,与被访问的文件的属主是否是同一个用户,如果是,则以被访问的文件的属 主的身份来访问,从而应用权限为属主的权限,如果不是,则2
2、查看此进程的属主是否属于被访问的文件的属组,如果是,则以被被访问的文件的属组的身份来访 问,从而应用权限为属组的权限,如果不是,则应用其它人的权限
组的类别:一个用户可同时属于多个组
以用户为中心:
基本组
附加组
二、管理用户和组:useradd,passwd,userdel,usermod,groupadd,gpasswd,groupdel,groupmod
useradd:
useradd [OPTION]... USERNAME
-u UID 指定UID
-g GID 指定基本组的GID,也可使用组名,GID或组名必须事先存在
-G GID 指定附加组的GID,也可使用组名,GID或组名必须事先存在
-c 指定注释信息
-d 指定家目录
-s 指定使用的shell
-r 创建系统用户, -s /sbin/nologin
-m 必须给用户创建家目录
-M 不给用户创建家目录
-D 设定用户创建时useradd的默认行为:
注意:创建用户时如果没有指定基本组,则useradd会自动添加一个与当前用户同名的组,且GID同UID
passwd:
passwd: 修改自己的密码
passwd USERNAME:修改指定用户的密码,只有管理员root有此权限
-l 锁定帐号
-u 解锁帐号 更改此帐号的密码也可解锁
-S 查看用户密码状态
--stdin
[root@localhost ~]# echo '123321'|passwd --stdin xiewei 更改用户 xiewei 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 [root@localhost ~]#
userdel:删除用户
userdel [-r] USERNAME 删除指定用户
-r:删除用户的同时,删除其家目录
usermod 修改用户信息
-g 修改用户的基本组
-G 修改用户的附加组 注意:会修改用户的之前的附加组 -a 添加附加组而不会改变原有的附加组,但是-a一定要放在-G前面,否则报错
-s 修改用户的默认shell
-c 修改用户的注释信息
-L 锁定帐号
-U 解锁帐号
-M 不给用户创建家目录
-d 修改用户的家目录,-m 修改家目录后把家目录原文件复制新位置
-l 修改用户的登录名 #但是家目录不会更改,所以改后就不能登录了?
groupadd
groupadd GROUPNAME 删除指定组
-g GID:指定使用的GID
-r 创建系统组
gpasswd GROUPNAME :为组添加密码
-a 添加附加用户
-d 删除指定的附加用户
-A:指定管理员
-M:指定组成员和-A的用途差不多
-r:删除密码
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组
gpasswd -A peter users
这样peter就是users群组的管理员,就可以执行下面的操作:
gpasswd -a mary users
gpasswd -a allen users
groupdel GROUPNAME:删除组
groupmod GROUPNAME:修改组属性
-g 修改GID
-n 修改组名
ID [OPTION] USERNAME 显示指定用户的UID ,GID,所有组
-u UID 仅显示UID
-g GID 仅显示基本组
-G 显示所有组
-n 显示名称而非ID
newgrp
newgrp GROUPNAME 切换当前用户的基本组为指定组,如果该组为该用户的附加用户则不用输入组密码,否则需要组密码(该组没设密码就切换不了) #重启后失效
finger USERNAME 查看用户信息
chsh 修改shell
-l 列出当前系统上可用shell
-s 修改为指定shell
chfn 修改用户注释信息
su 切换用户帐号
su [OPTION]... [-] [USER]
[USER]省略时,表示切换为root
su USERNAME:非登录切换,意味着仍然使用原用户的环境设定
su - USERNAME:登录式切换,意味着使用目标用户的环境设置,原用户失效
su - USERNAME -c 'COMMAND' 以目标用户身份执行一次命令后退出,不作真正切换
注意:返回原用户,使用exit命令,
三、用户,组相关的配置文件详解
1、/etc/passwd
account:password:UID:GID:GECOS:directory:shell
用户帐号:x:UID:GID:GECOS:用户家目录位置:用户的默认shell
密码占位符
用户注释信息 用户必须有一个合法可用的shell,/etc/shells
名称解析:把用户名解析为UID,或UID解析为用户名,基于名称解析库,以某个字段为搜索键(搜索标准),这些库文件位于/lib64,/usr/lib64目录,通常以libnss开头
/etc/group
group_name:passwd:GID:user_list
以此组为附加组的用户列表,以都好分隔
相关的其它配置文件:
/etc/shadow - 使 用 者 帐 号 资 讯 加 密
/etc/group - 群 组 资 讯
/etc/default/useradd - 定 义 帐号信息和家目录,家目录下的文件等
/etc/login.defs - ogin.defs是设置用户帐号限制的文件,在这里我们可配置密码的最大过期天数,密码的最大长度约束等内容。该文件里的配置对root用户无效。如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准
/etc/skel - #家目录下的文件(隐藏文件)
/etc/shadow:
oracle:!!:16668::::::
用户名
加密后的密码串
最近一次修改密码的日期,起始于1790.1.1至上次密码修改所经过的天数
密码的最小使用期限:0表示不限制,按天计算,相对于上次修改密码的日期而言的相对时长
密码最大使用期限,99999表示不限制,相对于上次修改密码的日期而言的相对时长
密码警告期限:0表示不警告,默认是倒数7天警告
密码的非活动区限:超过该区限,帐号将被锁定,0和默认是表示密码过期后立即失效,-1表示密码永远不会失效
帐号的过期期限:为一个日期(天)
预留字段
/etc/gshadow
组名:组密码加密后的字符串:组管理员:附加用户
加密/解密:
明文、密文
常用的加密的方法:
对称加密:
公钥加密:密钥对儿,公钥产生于私钥之中,
单向加密:之能从明文产生密文,反之不成,严格意义上来讲,它实现的是提取数据特征码
同一个数据,使用同一个算法,多次计算得到的结果一定相同,所以常用于验证数据完整性
定长输出,无论原数据大小是什么,加密后结果输入大小相同
$加密算法$8位随机字符$加密后的密码
md5:(centos5)
sha1:
sha256
sha512 (centos6,7采用)
chage:修改用户帐号密码的过期信息
-l 查看用户的过期信息
-d 修改密码最后一次更改日期(/etc/shadow第三个字段)
chage -d 0 USERNAME #这个命令其实是把密码修改日期归0了,这样用户一登陆就要修改密码了
一次用户创建经历的过程:
1、在/etc/passwd文件中添加一行信息
USERNAMEx:UID:GID:c:/home/USERNAME:shell
2、在/etc/group文件中添加一行信息
GROUPNAME:X:GID:附加用户
3、创建家目录/home/USERNAME
复制/etc/skel目录中的隐藏文件至用户的家目录中,并修改其属主,属组及权限
4、在/etc/shadow创建用户密码及相关属性信息