Linux之檔案安全上下文及特殊許可權位

餘二五發表於2017-11-16

檔案的許可權位

    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,如需轉載請自行聯絡原作者


相關文章