linux 权限044,Linux系统之文件权限管理

目录

一、什么是权限?

二、基本权限

2.1 权限对象(ugo)

2.2 权限类型(rwx)

2.3 权限赋予

2.4 umask掩码

三、高级权限

3.1 suid权限

3.2 sgid权限

3.3 sticky权限

四、chattr隐藏权限

五、总结

一、什么是权限?

在Linux系统中,当我们不同用户在创建文件或目录时,被创建的文件或目录都有各自的所属主和所属组,不同用户对于某些文件拥有不同的权限。在我们Linux系统中,账户可分为超级用户、系统用户、普通用户三类。对于超级用户来说,其拥有最高权限,具备系统中的所有权限;对于系统用户来说,其主要作用是支撑整个系统的运行,方便系统管理;而对于普通户来说,其权限是有限的,只能对自己目录下的文件进行相关操作。

当用户登录系统时,用户的每一步操作都是由shell进程来代替执行的。shell进程是以某个登录系统的用户和身份启动的。在我们linux服务器上有严格的权限等级,如果权限过高而导致误操作会增加服务器的风险。因此当我们拥有较高权限时,应谨慎赋予Linux系统中相关文件的操作权限。

二、基本权限

2.1 权限对象(ugo)

首先来看一下下面的截图,通过ll命令以长格式的形式来当前目录下问价的相关信息,其中红圈部分就是文件对应的权限。不同的权限有对文件执行不同的权利,比如可读、可写或可执行。每个文件的权限分别对应着u、g、o。接下来解释一下这三个英文字母的含义。

c2bbc26728b843d42c33bf5036477792.png

(1)ugo解释

在Linux系统中,不同用户创建的文件都会对应有不同的权限,而且不同用户创建的文件或目录都有各自的属主、属组、其他人及相应的权限等。也就是以什么用户登录,那么创建的文件或目录就会成为该文件或目录的属主和属组,如下图所示。

e0be2b89dbef5e8f0a02c4618dc266d9.png

而属主、属组、其他人对应的就是我们的u、g、o,接下来看一下他们对应的关系:

权限的对象

说明

u

文件(目录)的所属主

g

文件(目录)的所属组

o

其他人

(2)案例解释

了解ugo后,那么他们具体的对应位置在哪呢?在继续看一下他们的具体位置:

-rw-r--r--. 1 root root 838 Aug 13 18:48 passwd

- rw- r-- r-- root root passwd

文件类型 属主(u)权限 属组(g)权限 其他人(o)权限 属主 属组 文件名

说明:

属主对应有属主权限;

属组对应有属组权限;

至于其他人权限,那是针对其他普通用户对该普通文件的权限。

2.2 权限类型(rwx)

权限共有三种类型,分别是读(r)、写(w)、执行(x),每种权限对应有相应的数字表示:

权限类型

数字表示

针对文件

针对目录

r(read)

4

可读取文件内容

可列出目录内容

w(write)

2

可更改文件内容

可创建或删除目录中任一文件

x(execute)

1

可作为命令执行文件

可访问目录中内容

2.3 权限赋予

对文件或目录赋予权限使用了两个命令,分别是:chown、chmod。

命令

功能

chown

改变文件或目录的所属主及所属组

chmod

给文件或目录设置访问权限

(1)语法:

chown 属主.属组 文件(目录)

chmod 权限对象(ugo) 赋值符 权限类型 文件(目录)

(2)实例1:使用符号表示

chown zrs.it 123.txt --给123这个文件修改属主和属组(前提用户和组得存在)

chmod u+x 123.txt --给123这个文件属主增加执行权限

(3)实例2:使用数字表示

chmod 644 123.txt

chmod 755 123.txt

说明:这三个数字分别表示属主权限、属组权限、其他人权限。

其中644中的6表示由读写权限组成,因为:r(4)+w(2)=6,表示属主有读写权限,另两个数一次类推。

2.4 umask掩码

首先我们得知道,目录默认的权限是777,文件默认的权限是666。对于目录来说执行权限是很重要的,比如进入目录是需要具有执行权限见得,而对于文件来说,一般都是用于数据的记录操作,所以不需要执行权。因此在默认情况下,用户创建的目录默认开放所有权限,而如果用户创建的是文件,则默认没有执行权限(x),故其权限默认为666。我们先来看一umask值。

2b0643d586fb3a65535950b5a2c246cc.png

从上图上课看到root用户的umask为022,也就是说,对于当前用户没有拿掉权限,group用户和other用户都被拿走了w权限,所以用户在进行创建目录和文件的时候,默认权限会进行减法操作:

666-022=644 --root用户新建文件时默认权限

777-022=755 --root用户新建目录时默认权限

因此umask此时显得是非常重要,它是用来控制文件和目录的默认权限。**要注意的是:**我们在计算文件或目录的默认值时不是以十进制方式去计算的,而是使用对应的二进制做的减法运算。umask的值是可以被设置的,其配置文件一般在/etc/profile(对于root)或/home/.bash_profile或home/.profile(对于普通用户)。有两种修改配置方法。

(1)通过修改配置文件使umask永久生效

vim /etc/profile

c3a7237ef7d1c79a5ffa1c1607fa89ae.png

(2)使umask临时生效

umask 权限补码

umask 044

比较简单,这里不再演示。

三、高级权限

3.1 suid权限

suid权限仅对二进制命令文件生效,执行者对该二进制文件有执行权,当对二进制命令文件进行suid提权时,执行者将拥有该二进制命令文件所有者的权限。接下来看个列子。

语法:chmod u+s 可执行二进制命令文件

chmod u+s /usr/bin/cat

fc8012c2a275debdbe6a623ded9d5baf.png

执行suid权限后,通过ll命令可观察到该二进制命令文件的所属主权限(u)部分的执行权限(x)变成了s,说明对该二进制命令文件提权成功,从上图可看到,提权后普通用户拥有该命令所有的权限。

在这里还有一个叫做sudo的权限,所起的作用和suid一样,只不过权限赋予方式和执行方式不一样而已。而且该权限较suid来说具有针对性,它可以针对某个或某些用户进行sudo授权,同时也是对普通用户提权的手段之一,接下来看一下相关测试实例。

(1)未对其他用户sudo提权时

在这种情况下,如果切换到xiaojie这个普通用户来执行touch命令,在根下(/)新建文件时是没有权限的。如下图所示:

83237746c02e2a2dbe105649f7a0a1e2.png

(2)当通过visudo给xiaojie用户提权时

其操作方法为:直接使用visudo进入文件,并对xiaojie用户添加权限,该权限为:xiaojie用户可以root身份使用touch命令。

语法:用户 ALL=(ALL) NOPASSWD=二进制命令的绝对路径

50f8614be1291e11371ba106bcb77a60.png

添加完后保存并退出(:wq),再次切换到xiaojie用户,使用touch命令在根下创建123.txt文件。

sudo touch /123.txt --在根下创建123.txt文件

ls /123.txt --查看是否创建成功

f78344b3c9c6a8c76f76da27a33dd164.png

最终看到的效果是执行成功的,说明对xiaojie普通用户提权成功。

3.2 sgid权限

sgid权限仅对目录生效,当给目录执行sgid提权时,若执行者在该目录下新建文件或目录(前提是被提权的目录对其他用户要具备w权限),则本地用户或其他用户创建的文件或目录将会继承被sgid提权目录的属组。接下来看一下下面的测试。

(1)添加测试目录并sgid提权

mkdir /home/test --创建测试目录

chown .IT /home/test/ --修改属组

chmod g+s /home/test/ --添加sgid权限

877435640b5b46d7c9f1443d3bd66a2a.png

(2)切换其他用户并在/home/test创建目录

su - xiaojie

mkdir /home/test/hello

90599b9406129b692ef2c302ab9ec037.png

3.3 sticky权限

该权限目前只对目录生效,而且是针对其他人(other)来设置的,其操作方法和suid、sgid类似,只是功能不同而已。其作用是:当对某一个目录提权时,当其他用户在被提权的目录下新建目录或文件时,仅有自己和root用户才能删除创建的文件,各普通用户之间是没有权利删除的。接下来看一下下面的测试。

(1)创建测试目录

mkdir /home/sticky

chmod o+t /home/sticky/

ea418bf589a6a06bb3661ca44266d428.png

(2)切换其他用户,并在/home/sticky目录下新建测试文件

7188d091767152a0a68f1fa67978387d.png

结论在图中已经标红。

四、chattr隐藏权限

有一种隐藏权限,添加该权限后连root用户都无法执行相应操作,包括删除、恶意添加内容等。尽管我们上面的sticky权限给目录提权后,可以防止其他用户对我文件的恶意删除,但并能防止别人对我的文件进行编辑、篡改等。显然这样的提权并非安全,因此给大家引出了chattr权限,实际上这是文件的一种属性权限,我们可以通过lsattr命令来查看某个文件的的属性,看某个文件是否添加chattr隐藏权限,该权限属性有三种,分别是a、i和A,接下来看看它们的用法及测试案例。

属性类型

说明

a

系统只允许在该文件中追加数据,不允许任何覆盖或截断这个文件

i

系统不允许对这个文件做任何的修改

A

告诉系统不要修改这个文件的最后访问时间

语法:chattr [+-=] [选项] 文件名

说明:

+ --添加权限

- --解除权限

= --等于某权限

(1)对a权限做测试

mkdir test_a --创建测试文件

chattr +a test_a --添加a权限

rm -rf test_a --删除该文件(肯定是无法删除的)

echo "123" > test_a --覆盖文件内容(肯定是无法覆盖的)

echo "123" >> test_a --向文件追加内容(这步可以实现)

2dc4995cc7a22a3b79c90e14dc5352a4.png

上图测试结果表明,添加a权限后的文件只能对其进行新内容的追加,无法对其做其他修改。

(2)对i权限做测试

mkdir test_i --创建测试文件

chattr +i test_i --添加i权限

rm -rf test_i --删除该文件(肯定是无法删除的)

echo "123" > test_i --覆盖文件内容(肯定是无法覆盖的)

echo "123" >> test_i --向文件追加内容(肯定是无法追加)

8fcd2db92ae2be457ed018db91a82ff4.png

通过该例子可看出,无法对具有i权限的文件做任何修改,但可查看文件里的内容。

(3)对A权限做测试

mkdir test_A --创建测试文件

chattr +A test_A --添加A权限

rm -rf test_A --删除该文件(可删除)

echo "123" > test_A --覆盖文件内容(可覆盖)

echo "123" >> test_A --向文件追加内容(可追加)

stat /root/chattr/test --访问但不会改变文件访问时间

015e3f56ac57731321997f112563fbe4.png

五、总结

权限可分为基本权限、高级权限、chattr安全权限。对于基本权限来说,就是简单的对相应的目录或文件赋予权限,可以用字符表示,也可用数字表示,不同数字代表不同权限。

目录默认的目录时777,文件默认权限时666。此处会引出一个umask掩码,其作用就是控制目录和文件的默认权限(保证目录和文件的安全性),因此在创建目录和文件时,目录默认的权限是755,文件默认的权限是644。

给普通用户提权的手段有suid和sudo两种,其中suid是针对二进制命令的提权,提权后,执行者将拥有该二进制命令文件所有者的执行权限。对于sudo,它具有针对性的对某些用户进行提权,比如针对某个用户或者某些用户,甚至所有用户对某个或某些命令的执行权限(也是拥有该二进制命令文件所有者的执行权限)。

对于目录有写权限(w),则可以在目录中创建、删除新文件,与目录中文件拥有什么权限无关。因此,对于目录来说:应小心赋予写权限(w);对于文件来说:应小心赋予执行权限(x),因为具有执行权限的某个恶意文件可能会危害到计算机安全。

还有就是一种被隐藏的安全权限,当我们使用root用户都无法删除某个文件时,这就要考虑这个文件是否被赋予了a或i的权限,可通过lsattr命令来查看文件的属主。其实这种权限是为了防止root用户的误操作删除某些重要的系统配置文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值