Linux之文件安全上下文及特殊权限位

简介:

文件的权限位

    r, readable

        文件:文本查看工具

        目录:ls

    w, writeable

        文件:可修改

        目录:可在目录下创建、删除文件

    x,exec

        文件:可执行

        目录:cd 或 ls -l


文件的属主或属组

1
2
3
4
5
6
7
[root@izpo45bh60h6bsz ~] # ls -l
-rw-r--r--  1 root      root             27 Jul 31 20:04  grep .txt
rw- 属主的权限
r-- 属组的权限
r-- 其他用户的权限
左root 文件的属主
右root 文件的属组


进程的安全上下文j_0006.gif

    用户: 文件 文件

    centos:  /bin/cat /path/to/somefile

    1)用户对文件的操作(x)

用户名同文件的属主

    用户名同文件的属主,应用属主的权限,不在检查后续的权限(例二中说明)。属主有x,则可执行,运行为一个进程,进程的名字为进程发起者的名字


如果用户名不同文件的属主

    用户名同文件的属组,应用属组的权限,不在检查后续的权限。属组有x,则可执行,运行为一个进程,进程的名字为进程发起者的名字


非属主或属组

    应用其他用户的权限,有x,则可执行,运行为一个进程,进程的名字为进程发起者的名字


   

2) 进程对文件的操作(rw)

 进程的发起者(进程名)同文件的属主,应用属主的权限,不在检查后续的权限

 进程的发起者(进程名)同文件的属组,应用属组的权限,不在检查后续的权限

应用其他权限


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
准备............................
##确认命令的路径
[root@izpo45bh60h6bsz ~] # which --skip-alias cat  
/usr/bin/cat
##复制命令
[root@izpo45bh60h6bsz ~] # cp -p /bin/cat /tmp/cat ##same as --preserve=mode,ownership,timestamps
[root@izpo45bh60h6bsz ~] # ls -l /tmp/cat
-rwxr-xr-x 1 root root 54080 Aug  5 11:28  /tmp/cat
1、创建用户
[root@izpo45bh60h6bsz ~] # useradd centos
2、修改属主和属组
[root@izpo45bh60h6bsz ~] # chown centos.centos /tmp/cat 
[root@izpo45bh60h6bsz ~] # ls -l /tmp/cat
-rwxr-xr-x 1 centos centos 54080 Aug  5 11:29  /tmp/cat
#############注意 chmod所有用户可用,chown,chgrp仅root可用#################
 
例一:
1)应用属主的x权限
》》》用户名同属主,属主有x权限,可运行为一个进程
centos用户下
[centos@izpo45bh60h6bsz ~]$  chmod  700  /tmp/cat
[centos@izpo45bh60h6bsz ~]$  ls  -l  /tmp/cat 
-rwx------ 1 centos centos 54080 Aug  5 11:29  /tmp/cat
[centos@izpo45bh60h6bsz ~]$  ls  -l  /etc/fstab
-rw-r--r-- 1 root root 358 Jun 11 05:05  /etc/fstab
[centos@izpo45bh60h6bsz ~]$  /tmp/cat  /etc/fstab   ##进程的发起者非属主非属组,应用/etc/fstab文件的其他用户的权限
 
#
# /etc/fstab
# Created by anaconda on Fri Feb 24 02:58:22 2017
#
 
例二:
2)应用属组的x权限
》》》用户名同属主同属组,属主无x权限,仅属组有x权限,不能执行
centos用户下
[centos@izpo45bh60h6bsz ~]$  chmod  670  /tmp/cat
[centos@izpo45bh60h6bsz ~]$  ls  -l  /tmp/cat       ##用户匹配到的为属主的权限,没有执行权限位x权限
-rw-rwx--- 1 centos centos 54080 Aug  5 11:29  /tmp/cat
[centos@izpo45bh60h6bsz ~]$  ls  -l  /etc/fstab
-rw-r--r-- 1 root root 358 Jun 11 05:05  /etc/fstab
[centos@izpo45bh60h6bsz ~]$  /tmp/cat  /etc/fstab   ##进程不能发起
- bash /tmp/cat : Permission denied
###由以下的过程分析,首个匹配到centos时,应用首个匹配到的用户的权限。
后面就算有同用户名的属组也不应用其权限 #############################
 
》》》用户名不同属主同属组,仅属组有x权限,能执行
 
###### 修改属主为root
回到root用户
[root@izpo45bh60h6bsz ~] # chown root /tmp/cat 
[root@izpo45bh60h6bsz ~] # ls -l /tmp/cat   ##用户为root,应用属主的权限,没有任何权限
----rwx--- 1 root centos 54080 Aug  5 11:29  /tmp/cat
[root@izpo45bh60h6bsz ~] # /tmp/cat  /etc/fstab   ###嘿嘿,好奇怪
 
#
# /etc/fstab
# Created by anaconda on Fri Feb 24 02:58:22 2017
#######root用户没有权限,执行。依然有执行权限###########
 
回到centos用户
[centos@izpo45bh60h6bsz ~]$  ls  -l  /tmp/cat     ##用户为centos,第一个匹配到的是属组,应用属组的权限,属组有x权限,可执行为一个进程
----rwx--- 1 root centos 54080 Aug  5 11:29  /tmp/cat
[centos@izpo45bh60h6bsz ~]$  ls  -l  /etc/fstab
-rw-r--r-- 1 root root 358 Jun 11 05:05  /etc/fstab
[centos@izpo45bh60h6bsz ~]$  /tmp/cat  /etc/fstab   ##能够执行为进程,进程名为用户名,此时应用/etc/fstab文件其他用户的权限
 
#
# /etc/fstab
# Created by anaconda on Fri Feb 24 02:58:22 2017
#######比对来看,第一个被匹配到的用户类别,应用对应类的权限###########
 
》》》用户名同属主同属组,仅其他有x权限,不能执行
root用户下
[root@izpo45bh60h6bsz ~] # chown centos:centos /tmp/cat
[root@izpo45bh60h6bsz ~] # chmod 667 /tmp/cat
 
centos用户下
[centos@izpo45bh60h6bsz ~]$  ls  -l  /tmp/cat    ##匹配到第一个同用户名的是属主,应用属主的权限,无x权限,不能运行为进程
-rw-rw-rwx 1 centos centos 54080 Aug  5 11:29  /tmp/cat
[centos@izpo45bh60h6bsz ~]$  ls  -l  /etc/fstab
-rw-r--r-- 1 root root 358 Jun 11 05:05  /etc/fstab
[centos@izpo45bh60h6bsz ~]$  /tmp/cat  /etc/fstab   ##不能运行为一个进程,权限拒绝
- bash /tmp/cat : Permission denied
 
例三
3)应用其他用户的权限
》》》用户名不同属主不同属组,其他有x权限,能执行
root用户下
[root@izpo45bh60h6bsz ~] # chown root.root /tmp/cat
[root@izpo45bh60h6bsz ~] # chmod 755 /tmp/cat
 
centos用户下
[centos@izpo45bh60h6bsz ~]$  ls  -l  /tmp/cat       ##匹配不到,应用其他权限,其他有x权限,可以运行为一个进程
-rwxr-xr-x 1 root root 54080 Aug  5 11:29  /tmp/cat
[centos@izpo45bh60h6bsz ~]$  /tmp/cat  /etc/fstab   ##进程名为用户名,进程名不能匹配到/etc/fstab属主或属组的权限,应用其他权限,可读
 
#
# /etc/fstab
# Created by anaconda on Fri Feb 24 02:58:22 2017
.....


特殊权限位

    

SUID

    文件对文件有x权限,运行为进程后,进程名是进程发起者的名字。

    当存在SUID权限后,运行为进程,其进程名是文件的属主

SGID

    任何人创建文件和目录时,其属组为创建者的基本组

    一旦某目录被设定了SGID权限,则对此目录有写权限的用户,在此目录或子目录中创建的文件为目录的基本组

Sticky 

    限制公共场景的限制 ,对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件。避免别人删除不属于自己的文件,设置了sticky权限

   


 SUID

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1、在root中修改文件的属主和属组 user.user user:user
[root@izpo45bh60h6bsz ~] # chown root.centos /tmp/cat
[root@izpo45bh60h6bsz ~] # ls -l /tmp/cat
-rw-rw-rwx 1 root centos 54080 Aug  5 11:29  /tmp/cat
2、在centos中修改权限属组必须有x
[root@izpo45bh60h6bsz ~] # su - centos
Last login: Sat Aug  5 11:33:41 CST 2017 on pts /1
Welcome 10003 your home  /home/centos
[centos@izpo45bh60h6bsz ~]$  chmod  755  /tmp/cat
[centos@izpo45bh60h6bsz ~]$  ls  -l  /tmp/cat      ##用户centos匹配到属组的权限,能执行为一个进程,进程的名字为进程发起者的名字
-rwxr-xr-x 1 root centos 54080 Aug  5 11:29  /tmp/cat
[centos@izpo45bh60h6bsz ~]$  ls  -l  /etc/shadow  
---------- 1 root root 2895 Aug  5 11:31  /etc/shadow
[centos@izpo45bh60h6bsz ~]$  /tmp/cat  /etc/shadow   ##进程名不能匹配到/etc/shadow属主或属组,应用其他用户的权限,其他用户没有任何权限。
/tmp/cat /etc/shadow : Permission denied
 
3、在root用户中给此用户授权suid权限
[centos@izpo45bh60h6bsz ~]$  chmod  u+s  /tmp/cat
chmod : changing permissions of ‘ /tmp/cat ’: Operation not permitted
[root@izpo45bh60h6bsz ~] # chmod u+s /tmp/cat
[root@izpo45bh60h6bsz ~] # ls -l /tmp/cat
-rwsr-xr-x 1 root centos 54080 Aug  5 11:29  /tmp/cat
 
4、在centos用户中运行 cat  /etc/shadow
[centos@izpo45bh60h6bsz ~]$  ls  -l  /tmp/cat   ##确认权限
-rwsr-xr-x 1 root centos 54080 Aug  5 11:29  /tmp/cat
[centos@izpo45bh60h6bsz ~]$  ls  -l  /etc/shadow  ##确认centos用户对文件没有权限,centos用户发起的进程对文件也不可能有权限
---------- 1 root root 2895 Aug  5 11:31  /etc/shadow 
[centos@izpo45bh60h6bsz ~]$  /tmp/cat  /etc/shadow  ##执行时,进程的属主为root,root对任何文件都能操作
.............
test1:!!:17327:0:99999:7:100:100:
test2:!!:17327:0:99999:7:100:100:
test3:!!:17327:0:99999:7:100:100:
test4:!!:17327:0:99999:7:100:100:
..............

问题1:用户为自己设置密码时,需要修改shadow文件,shadow文件对任何用户都没有写权限,故而,用户执行passwd命令后,其进程名不是进程发起者,而是........

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[root@izpo45bh60h6bsz ~] # fgrep "test1" /etc/shadow ##纯文本字符组成的PATTERN,对目标文本逐行匹配,打印匹配到的字符所在的行
test1:!!:17327:0:99999:7:100:100:
test18:$6...........
 
[root@izpo45bh60h6bsz ~] # su - test1 
[test1@izpo45bh60h6bsz ~]$  passwd   ##用户没有密码时,不能修改
Changing password  for  user test1.
Changing password  for  test1.
(current) UNIX password: 
passwd : Authentication token manipulation error
 
[root@izpo45bh60h6bsz ~] # echo "123" | passwd --stdin test1
Changing password  for  user test1.
passwd : all authentication tokens updated successfully.
 
[root@izpo45bh60h6bsz ~] # fgrep 'test1' /etc/shadow
test1:$6$tMqP7HCh$Idl82b1AqXsAssE57D2jWQNrMgPRtZ7RP /OoSTNMHzG1fEruYW49f6QZfe314ETLlYwWu5YtUJu8Rx . /Uceif/ :17383:0:99999:7:::
test18:$6...........
 
尝试修改密码,从而修改shadow文件
##生成密码,普通用户修改密码必须满足密码复杂度机制,长,随机,周期长,数字、字母、特殊字符3种
[root@izpo45bh60h6bsz ~] # tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 6 | xargs
FjG1LO
 
##修改密码
[test1@izpo45bh60h6bsz ~]$  passwd
Changing password  for  user test1.
Changing password  for  test1.
(current) UNIX password: 
New password: 
Retype new password: 
passwd : all authentication tokens updated successfully.
[test1@izpo45bh60h6bsz ~]$ 
 
查看shadow文件
[root@izpo45bh60h6bsz ~] # fgrep 'test1' /etc/shadow
test1:$6$KvgQbaJC$AxpTwktyH1kDldxoMXorPwL /2VHEutGaZq/RXXL8xLPtgStH23MDfHPlo5ZtFKRJTjKv/kmduyeBmPd1xiyV60 :17383:0:99999:7:::
test18:$6...........
 
###########密码部分改变的原因##############
[test1@izpo45bh60h6bsz ~]$  ls  -l  /bin/passwd        ##test1用户能执行此文件
-rwsr-xr-x. 1 root root 27832 Jun 10  2014  /bin/passwd
[test1@izpo45bh60h6bsz ~]$  ls  -l  /etc/shadow        ##执行后的进程名为root,故而能改shadow文件
---------- 1 root root 2985 Aug  5 13:56  /etc/shadow


SGID

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
1、准备目录
[root@izpo45bh60h6bsz ~] # cd /tmp
[root@izpo45bh60h6bsz tmp] # mkdir test
 
[root@izpo45bh60h6bsz tmp] # ls -ld test  ##root用户创建,属组、主为root
drwxr-xr-x 2 root root 4096 Aug  5 14:54  test
 
[root@izpo45bh60h6bsz tmp] # groupadd mygrp #添加用户
[root@izpo45bh60h6bsz tmp] # groupadd distro
[root@izpo45bh60h6bsz tmp] # useradd centos
 
[root@izpo45bh60h6bsz tmp] # chown .mygrp test 
[root@izpo45bh60h6bsz tmp] # ls -ld test
drwxr-xr-x 2 root mygrp 4096 Aug  5 14:54  test
 
》》》任何人创建文件和目录时,其属组为创建者的基本组
1、mygrp用户组内的用户对此目录有w权限
[root@izpo45bh60h6bsz tmp] # chmod g+w test
[root@izpo45bh60h6bsz tmp] # ls -ld test
drwxrwxr-x 2 root mygrp 4096 Aug  5 14:54  test
 
2、添加distro、centos用户到mygrp组内,让distro用户拥有mygrp组的权限
[root@izpo45bh60h6bsz tmp] # su - centos
[centos@izpo45bh60h6bsz ~]$  mkdir  /tmp/test/a .centos
mkdir : cannot create directory ‘ /tmp/test/a .centos’: Permission denied
[centos@izpo45bh60h6bsz ~]$  touch  /tmp/test/a .centos
touch : cannot  touch  /tmp/test/a .centos’: Permission denied
 
[root@izpo45bh60h6bsz tmp] # gpasswd -a distro mygrp
[root@izpo45bh60h6bsz tmp] # gpasswd -a centos mygrp
 
3、让mygrp、distro用户分别在此目录中创建文件
[root@izpo45bh60h6bsz tmp] # su - centos 
[centos@izpo45bh60h6bsz ~]$  touch  /tmp/test/a .centos
[centos@izpo45bh60h6bsz ~]$  ls  -l  /tmp/test/a .centos
-rw-rw-r-- 1 centos centos 0 Aug  5 15:12  /tmp/test/a .centos
 
[root@izpo45bh60h6bsz tmp] # su - distro
[distro@izpo45bh60h6bsz ~]$  touch  /tmp/test/a .distro
[distro@izpo45bh60h6bsz ~]$  ls  -l  /tmp/test/a .distro
-rw-rw-r-- 1 distro distro 0 Aug  5 15:12  /tmp/test/a .distro
 
》》》一旦某目录被设定了SGID权限,则对此目录有写权限的用户,在此目录或子目录中创建的文件为目录的基本组
 
root用户中
[root@izpo45bh60h6bsz tmp] # ls -ld test
drwxr-xr-x 2 root mygrp 4096 Aug  5 14:54  test
[root@izpo45bh60h6bsz tmp] # chmod g+s /tmp/test
[root@izpo45bh60h6bsz tmp] # ls -ld /tmp/test
drwxrwsr-x 2 root mygrp 4096 Aug  5 15:12  /tmp/test   ##小写s
 
1、让mygrp、distro用户分别在此目录中创建文件
[root@izpo45bh60h6bsz tmp] # su - distro
[distro@izpo45bh60h6bsz ~]$  touch  /tmp/test/b .distro
[distro@izpo45bh60h6bsz ~]$  ls  -l  /tmp/test/b .distro
-rw-rw-r-- 1 distro mygrp 0 Aug  5 15:16  /tmp/test/b .distro
 
[root@izpo45bh60h6bsz tmp] # su - centos
[centos@izpo45bh60h6bsz ~]$  touch  /tmp/test/b .centos
[centos@izpo45bh60h6bsz ~]$  ls  -l  /tmp/test/b .centos
-rw-rw-r-- 1 centos mygrp 0 Aug  5 15:16  /tmp/test/b .centos


Sticky

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
##centos用户对目录有写权限,可以删除任意文件
[centos@izpo45bh60h6bsz ~]$  ls  -l  /tmp/test
total 0
-rw-rw-r-- 1 centos centos 0 Aug  5 15:12 a.centos
-rw-rw-r-- 1 distro distro 0 Aug  5 15:12 a.distro
-rw-rw-r-- 1 centos mygrp  0 Aug  5 15:16 b.centos
-rw-rw-r-- 1 distro mygrp  0 Aug  5 15:16 b.distro
 
##删除a.distro文件
[centos@izpo45bh60h6bsz ~]$  rm  /tmp/test/a .distro
rm : remove write-protected regular empty  file  /tmp/test/a .distro’? y
[centos@izpo45bh60h6bsz ~]$  ls  -l  /tmp/test
total 0
-rw-rw-r-- 1 centos centos 0 Aug  5 15:12 a.centos
-rw-rw-r-- 1 centos mygrp  0 Aug  5 15:16 b.centos
-rw-rw-r-- 1 distro mygrp  0 Aug  5 15:16 b.distro
 
##避免别人删除不属于自己的文件,设置了sticky权限
[root@izpo45bh60h6bsz tmp] # chmod o+t /tmp/test
[root@izpo45bh60h6bsz tmp] # su - centos
[centos@izpo45bh60h6bsz ~]$  rm  /tmp/test/b .distro 
rm : cannot remove ‘ /tmp/test/b .distro’: Operation not permitted


SGID,SUID,STICKY

sst 三位二进制用八进制表示

1
2
3
4
5
6
7
8
9
10
11
     000 0
     001 1
     010 2
     011 3
     100 4
     101 5 
     110 6
     111 7
     
1777 --> sticky + rwxrwxrwx
4777 --> suid + rwxrwxrwx


特殊权限位映射

    SUID占据属主的执行权限位

    SGID占据属组的执行权限位

    STICKY占据其他的执行权限位

    分别用s,s,t表示,有x权限时,用小宝,没有s权限时,用大写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SUID权限位
1)有x
drwxrwxr-x 2 centos centos 4096 Aug  5 15:11 a.centos
drwxrwxr-x 2 centos centos 4096 Aug  5 15:11 a.centos
# chmod u+s a.centos
drwsrwxr-x 2 centos centos 4096 Aug  5 15:11 a.centos
2)无x
# chmod u-x a.centos
drwSrwxr-x 2 centos centos 4096 Aug  5 15:11 a.centos
 
SGID权限位
1)有x
-rwxrwxr-- 1 distro distro    0 Aug  5 15:04 a.distro
# chmod g+s a.distro
-rw-rwsr-- 1 distro distro    0 Aug  5 15:04 a.distro
2)无x
# chmod g-x a.distro
-rw-rwSr-- 1 distro distro    0 Aug  5 15:04 a.distro
STICKY权限位
1)无x
-rw-rw-r-- 1 mygrp  mygrp     0 Aug  5 15:03 a.mygrp
chmod  o+t a.mygrp 
-rw-rw-r-T 1 mygrp mygrp 0 Aug  5 15:03 a.mygrp
2)有x
# chmod o+x a.mygrp 
-rw-rw-r-t 1 mygrp mygrp 0 Aug  5 15:03 a.mygrp










本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1953825,如需转载请自行联系原作者
目录
相关文章
|
15天前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
37 0
Vanilla OS:下一代安全 Linux 发行版
|
9天前
|
Linux 开发工具 Perl
在Linux中,有一个文件,如何删除包含“www“字样的字符?
在Linux中,如果你想删除一个文件中包含特定字样(如“www”)的所有字符或行,你可以使用多种文本处理工具来实现。以下是一些常见的方法:
34 5
|
9天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
27 6
|
9天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
36 6
|
10天前
|
监控 Linux Perl
Linux 命令小技巧:显示文件指定行的内容
在 Linux 系统中,处理文本文件是一项常见任务。本文介绍了如何使用 head、tail、sed 和 awk 等命令快速显示文件中的指定行内容,帮助你高效处理文本文件。通过实际应用场景和案例分析,展示了这些命令在代码审查、日志分析和文本处理中的具体用途。同时,还提供了注意事项和技巧,帮助你更好地掌握这些命令。
26 4
|
15天前
|
缓存 监控 Linux
|
6月前
|
Linux
百度搜索:蓝易云【Linux中如何对文件进行压缩和解压缩?】
这些是在Linux中进行文件压缩和解压缩的常见方法。根据您的需求和具体情况,可能会使用其他压缩工具和选项。您可以通过查阅相应命令的帮助文档来获取更多详细信息。
88 1
|
6月前
|
NoSQL Java Linux
Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)
Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)
|
6月前
|
算法 Java Linux
Linux下文件增删改查定位压缩操作与权限所属用户
Linux下文件增删改查定位压缩操作与权限所属用户
71 0
26Linux - 文件管理(文件压缩解压:bzip2)
26Linux - 文件管理(文件压缩解压:bzip2)
62 0