檔案的權限位
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>

使用者: 檔案 檔案
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' < /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 --> sticky + rwxrwxrwx</code>
<code>4777 --> 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,如需轉載請自行聯系原作者