一、Linux文件权限设计
Linux系统中任何内容都可以用文件表示,其对文件设计了一套权限进行管理;文件权限共有11个字符,从左向右共分为5段(每段的具体说明如下表Linux权限设计说明所示):
字符 | 说明 |
第1个字符 | 第1个字符表示【文件类型】(其中【-】表示文件、【d】表示目录、【l】表示软链接(也就是windows里面的快捷方式)、【b】表示设备) |
第2、3、4个字符 | 第2、3、4个字符表示文件【所属用户的权限】(user) |
第5、6、7个字符 | 第5、6、7个字符表示文件【所属用户组的权限】(group) |
第8、9、10个字符 | 第8、9、10个字符表示文件【所属其他用户的权限】(other) |
第11个字符 | 第11个字符表示【开启selinux的状态下创建的;即这个文件受到selinux的保护】 |
二、文件权限说明和操作
2.1、文件权限说明
Linux是采用用户、用户组、其他用户组成的权限体系(简称:ugo);每个用户权限使用三个字符表示,共9个字符,一位都不能少,没有权限的字符使用空权限(-)表示,如下图所示:
序号 | 权限字符串值 | 说明 |
r | 4 | 全称(read)表示拥有文件的读取权限 |
w | 2 | 全称(write)表示拥有文件的写入权限 |
x | 1 | 全称(executable)表示拥有文件的可执行权限 |
- | 0 | 表示空权限,表示没有文件的任何操作权限 |
ugo权限字符串值组合 | ugo权限字符串组合值 | ugo权限说明 |
--- | 0 | 空权限 |
--x | 1 | 执行权限 |
-w- | 2 | 写入权限 |
--wx | 3 | 写入和执行权限 |
r-- | 4 | 读取权限 |
r-x | 5 | 读取和执行权限 |
rw- | 6 | 读取和写入权限 |
rwx | 7 | 读取、写入和执行权限 |
2.2、禁用SElinux权限
一文带你看懂 SELinux 是什么? - 红帽安全增强型 Linux(SELinux)由美国国家安全局(NSA)利用 Linux 安全模块(LSM)开发而成,是一种采用安全架构的 Linux 系统,能够让管理员更好地管控哪些人可以访问系统。https://www.redhat.com/zh/topics/linux/what-is-selinux
安全增强型 Linux(SELinux)是一种采用安全架构的 Linux® 系统,它能够让管理员更好地管控哪些人可以访问系统。它最初是作为 Linux 内核的一系列补丁,由美国国家安全局(NSA)利用 Linux 安全模块(LSM)开发而成。SELinux 于 2000 年发布到开源社区,并于 2003 年集成到上游 Linux 内核中。
SELinux 定义了每个人对系统上的应用、进程和文件的访问控制。利用安全策略(一组告知 SELinux 哪些能访问,哪些不能访问的规则)来强制执行策略所允许的访问。
SElinux是负责Linux系统安全的,但是启用它后会变得很麻烦,安全和便利是冲突的;红帽系的系统(redhat、centos等)都默认都有这个机制且是启用的;一般来说这个内容我们是关闭的,有关安全方面的控制可以通过其他方法来控制。
1、先查看Linux的SELinux权限
# 查看Linux的Selinux状态命令:
sestatus
2、禁用Linux系统的SELinux
使用具有超级管理员权限的账户登录Linux,一般是root用户,使用如下命令进行打开修改:
# 1、打开SELinux配置文件命令:
vi /etc/selinux/config
# 2、SELinux修改完成后重启Linux系统(只有重启系统后才会生效)重启系统命令是:
reboot
# 3、Linux重启完成后再查看一下SELinux的状态是否为禁用命令:
sestatus
2.3、文件权限的修改
我们在自己的账户下创建一个文件,默认权限是【-rw-r--r--.】(表示创建该文件的用户拥有文件的读取和写入权限,而该文件属于的用户组和其他用户只拥有读取权限,且该文件受selinux保护),如下图所示(创建一个名为newfile.txt的文件):
注意:我这里创建的文件权限没有最后的.是因为我已经把selinux禁用了。
序号 | 文件权限修改命令 | 示例 |
1 | chmod -权限字母 文件名称 | |
2 | chmod +权限字母 文件名称 | |
3 | chmod u±权限字母 文件名称 | |
4 | chmod g±权限字母 文件名称 | |
5 | chmod o±权限字母 文件名称 | |
6 | chmod 权限字母值 文件名称 | |
三、文件的用户和用户组
Linux系统也是具有用户和用户组的概念,用户和用户组可以有三种关系【一对一、一对多、多对多】(即:一个用户对应一个用户组;一个用户可以对应多个用户组,同样一个用户组也可以对应多个用户)
3.1、用户管理
序号 | 操作用户命令 | 说明 |
1 | useradd 用户名称 | 【useradd coffeemilk】表示创建coffeemilk用户 |
2 | passwd 用户名称 | 【passwd coffeemilk】表示给coffeemilk用户设置或修改密码 |
3 | id 用户名称 | 【id coffeemilk】表示查看coffeemilk用户是否存在 |
4 | lchage -l 用户名称 | 【lchage -l coffeemilk】表示查看coffeemilk用户状态信息 (注意:这里命令中的是小写字母l,不是数字1或者字母i) |
5 | usermod -L 用户名称 | 【usermod -L coffeemilk】表示锁定用户coffeemilk,不允许登录系统 (注意:如果该用户在执行锁定命令前已经登录,那么已经登录的还是可以正常操作;但是退出后就无法登录了) |
6 | usermod -U 用户名称 | 【usermod -U coffeemilk】表示解除用户coffeemilk的锁定状态,可以登录系统 |
7 | userdel -r 用户名称 | 【userdel -r coffeemilk】表示删除用户及其对应相关的配置内容 |
3.2、用户组管理
序号 | 操作用户组命令 | 说明 |
1 | groupadd 用户组名称 | 【groupadd testgroup】表示添加testgroup用户组 |
2 | cat /etc/group | 表示查看当前有哪些用户组,最新添加的用户组在该文件的最下面 |
3 | usermod -g 用户组名称 用户名称 | 【usermod -g testgroup coffeemilk】表示将用户coffeemilk的主组coffeemilk强制修改为testgroup (注意:如果该用户拥有多个组,只需要使用该命令即可指定为一个主组) |
4 | usermod -G 用户组名称 用户名称 | 【usermod -G devgroup coffeemilk】表示给用户coffeemilk在添加一个用户组devgroup |
5 | useradd -g 用户组名称 用户名称 | 【useradd -g devgroup testuser】表示在创建用户testuser时指定用户组为devgroup |
6 | groupmod -n 新用户组名称 旧用户组名称 | 【groupmod -n dev devgroup】表示将旧用户名称devgroup修改为新的名称dev |
7 | groupdel 用户组名称 | 【groupdel testgroup】表示删除用户组testgroup (注意:删除用户组的时候需要先将使用了该用户组的用户修改到其他用户组,才能够删除成功) |