天天看点

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

文件的权限位

    r, readable

        文件:文本查看工具

        目录:ls

    w, writeable

        文件:可修改

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

    x,exec

        文件:可执行

        目录:cd 或 ls -l

文件的属主或属组

1

2

3

4

5

6

7

<code>[root@izpo45bh60h6bsz ~]</code><code># ls -l</code>

<code>-rw-r--r--  1 root      root             27 Jul 31 20:04 </code><code>grep</code><code>.txt</code>

<code>rw- 属主的权限</code>

<code>r-- 属组的权限</code>

<code>r-- 其他用户的权限</code>

<code>左root 文件的属主</code>

<code>右root 文件的属组</code>

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

    用户: 文件 文件

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

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

用户名同文件的属主

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

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

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

非属主或属组

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

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

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

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

应用其他权限

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

<code>准备............................</code>

<code>##确认命令的路径</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># which --skip-alias cat  </code>

<code>/usr/bin/cat</code>

<code>##复制命令</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># cp -p /bin/cat /tmp/cat ##same as --preserve=mode,ownership,timestamps</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># ls -l /tmp/cat</code>

<code>-rwxr-xr-x 1 root root 54080 Aug  5 11:28 </code><code>/tmp/cat</code>

<code>1、创建用户</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># useradd centos</code>

<code>2、修改属主和属组</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># chown centos.centos /tmp/cat </code>

<code>-rwxr-xr-x 1 centos centos 54080 Aug  5 11:29 </code><code>/tmp/cat</code>

<code>#############注意 chmod所有用户可用,chown,chgrp仅root可用#################</code>

<code>例一:</code>

<code>1)应用属主的x权限</code>

<code>》》》用户名同属主,属主有x权限,可运行为一个进程</code>

<code>centos用户下</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>chmod</code> <code>700 </code><code>/tmp/cat</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/cat</code> 

<code>-rwx------ 1 centos centos 54080 Aug  5 11:29 </code><code>/tmp/cat</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/etc/fstab</code>

<code>-rw-r--r-- 1 root root 358 Jun 11 05:05 </code><code>/etc/fstab</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>/tmp/cat</code> <code>/etc/fstab</code>  <code>##进程的发起者非属主非属组,应用/etc/fstab文件的其他用户的权限</code>

<code>#</code>

<code># /etc/fstab</code>

<code># Created by anaconda on Fri Feb 24 02:58:22 2017</code>

<code>例二:</code>

<code>2)应用属组的x权限</code>

<code>》》》用户名同属主同属组,属主无x权限,仅属组有x权限,不能执行</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>chmod</code> <code>670 </code><code>/tmp/cat</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/cat</code>      <code>##用户匹配到的为属主的权限,没有执行权限位x权限</code>

<code>-rw-rwx--- 1 centos centos 54080 Aug  5 11:29 </code><code>/tmp/cat</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>/tmp/cat</code> <code>/etc/fstab</code>  <code>##进程不能发起</code>

<code>-</code><code>bash</code><code>: </code><code>/tmp/cat</code><code>: Permission denied</code>

<code>###由以下的过程分析,首个匹配到centos时,应用首个匹配到的用户的权限。</code>

<code>后面就算有同用户名的属组也不应用其权限</code><code>#############################</code>

<code>》》》用户名不同属主同属组,仅属组有x权限,能执行</code>

<code>###### 修改属主为root</code>

<code>回到root用户</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># chown root /tmp/cat </code>

<code>[root@izpo45bh60h6bsz ~]</code><code># ls -l /tmp/cat   ##用户为root,应用属主的权限,没有任何权限</code>

<code>----rwx--- 1 root centos 54080 Aug  5 11:29 </code><code>/tmp/cat</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># /tmp/cat  /etc/fstab   ###嘿嘿,好奇怪</code>

<code>#######root用户没有权限,执行。依然有执行权限###########</code>

<code>回到centos用户</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/cat</code>    <code>##用户为centos,第一个匹配到的是属组,应用属组的权限,属组有x权限,可执行为一个进程</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>/tmp/cat</code> <code>/etc/fstab</code>  <code>##能够执行为进程,进程名为用户名,此时应用/etc/fstab文件其他用户的权限</code>

<code>#######比对来看,第一个被匹配到的用户类别,应用对应类的权限###########</code>

<code>》》》用户名同属主同属组,仅其他有x权限,不能执行</code>

<code>root用户下</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># chown centos:centos /tmp/cat</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># chmod 667 /tmp/cat</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/cat</code>   <code>##匹配到第一个同用户名的是属主,应用属主的权限,无x权限,不能运行为进程</code>

<code>-rw-rw-rwx 1 centos centos 54080 Aug  5 11:29 </code><code>/tmp/cat</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>/tmp/cat</code> <code>/etc/fstab</code>  <code>##不能运行为一个进程,权限拒绝</code>

<code>例三</code>

<code>3)应用其他用户的权限</code>

<code>》》》用户名不同属主不同属组,其他有x权限,能执行</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># chown root.root /tmp/cat</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># chmod 755 /tmp/cat</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/cat</code>      <code>##匹配不到,应用其他权限,其他有x权限,可以运行为一个进程</code>

<code>-rwxr-xr-x 1 root root 54080 Aug  5 11:29 </code><code>/tmp/cat</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>/tmp/cat</code> <code>/etc/fstab</code>  <code>##进程名为用户名,进程名不能匹配到/etc/fstab属主或属组的权限,应用其他权限,可读</code>

<code>.....</code>

特殊权限位

SUID

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

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

SGID

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

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

Sticky 

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

 SUID

<code>1、在root中修改文件的属主和属组 user.user user:user</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># chown root.centos /tmp/cat</code>

<code>-rw-rw-rwx 1 root centos 54080 Aug  5 11:29 </code><code>/tmp/cat</code>

<code>2、在centos中修改权限属组必须有x</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># su - centos</code>

<code>Last login: Sat Aug  5 11:33:41 CST 2017 on pts</code><code>/1</code>

<code>Welcome 10003 your home </code><code>/home/centos</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>chmod</code> <code>755 </code><code>/tmp/cat</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/cat</code>     <code>##用户centos匹配到属组的权限,能执行为一个进程,进程的名字为进程发起者的名字</code>

<code>-rwxr-xr-x 1 root centos 54080 Aug  5 11:29 </code><code>/tmp/cat</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/etc/shadow</code>  

<code>---------- 1 root root 2895 Aug  5 11:31 </code><code>/etc/shadow</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>/tmp/cat</code> <code>/etc/shadow</code>  <code>##进程名不能匹配到/etc/shadow属主或属组,应用其他用户的权限,其他用户没有任何权限。</code>

<code>/tmp/cat</code><code>: </code><code>/etc/shadow</code><code>: Permission denied</code>

<code>3、在root用户中给此用户授权suid权限</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>chmod</code> <code>u+s </code><code>/tmp/cat</code>

<code>chmod</code><code>: changing permissions of ‘</code><code>/tmp/cat</code><code>’: Operation not permitted</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># chmod u+s /tmp/cat</code>

<code>-rwsr-xr-x 1 root centos 54080 Aug  5 11:29 </code><code>/tmp/cat</code>

<code>4、在centos用户中运行</code><code>cat</code> <code>/etc/shadow</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/cat</code>  <code>##确认权限</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/etc/shadow</code> <code>##确认centos用户对文件没有权限,centos用户发起的进程对文件也不可能有权限</code>

<code>---------- 1 root root 2895 Aug  5 11:31 </code><code>/etc/shadow</code> 

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>/tmp/cat</code> <code>/etc/shadow</code> <code>##执行时,进程的属主为root,root对任何文件都能操作</code>

<code>.............</code>

<code>test1:!!:17327:0:99999:7:100:100:</code>

<code>test2:!!:17327:0:99999:7:100:100:</code>

<code>test3:!!:17327:0:99999:7:100:100:</code>

<code>test4:!!:17327:0:99999:7:100:100:</code>

<code>..............</code>

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

<code>[root@izpo45bh60h6bsz ~]</code><code># fgrep "test1" /etc/shadow ##纯文本字符组成的PATTERN,对目标文本逐行匹配,打印匹配到的字符所在的行</code>

<code>test18:$6...........</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># su - test1 </code>

<code>[test1@izpo45bh60h6bsz ~]$ </code><code>passwd</code>  <code>##用户没有密码时,不能修改</code>

<code>Changing password </code><code>for</code> <code>user test1.</code>

<code>Changing password </code><code>for</code> <code>test1.</code>

<code>(current) UNIX password: </code>

<code>passwd</code><code>: Authentication token manipulation error</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># echo "123" | passwd --stdin test1</code>

<code>passwd</code><code>: all authentication tokens updated successfully.</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># fgrep 'test1' /etc/shadow</code>

<code>test1:$6$tMqP7HCh$Idl82b1AqXsAssE57D2jWQNrMgPRtZ7RP</code><code>/OoSTNMHzG1fEruYW49f6QZfe314ETLlYwWu5YtUJu8Rx</code><code>.</code><code>/Uceif/</code><code>:17383:0:99999:7:::</code>

<code>尝试修改密码,从而修改shadow文件</code>

<code>##生成密码,普通用户修改密码必须满足密码复杂度机制,长,随机,周期长,数字、字母、特殊字符3种</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># tr -dc 'a-zA-Z0-9' &lt; /dev/urandom | head -c 6 | xargs</code>

<code>FjG1LO</code>

<code>##修改密码</code>

<code>[test1@izpo45bh60h6bsz ~]$ </code><code>passwd</code>

<code>New password: </code>

<code>Retype new password: </code>

<code>[test1@izpo45bh60h6bsz ~]$ </code>

<code>查看shadow文件</code>

<code>test1:$6$KvgQbaJC$AxpTwktyH1kDldxoMXorPwL</code><code>/2VHEutGaZq/RXXL8xLPtgStH23MDfHPlo5ZtFKRJTjKv/kmduyeBmPd1xiyV60</code><code>:17383:0:99999:7:::</code>

<code>###########密码部分改变的原因##############</code>

<code>[test1@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/bin/passwd</code>       <code>##test1用户能执行此文件</code>

<code>-rwsr-xr-x. 1 root root 27832 Jun 10  2014 </code><code>/bin/passwd</code>

<code>[test1@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/etc/shadow</code>       <code>##执行后的进程名为root,故而能改shadow文件</code>

<code>---------- 1 root root 2985 Aug  5 13:56 </code><code>/etc/shadow</code>

<code>1、准备目录</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># cd /tmp</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># mkdir test</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># ls -ld test  ##root用户创建,属组、主为root</code>

<code>drwxr-xr-x 2 root root 4096 Aug  5 14:54 </code><code>test</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># groupadd mygrp #添加用户</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># groupadd distro</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># useradd centos</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># chown .mygrp test </code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># ls -ld test</code>

<code>drwxr-xr-x 2 root mygrp 4096 Aug  5 14:54 </code><code>test</code>

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

<code>1、mygrp用户组内的用户对此目录有w权限</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># chmod g+w test</code>

<code>drwxrwxr-x 2 root mygrp 4096 Aug  5 14:54 </code><code>test</code>

<code>2、添加distro、centos用户到mygrp组内,让distro用户拥有mygrp组的权限</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># su - centos</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>mkdir</code> <code>/tmp/test/a</code><code>.centos</code>

<code>mkdir</code><code>: cannot create directory ‘</code><code>/tmp/test/a</code><code>.centos’: Permission denied</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>touch</code> <code>/tmp/test/a</code><code>.centos</code>

<code>touch</code><code>: cannot </code><code>touch</code> <code>‘</code><code>/tmp/test/a</code><code>.centos’: Permission denied</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># gpasswd -a distro mygrp</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># gpasswd -a centos mygrp</code>

<code>3、让mygrp、distro用户分别在此目录中创建文件</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># su - centos </code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/test/a</code><code>.centos</code>

<code>-rw-rw-r-- 1 centos centos 0 Aug  5 15:12 </code><code>/tmp/test/a</code><code>.centos</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># su - distro</code>

<code>[distro@izpo45bh60h6bsz ~]$ </code><code>touch</code> <code>/tmp/test/a</code><code>.distro</code>

<code>[distro@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/test/a</code><code>.distro</code>

<code>-rw-rw-r-- 1 distro distro 0 Aug  5 15:12 </code><code>/tmp/test/a</code><code>.distro</code>

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

<code>root用户中</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># chmod g+s /tmp/test</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># ls -ld /tmp/test</code>

<code>drwxrwsr-x 2 root mygrp 4096 Aug  5 15:12 </code><code>/tmp/test</code>  <code>##小写s</code>

<code>1、让mygrp、distro用户分别在此目录中创建文件</code>

<code>[distro@izpo45bh60h6bsz ~]$ </code><code>touch</code> <code>/tmp/test/b</code><code>.distro</code>

<code>[distro@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/test/b</code><code>.distro</code>

<code>-rw-rw-r-- 1 distro mygrp 0 Aug  5 15:16 </code><code>/tmp/test/b</code><code>.distro</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>touch</code> <code>/tmp/test/b</code><code>.centos</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/test/b</code><code>.centos</code>

<code>-rw-rw-r-- 1 centos mygrp 0 Aug  5 15:16 </code><code>/tmp/test/b</code><code>.centos</code>

Sticky

<code>##centos用户对目录有写权限,可以删除任意文件</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>ls</code> <code>-l </code><code>/tmp/test</code>

<code>total 0</code>

<code>-rw-rw-r-- 1 centos centos 0 Aug  5 15:12 a.centos</code>

<code>-rw-rw-r-- 1 distro distro 0 Aug  5 15:12 a.distro</code>

<code>-rw-rw-r-- 1 centos mygrp  0 Aug  5 15:16 b.centos</code>

<code>-rw-rw-r-- 1 distro mygrp  0 Aug  5 15:16 b.distro</code>

<code>##删除a.distro文件</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>rm</code> <code>/tmp/test/a</code><code>.distro</code>

<code>rm</code><code>: remove write-protected regular empty </code><code>file</code> <code>‘</code><code>/tmp/test/a</code><code>.distro’? y</code>

<code>##避免别人删除不属于自己的文件,设置了sticky权限</code>

<code>[root@izpo45bh60h6bsz tmp]</code><code># chmod o+t /tmp/test</code>

<code>[centos@izpo45bh60h6bsz ~]$ </code><code>rm</code> <code>/tmp/test/b</code><code>.distro </code>

<code>rm</code><code>: cannot remove ‘</code><code>/tmp/test/b</code><code>.distro’: Operation not permitted</code>

SGID,SUID,STICKY

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

<code>    </code><code>000 0</code>

<code>    </code><code>001 1</code>

<code>    </code><code>010 2</code>

<code>    </code><code>011 3</code>

<code>    </code><code>100 4</code>

<code>    </code><code>101 5 </code>

<code>    </code><code>110 6</code>

<code>    </code><code>111 7</code>

<code>    </code> 

<code>1777 --&gt; sticky + rwxrwxrwx</code>

<code>4777 --&gt; suid + rwxrwxrwx</code>

特殊权限位映射

    SUID占据属主的执行权限位

    SGID占据属组的执行权限位

    STICKY占据其他的执行权限位

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

<code>SUID权限位</code>

<code>1)有x</code>

<code>drwxrwxr-x 2 centos centos 4096 Aug  5 15:11 a.centos</code>

<code># chmod u+s a.centos</code>

<code>drwsrwxr-x 2 centos centos 4096 Aug  5 15:11 a.centos</code>

<code>2)无x</code>

<code># chmod u-x a.centos</code>

<code>drwSrwxr-x 2 centos centos 4096 Aug  5 15:11 a.centos</code>

<code>SGID权限位</code>

<code>-rwxrwxr-- 1 distro distro    0 Aug  5 15:04 a.distro</code>

<code># chmod g+s a.distro</code>

<code>-rw-rwsr-- 1 distro distro    0 Aug  5 15:04 a.distro</code>

<code># chmod g-x a.distro</code>

<code>-rw-rwSr-- 1 distro distro    0 Aug  5 15:04 a.distro</code>

<code>STICKY权限位</code>

<code>1)无x</code>

<code>-rw-rw-r-- 1 mygrp  mygrp     0 Aug  5 15:03 a.mygrp</code>

<code>chmod</code> <code>o+t a.mygrp </code>

<code>-rw-rw-r-T 1 mygrp mygrp 0 Aug  5 15:03 a.mygrp</code>

<code>2)有x</code>

<code># chmod o+x a.mygrp </code>

<code>-rw-rw-r-t 1 mygrp mygrp 0 Aug  5 15:03 a.mygrp</code>

<code></code>

本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1953825,如需转载请自行联系原作者

继续阅读