1. 概念:
1.1. 每个使用者都有,用户标识UID和密码;并且有身份(Authentication),授权(Authorization),审计(Audition);组(用户组,用户容器)
1.2. 用户类别:管理员和普通用户(普通用户又分为系统用户和登录用户)
1.3. 用户标识(UserID,UID)由16bit二进制数字(0-65535)组成,管理员(root)为0,普通用户为:1-65535。系统用户:1-499(CentOS6), 1-999(CentOS7),登录用户:500-60000(CentOS6), 1000-60000(CentOS7)。用于名称解析:名称转换,把Username转换成UID。名称解析库就是/etc/passwd
1.4. 组:
1.4.1. 组类别1:管理员组和普通用户组(系统组和登录组)。组标识(GroupID,GID),管理员组:0,系统用户组:1-499(CentOS6), 1-999(CentOS7),登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)。名称解析,把groupname转换成gid,解析库:/etc/group
1.4.2. 组类别2:用户的基本组和用户的附加组
1.4.3. 组类别3:私有组(组名同用户名,且只包含一个用户)和共有组(组内包含了多个用户)
1.5. 认证信息:通过比对实现存储的,与登录时提供的信息是否一致:检查password要检查/etc/shadow和/etc/gshadow
1.6. 密码的使用策略:使用随机密码,最短长度不要低于8位,应该使用大写字母、小写字母、数字和标点符号四类字符中至少三类,定期更换
1.7. 加密算法:在在计算之时加salt,添加的随机数:
1.8. 配置文件:
1.8.1. /etc/passwd:用户的信息库
name:password:UID:GID:GECOS:directory:shell
name:用户名
password:可以是加密的密码,也可以是占位符x
UID:
GID:用户所属的主组的ID号
GECOS:注释信息
directory:用户的家目录
shell:用户的迷人shell,登录时默认shell程序;
1.8.2. /etc/shadow:用户密码
用户名:加密的密码:最近一次修改密码的时间:最短使用限期:最长使用期限:警告期段:过期期限:保留字段
1.8.3. /etc/group:组的信息库
group_name:password:GID:user_list
user_list:该组的用户成员,以此组为附加组的用户的用户列表
2. Linux用户和组管理
2.1. 安装上下文:进程以其发起者的身份运行;进程对文件的访问权限,取决于发起此进程的用户的权限,为了能够让那些后台进程或服务类型进程以非管理员的身份运行,通常需要为此创建多个普通用户;这类用户从不用登录系统;
2.2. groupadd命令:添加组
groupadd [选项] group_name
-g GID:指定GID,默认是上一个组的GID+1
-r:创建系统组
2.3. groupmod命令:修改组属性
groupmod [OPTIONS] GROUP
-g GID:修改GID;
-n new_name:修改组名
2.4. groupdel命令;删除组
groupdel [OPTIONS] GROUP
2.5. useradd:创建用户
useradd [OPTION] 登录名
-u, --uid UID:指定UID;
-g, --gid GID:指定基本GID,此组得实现存在;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]:指明用户所属的附加组,多个组之间用逗号隔开
-c, --comment COMMENT:指明注释信息
-d, --home HOME_DIR:创建以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;
-s, --shell SHELL:指定用户的默认shell,可用的所有shell存储在/etc/shells文件中
-r, --system:创建系统用户
注意,创建用户时的诸多默认设定配置文件为/etc/login.defs
useradd -D:显示创建用户的默认配置
useradd -D 选项:修改默认选项的值
修改的结果保存于/etc/default/useradd文件中
2.6. usermod命令:修改用户属性
usermod [OPTIONS] 登录
-u, --uid UID:修改用户的ID为此处指定的新UID;
-g, --gid GROUP:修改用户所属的基本组;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组,原来的附加组会被覆盖
-a, --append:与-G一起使用,用于为用户追加新的附加组;
-c, --comment COMMENT:修改注释信息
-d, --home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移到新目录
-m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录
-l, --login NEW_LOGIN:修改用户名;
-s, --shell SHELL:修改用户的默认shell
-L, --lock:锁定用户密码;即在用户原来的密码字符串之前添加一个“!”;
-U, --unlock:解锁用户的密码;
2.7. userdel命令:删除用户
userdel [选项] 登录
-r:删除用户时一并删除其家目录;
2.8. passwd命令:
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
(1) passwd:修改自己的密码
(2) passwd USERNAME:修改制定用户的密码,但仅root有此权限;
-l, -u:锁定和解锁用户;
-d:清除用户密码串;
-e DATE:过期期限,日期
-i DAYS:非活动期限
-n DAYS:密码的最短使用期限
-x DAYS:密码的最长使用期限
-w DAYS:警告期限
--stdin:
echo "PASSWORD" | passwd --stdin USERNAME
2.9. gpasswd命令:
gpasswd [OPTIONS] group
-a USERNAME:向组中添加用户
-d USERNAME:从组中移除用户
2.10. newgrp命令:临时切换指定的组为基本组
newgrp [-] [group]
-:会monitor用户重新登录以实现重新初始化其工作环境
2.11. chage命令:更改用户密码过期信息
chage [选项] 登录名
-d
-E
-W
-m
-M
2.12. id命令:显示用户的有效ID
id [OPTION]... [USERNAME]
-u:仅显示有效的UID
-g:仅显示用户的基本组ID
-G:仅显示用户所属的所有组的ID
-n:显示名字而非ID
2.13. su命令:switch user
登录式切换:会通过读取目标用户的配置文件来进行初始化
su - USERNAME
su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化
su USERNAME
注意:管理员可无密码切换至其他任何用户;
-c:'COMMAND'
2.14. finger命令:
2.15. chsh命令:
2.16. chfn命令:
2.17. whoami命令:
3. 权限管理:
3.1. 基本概念:
ls -l
rwxrwxrwx:
左三位:定义user(owner)的权限
中三位:定义group的权限
右三位:定义other的权限
进程安全上下文:
进程对文件访问权限应用模型:
进程的属主与文件的属主是否相同:如果相同,则应用属主权限;
否则,则检查进程的属主是否属于文件的属组,如果是,则应用属组权限
否则,就只能应用other的权限
权限:
r:read,读
w:write,写
x:excute,可执行
文件:
r:可获取文件的数据;
w:可修改文件的数据;
x:可将此文件运行为进程;
目录:
r:可使用ls命令获取其下的所有文件列表
w:可修改此目录下的文件列表,即创建或删除文件;
x:可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息(如果文件夹没有这个权限,前面两个权限也没有)
mode:rwxrwxrwx
ownership:user, group
权限组合机制:
--- 000 1
--x 001 2
-w- 010 3
-wx 011 4
r-- 100 5
r-x 101 6
rw- 110 7
rwx 111 8
3.2. 权限管理命令:
chmod命令:
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
三类用户:
u:属主
g:属组
o:其他
a:所有
(1)chmod [OPTION]... MODE[,MODE]... FILE...
MODE表示法:
赋权表示法:直接操作一类用户的所有权限位rwx
u=
g=
o=
a=
授权表示法:直接操作一类用户的一个权限位r,w,x;
u+, u-
g+, g-
o+, o-
a+, a-
(2) chmod [OPTION]... OCTAL-MODE FILE...
(3) chmod [OPTION]... --reference=RFILE FILE...
选项:
-R, recursive:递归修改
3.3. 从属关系管理命令:
chown命令:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
选项:
-R:递归修改
注意:用户仅能修改属主为自己的那些文件的权限
chgrp命令:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注意:仅管理员可以修改文件的属主和属组
3.4. umask:文件的权限反向掩码,遮罩码;
文件:
666-umask
目录:
777-umask
注意:之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1
umask:023
666-023=644
777-023=754
umask命令:
umask:查看当前umask
umask MASK:设置umask
注意:此类设定尽对当前shell进程有效;
3.5. install命令:
install - copy files and set attributes
单源复制:
install [OPTION]... [-T] SOURCE DEST
多源复制:
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
创建目录:
install [OPTION]... -d DIRECTORY...
常用选线:
-m, --mode=MODE:设定目标文件权限,默认为755
-o, --owner=OWNER:设定目标文件属主
-g, --group=GROUP:设定目标文件属组
3.6. mktemp命令:
mktemp - create a temporary file or directory
mktemp [OPTION]... [TEMPLATE]
常用选项:
-d:创建临时目录
注意:mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来;
4. Linux系统上的特殊权限(
SUID, SGID, STICKY)
安全上下文:
1、进程以某用户的身份运行; 进程是发起此进程用户的代理,因此以此用户的身份和权限完成所有操作;
2、权限匹配模型:
(1) 判断进程的属主,是否为被访问的文件属主;如果是,则应用属主的权限;否则进入第2步;
(2) 判断进程的属主,是否属于被访问的文件属组;如果是,则应用属组的权限;否则进入第3步;
(3) 应用other的权限;
SUID:
默认情况下:用户发起的进程,进程的属主是其发起者;因此,其以发起者的身份在运行;比如:/bin/passwd
SUID的功用:用户运行某程序时,如果此程序拥有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而程序文件自己的属主;
管理文件的SUID权限:
chmod u+|-s FILE...
展示位置:属主的执行权限位
如果属主原本有执行权限,显示为小写s;
否则,显示为大写S;
SGID:
功用:当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录的属组;
管理文件的SGID权限:
chmod g+|-s FILE...
展示位置:属组的执行权限位
如果属组原本有执行权限,显示为小写s;
否则,显示为大写S;
Sticky:
功用:对于属组或全局可写的目录,组内的所有用户或系统上的所有用户对在此目录中都能创建新文件或删除所有的已有文件;如果为此类目录设置Sticky权限,则每个用户能创建新文件,且只能删除自己的文件;
管理文件的Sticky权限:
chmod o+|-t FILE...
展示位置:其它用户的执行权限位
如果其它用户原本有执行权限,显示为小写t;
否则,显示为大写T;
系统上的/tmp和/var/tmp目录默认均有sticky权限;
管理特殊权限的另一方式:
suid sgid sticy 八进制权限
0 0 0 0
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7
基于八进制方式赋权时,可于默认的三位八进制数字左侧再加一位八进制数字;
例如:chmod 1777
5. facl:file access control lists
文件的额外赋权机制:
在原来的u,g,o之外,另一层让普通用户能控制赋权给另外的用户或组的赋权机制;
getfacl命令:
getfacl FILE...
user:USERNAME:MODE
group:GROUPNAME:MODE
setfacl命令:
赋权给用户:
setfacl -m u:USERNAME:MODE FILE...
赋权级组:
setfacl -m g:GROUPNAME:MODE FILE...
撤销赋权:
setfacl -x u:USERNAME FILE...
setfacl -x g:GROUPNAME FILE...