3.6、用户、组的基本概念
- 用户和组
- 系统上的每一个进程都是由一个特定的用户发起
- 系统上的文件都是由特定的用户拥有
- 用户对系统上的文件访问时,受到权限控制
- 与运行中的进程相关的用户确定该进程可访问的文件和目录
- 用户
- 用户标识符、密码
- 用户的分类
- 管理员
- 普通用户
- 组:
用户组、用户容器 - 用户和组的标识符:
UID 0-65535 - 管理员用户:
root:0 - 普通用户:1-65535
系统用户
CentOS6:1-499
CentOS7:1-999
登录用户
CentOS6:500-
CentOS7:1000- - 名称解析:
用户名------UID
etc/passwd
GID 0-65535 - 组类别:
用户的基本组
用户的附件组
/etc/group
认证信息:密码 /etc/shadow /etc/gshadow
- 密码策略:
- 使用随机密码
- 最短长度不低于8位
- 应该使用小写字母、大写字母、数字、标点符号四类中至少三类
- 定期更换
- 加密算法:
- 对称加密
- 非对称加密
3.7、用户组管理
安全上下文:进程是以其发起者的身份运行,进程对文件的访问权限,取决于发起此进程的用户权限
- groupadd
groupadd [option] group
-g GID 指定组ID,默认情况下,上一个组ID+1
-r 创建一个系统组 - groupmod: 修改组属性
groupmod [option] GROUP
-g 修改组ID
-n 修改组名 - groupdel:删除组
groupdel [option] GROUP
groupdel nebula - useradd 创建用户
- useradd [option] LOGIN
-u 指定UID
-g 指定基本组ID
-G 指定用户的附件组,付家组要事先存在
-c 添加注释信息
-d 指定用户的家目录,通过复制/etc/skel目录,并改名
-s 指定用户的默认shell
-r 创建系统用户 - useradd -D 显示创建系统用户
- useradd -D [options] 修改默认配置
- userdel 用户删除
userdel 登录名
-r 删除用户时一并删除目录 - usermod 修改用户属性
-u 修改用户ID
-g 修改用户的基本组
-G 修改用户的附加组
-c 修改注释信息
-d:修改家目录
-m -d选项一起使用,用于将原来家目录的文件移动到新的家目录
-a 与-G一起使用,追加用户的附加组
-l 修改用户名
-s 修改默认shell
-L 锁定用户密码
-U 解锁用户密码
/etc/passwd(保存用户信息)
root : x:0:0:root:/root:bin/bash
用户名:密码(x占位符) 用户标识符:组标识符:注释信息:主目录:登录shell (七段) - passwd 用户密码
passwd [-k] [-l] [-u[-f]] [-d] [-e] [-n mindays] [-x maxdays]
[-w warndays] [-i inactivedays] [-S] [–stdin] [username] - passwd 直接修改自己密码
- passwd username 修改指定用户的密码,仅root用户有此权限
-l:锁定用户
-d:清除密码串
-e DATE:过期日期
-i DAYS:非活动期限
-n DAYS 密码最短使用期限
-x DAYS 密码的最长使用期限
-w DAYS
–stdin 非交互式创建密码
echo “PATHWORD” | passwd --stdin username - gpasswd:
-a username 向组内添加用户
-d username 从组内删除用户 - newgrp:临时切换指定的组为基本组
- change 更改密码过期信息
-d 指定密码最后修改日期
-E 密码到期日期
-w 密码过期前的警告天数
-m 密码可以更改的最小天数
-M:密码保持有效的最大天数 - id:
-u 显示UID
-g 显示GID
-G 显示用户的所有组ID
-n 显示名字
/etc/shadow(保存密码信息)
root: 6 6 6rsIAoufpdIhAk2d
$upp.41jbKeHSvKJq9lv.ZR41Jy9vdxJDAt4Z2UO.7aybF42Ku/kUjg1QmvCSeGFxpstCVRkL5WUelVdC2usDL.:17859:0:99999:7:::
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志位
最后一次修改时间:表示从某一时间点开始,到用户组后一次修改口令的时间天数,一般情况下是从1970.1.1
最小时间间隔:
最大时间间隔:
4、Linux文件系统权限
4.1、权限对象(属主、属组、other)
- 文件拥有者
- 群组
- 其他人
4.2、权限类型
- d rwxr-xr-x. 2 root root 4096 Jul 28 06:43 bin
r:4
w:2
x:1
r–r--r-- 444
rw-rwx-r 674
755 644 600 700 - rw权限说明
- 对于文件而言
r 可以获取文件的数据
w 可以修改文件数据
x 可以将此文件运行为进程 - 对于目录而言
r 可以使用ls命令获取文件列表
w 可以修改文件列表,即创建和删除
x 表示我们可以cd此目录,并且可以使用ls -l获取文件的详细属性 - 权限逻辑判断
- 文件:前提条件,用户能够进入到文件所在目录
- 删除文件:看用户是否具备对目录的w权限
判断用户身份,owner-group-other - 创建文件,和删除文件逻辑相同
- 目录:前提条件:判断用户是否能够成功进入目录所在的目录,是否有x权限。
1、删除目录:对上级目录是否有w权限
2、创建目录:根据逻辑判断
4.3、权限管理命令
-
chmod
chmod [OPTION]… MODE[,MODE]… FILE…
chmod [OPTION]… OCTAL-MODE FILE…
chmod [OPTION]… --reference=RFILE FILE… -
三类用户:
u
g
o
a:所有 -
chmod [OPTION]… MODE[,MODE]… FILE…
MODE表示法: -
赋权表示法,rwx
u= u=r
g=
o=
a=
chmod u= ,g= ,o=
chmod a= -
授权表示法
u+,u-
g+,g-
o+,o-
a+,a-
注意:只有用户自己修改自己的文件
chmod 777 filename -
从属关系
chown,chgrp
-R:递归修改 -
chown username:groupname name
chown username: name
chown :groupname name -
chgrp groupname name
注意:只有管理员可以修改
五、进程安全上下文
5.1、进程对文件访问权限模型:
- 进程的属主与文件的属主是否相同,如果相同,则应用的是属主权限
- 否则,则检查进程的属主是否属于文件的属组,如果是,则应属组的权限
- 否则,使用other权限
5.2、基本权限ACL
- 针对单个用户设置
- 针对用户组设置
- 子目录/目录继承父目录的权限
5.3、查看系统是否支持ACL
[root@localhost ~]# tune2fs -l /dev/sda2 |grep “Default mount option:”
5.4、设置ACL
- setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file …
-m 配置acl权限,不能和-x同时使用
-x:删除ACL配置
-b:移除所有的acl配置
-R:递归配置acl
-d:配置默认的acl参数,只对目录有效 - setfacl -m u:nebula:rw /tmp/aclfile
getfacl /tmp/aclfile
5.5、权限掩码
- umask
- 文件权限:
666-022
644 - 目录:
777-022
755
5.6、特殊权限
- SUID:(s)当前文件所有者的x权限出现s时,表示当前这个文件具有SUID权限
- SUID权限仅仅对二进制程序有效
- 执行者对于该程序有x权
- 本权限仅仅在程序执行过程中有效
- 程序的执行者拥有该程序的拥有者的权限
- 如果当前这个文件属主位没有x权限,显示大写S
- SGID(s)
- SGID也是对二进制文件有效
- 执行者对该程序具有可执行权限 x权限
- 主要作用于目录之上
- SBIT(t)
- 主要针对于other位
- 作用于目录
- 在该目录下创建的文件或目录,只有自己和root可以删除
- 对文件无效
- SUID、SGID、SBIT
- 字符表示法
s s t - 数字表示法
4 2 1 - chmod 0075
----------1755 - chattr:显示隐藏属性
- a:append 只能够向文件添加数据,不能删除数据即只能追加
- i 文件不能被删除,改名,链接同时不能被写入内容
- lsattr:显示文件的隐藏属性
3、课后练习题
1、新建系统组mariadb, 新建系统用户mariadb, 属于mariadb组,要求其没有家目录,且shell为/sbin/nologin;尝试root切换至用户,查看其命令提示符;
[root@localhost ~]# groupadd -r mariadb
useradd -r -g mariadb -M -s /sbin/nologin mariadb
[root@localhost ~]# su mariadb
This account is currently not available.
2、新建GID为5000的组nebulaedu,新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;
[root@localhost /]# groupadd -g 5000 nebulaedu
[root@localhost /]# tail /etc/group
nebulaedu: x :5000:
[root@localhost /]# useradd gentoo
[root@localhost /]# usermod -d /users/fedora gentoo
[root@localhost /]# passwd gentoo
Changing password for user gentoo
New password:
BAD PASSWORD: The password contains the user name in some form
Retype new password:
passwd: all authentication tokens updated successfully.
3、新建用户fedora,其家目录为/users/fedora,密码同用户名;
[root@localhost /]# useradd fedora
[root@localhost /]# usermod -d /users/fedora fedora
[root@localhost /]# passwd fedora
Changing password for user fedora
New password:
BAD PASSWORD: The password contains the user name in some form
Retype new password:
passwd: all authentication tokens updated successfully.
4、新建用户www, 其家目录为/users/www;删除www用户,但保留其家目录;
[root@localhost /]# useradd www
[root@localhost /]# usermod -d /users/www www
[root@localhost /]# userdel www
5、为用户gentoo和fedora新增附加组nebulaedu;
[root@localhost /]# usermod -G nebulaedu gentoo
[root@localhost /]# usermod -G nebulaedu fedora
6、复制目录/var/log至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为nebulaedu,并让属组对目录本身拥有写权限,研发部开发人员David和Peter属于组A,行政部人员Jack和Mike属于组B;
[root@localhost tmp]# cp -r /var/log ./log
[root@localhost tmp]# chgrp nebulaedu /tmp/log
[root@localhost tmp]# chmod g=w /tmp/log
[root@localhost tmp]# groupadd A
[root@localhost tmp]# groupadd B
[root@localhost tmp]# useradd David
[root@localhost tmp]# useradd Peter
[root@localhost tmp]# useradd Jack
[root@localhost tmp]# useradd Mike
[root@localhost tmp]# usermod -a -G A David
[root@localhost tmp]# usermod -a -G A Peter
[root@localhost tmp]# usermod -a -G B Jack
[root@localhost tmp]# usermod -a -G B Mike
1.建立目录“/project_a”,该目录里面的文件只能由研发部开发人员读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何的访问操作;并要求在此目录下创建的文件研发组内成员可以互相访问
[root@localhost ~]# mkdir /project_a
[root@localhost ~]#chgrp A /project_a
[root@localhost ~]# chmod 070 /project_a
2.建立目录“/project_b”,该目录里面的文件只能由行政部人员读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何的访问操作;要求在此目录下创建的文件行政部人员只能删除自己的文件,不得删除其他人员文件
[root@localhost tmp]# mkdir /project_b
[root@localhost tmp]#chgrp B /project_b
[root@localhost tmp]# chmod 070 /project_b