跟着老万学linux运维(4)-文件权限

简介: 跟着老万学linux运维(4)-文件权限

关于文件权限


由于Linux的设备和文档都是以文件的形式存在,因此Linux最基本的安全控制就是对文件的访问控制。Linux文件或文件夹权限是用来控制用户访问文件、文件夹或执行程序的一套机制。


三种基本权限:

根据用户对文件或目录操作种类的不同,linux定义了三种基本的权限:

读,用r标识,对文件来说,表示可以查看文件内容,对文件夹来说,表示可以查看文件夹下的文件,可以用数值4来表示;

写,用w标识,对文件来说,表示可以向文件中写入或者插入内容,对文件夹来说,表示可以在文件夹下删除、添加或者修改文件名称,可以用数值2来表示;

执行,用x标识,对文件来说,表示文件可以以程序来执行,对文件夹来说,表示可以访问子目录及文件及shell中cd到此目录,可以用数值1来表示。


三种权限范围控制:

同时,用户和文件存在以下关系:

文件所有者(owner):拥有文件的用户。创建文件时是创建文件的用户(可用whoami命令查看)。

所属组(group):文件所属的组。创建文件时用户的组(可用id命令查看)。

其他用户(other):既不是文件所有者,也不是文件所属的组的成员的其他用户。

一个文件或文件夹的权限,其实就是对这三种关系的用户规定是否具有可读,可写,可执行的权限,通常文件或文件夹的权限可以通过ls -l命令来查看:

10.png


mode:标识了owner、group及other用户对该文件的操作权限;

owner:规定文件的拥有者;

group:规定文件归属的用户组。

mode用长度为10的字符串来表示 “-rw-rw-r–”,第一位字符表示类型“-”表示文件,“d”表示目录,“l”表示链接文件。后面9位需要每三位为一组来理解:

9.png


如上图所示,每一组的第一位标识是否具有读权限,‘r’表示具有读权限,‘-’表示禁止读权限,第二位标识是否具有写权限,‘w’表示具有写权限,‘-’表示禁止写权限,第三位标识是否具有可执行权限,‘x’表示具有可执行权限,‘-’表示禁止可执行权限。从左往右分为三组,第一组标识owner的权限,第二组表示group的权限,第三组标识其他用户的权限。


举个例子,如上图所示的文件 public_excutable权限为”-rwxr-xr-x”, 怎么理解呢?首先拆开来看,owner的权限是”rwx”,表示对文件具有可读可写可执行的权限,group的权限是”r-x”,表示对该文件只有可读和可执行的权限,other用户的权限也是”r-x”,表示对该文件只有可读和可执行的权限。


文件权限除了用字符串表示外,也可使用八进制数来表示权限,即用一个四位八进制数来表示,其中最高位表示特殊权限,随后的三位依次是所有者权限、组权限和其他人权限。每一个八进制位的权限数值是文件具有的相应权限所对应的数值之和,还是以文件public_excutable为例子:


0755 = rwxr-xr-x = 0(4 + 2 + 1)(4 + 1)(4 + 1)


权限

字符 数值
读权限 r 4
写权限 w

2

执行权限 x

1

如果要查看文件的数值权限,可以通过stat命令进行查看:


root@d076cf119be7:/ $ stat test_file
File: test_file
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 29h/41d Inode: 13429 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-07-26 02:26:26.723187697 +0000
Modify: 2018-07-26 02:26:26.723187697 +0000
Change: 2018-07-26 02:26:26.723187697 +0000
Birth: -


系统默认的文档权限控制?


umask

当我们登录系统,创建一个新的文件或者目录时,会被分配一个默认权限,这个最初的权限是如何被分配的呢?在Linux系统中,通常管理员通过设置umask值来定义创建目录和文件时的默认权限。


什么是umask?系统管理员必须要为你设置一个合理的 umask值,以确保你创建的文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限。一般来说,umask命令是在/etc /profile文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的umask,可以在该文件中加入相应的条目。如果希望永久 性地设置自己的umask值,那么就把它放在自己$HOME目录下的.profile或.bash_profile或.bashrc文件中。


umask值类似于文件的权限值,使用三位八进制数来表示,比如002,设置范围(000~777),以掩码的形式,定义需要禁止那些用户的何种权限,第一位表示禁止owner的权限值,第二位表示禁止group用户的权限值,第三位表示禁止other用户的权限值。


以umask值为002为例,翻译成权限字符串 “— — -w-“,表示禁止other用户使用写权限


使用umask命令:

root $ umask
0022
设置umask
root $ umask 033
root $ umask
0033


修改文件或文件夹权限


核心命令chmod,chown


上文讲述了如何通过umask来定义文件或者文件夹的默认权限,那文件创建后,权限如何变更呢?Linux提供了chmod命令来修改文件权限,chmod可以给文件或者目录的指定用户增加或者降低权限,比如给owner和group增加执行权限:


chmod ug+x test_file

以上的例子中u和g分别表示user,group,是用户类型:


u – user

g – group

o – other

a – all

‘+’ 表示增加权限,是执行的动作:


+ 增加权限

– 降低权限

‘x’ 表示要增加的文件权限:


r 读

w 写

x 可执行

一些常见的例子:


给所有用户增加写权限:

chmod a+w test_file

给other用户增加执行权限:

chmod o+x test_file


禁止group和other用户的执行权限:

chmod go-x test_file


禁止所有用户的执行权限:


chmod a-x test_file


也可以直接修改文件的权限值:


chmod 644 test_file


修改文件或文件夹的归属


文件的归属可以被root账户修改,chown 命令修改文件的owner,chgrp 修改文件归属的group,

root:/home/user5 $ chown user4 test
root:/home/user5 $ ls -la
-rw------- 1 user4 user5 0 Aug 2 01:11 test
root:/home/user5 $ chgrp user2 test
root:/home/user5 $ ls -la
-rw------- 1 user4 user2 0 Aug 2 01:11 test
#通过chown命令同时分配所属用户和属组
root:/home/user5 $ chown user2:user2 test
root:/home/user5 $ ls -la
-rw------- 1 user2 user2 0 Aug 2 01:11 test

至此,基本介绍完了文件权限,我自己也从头到尾又梳理了一遍,Linux文件权限的控制相对松散,要保证系统的安全性,系统管理员必须制订严格复杂的策略,同时需要控制对root权限的使用范围,尤其是对一些系统服务或进程,要避免使用root账户。


参考:


https://ithorseman.wordpress.com/2018/07/09/linux-账户及安全管理(二)/


目录
相关文章
|
1月前
|
存储 安全 Linux
|
16天前
|
运维 安全 BI
【运维有小邓】如何进行AD域文件权限管理?
在网络资源管理中,谁可访问资源及访问级别至关重要。Active Directory环境下,管理文件服务器权限耗时且繁琐。ADManager Plus提供批量管理用户NTFS和共享权限的功能,简化权限分配、修改与撤销流程,提升管理效率,确保资源安全。通过集中式界面,管理员能快速准确地控制资源访问,优化环境管理。
【运维有小邓】如何进行AD域文件权限管理?
|
20天前
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
2月前
|
运维 监控 网络协议
|
28天前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
50 3
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
59 1
|
2月前
|
Web App开发 运维 安全
1Panel:一个现代化、开源的 Linux 服务器运维管理面板
1Panel:一个现代化、开源的 Linux 服务器运维管理面板
|
7月前
|
存储 运维 关系型数据库
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
|
7月前
|
运维 Linux Docker
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
|
7月前
|
运维 Linux 程序员
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题