我們登陸到系統之後,建立一個普通檔案或者目錄的時候,會有一個預設的許可權。普通檔案是644,目錄檔案是755,想必大家都知道這個是由umask這個值決定的。我們可以直接執行umask命令查看,linux系統預設的umask值是0022。想改變建立檔案預設的許可權,我們直接修改umask就可以,但是一般的許可權都是通過777-022得到的預設許可權位。022前面的這個0是什麼呢?第一個0就是特殊許可權位,下邊我們就來跟大家說一下setuid、setgid和sticky這個三個特殊許可權位。
1.suid,set uid:在一個程式或命令上添加setuid以後(u+s),這樣屬主有了s許可權,意味著任何使用者在執行此程式時,其進程的屬主不再是發起者本人,而是這個程式的屬主。最典型的一個例子就是passwd這個命令;
普通使用者運執行passwd命令來修改自己的密碼,其實最終更改的是/etc/passwd這個檔案。
我們知道/etc/passwd檔案是使用者管理的設定檔,只有root許可權的使用者才能更改。
[root@Vmware5 ~]# ls -l /etc/passwd-rw-r--r--. 1 root root 981 Oct 25 01:00 /etc/passwd
按照常規的邏輯思維,普通使用者是修改不了/etc/passwd此檔案的,但是在passwd這個命令上添加了setuid這個特殊許可權位,普通帳號臨時變成root,就能間接修改自己帳號的密碼了。
[root@Vmware5 ~]# ls -l /usr/bin/passwd (s就是suid位)-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
設定setuid的方法:(其實前邊提到過了參數是u+s)
chmodu(+|-)s /path/somefilechmod4664 /path/somefile注意:s:表示屬主原來有執行許可權S:表示屬主原來沒有執行許可權
執行個體示範:
添加一個名字為taokey的普通使用者
[root@Vmware5 ~]# useradd taokey
把/etc/fsatb檔案拷貝到/tmp目錄下一份
[root@Vmware5 ~]# cp /etc/fstab /tmp/[root@Vmware5 ~]# cd /tmp/
查看/tmp目錄下fstab檔案的屬性
[root@Vmware5 tmp]# ll fstab-rw-r--r--. 1 root root 899 Oct 25 00:16 fstab
把其他使用者的讀許可權給去掉
[root@Vmware5 tmp]# chmod o-r fstab[root@Vmware5 tmp]# ll fstab-rw-r-----. 1 root root 899 Oct 25 00:16 fstab
切換到普通使用者taokey
[root@Vmware5 tmp]# su - taokey
執行cat命令,看下是否可以查看fstab檔案
[taokey@Vmware5 ~]$ cat/tmp/fstabcat: /tmp/fstab: Permission denied
由於other去掉了r許可權,所有提示cat被拒絕
為了保留原始環境,把cat命令拷貝到/tmp目錄一份
[root@Vmware5 ~]# cp /bin/cat /tmp/[taokey@Vmware5 tmp]$ ls-l fstab cat-rwxr-xr-x. 1 root root 45224 Oct 25 00:21 cat-rw-r-----. 1 root root 899 Oct 25 00:16 fstab[taokey@Vmware5 tmp]$ ./catfstab./cat: fstab: Permission denied[taokey@Vmware5 tmp]$ exitlogout
特換到root使用者,添加setuid許可權
[root@Vmware5 tmp]# chmod u+s cat
添加完s許可權位之後,再切換到普通使用者taokey,測試是否可以成功執行cat命令
[root@Vmware5 tmp]# su - taokey[taokey@Vmware5 ~]$ cd/tmp/[taokey@Vmware5 tmp]$ ./catfstab## /etc/fstab# Created by anaconda on Thu Oct 24 23:49:23 2013## Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#UUID=b49ee2b3-75aa-4227-a9ff-5d0d990af0fd / ext4 defaults 1 1UUID=3a69daa4-b393-4694-abbb-b856345b376d /bootext4 defaults 1 2UUID=34f85ed8-5f68-4fdc-8aa0-e50d2f9f012e /homeext4 defaults 1 2UUID=95d97c70-9291-499b-ac16-a38508a85e4d swap swap defaults 0 0tmpfs /dev/shmtmpfs defaults 0 0devpts /dev/ptsdevpts gid=5,mode=620 0 0sysfs /syssysfs defaults 0 0proc /procproc defaults 0 0
切換到普通使用者之後,可以成功執行cat命令,查看/tmp/fstab檔案,就是因為tmp目錄下cat這個命令上添加了s許可權位。
12
[taokey@Vmware5 tmp]$ ll
cat
-rwsr-xr-x. 1 root root 45224 Oct 25 00:21
cat
注意:設定suid這個特殊許可權很危險,不到萬不得已,做好還是不要使用。
2.Sgid,Set id,屬組有s許可權,意思就是執行此程式時,此進程的屬組不再是運行者本人所屬的基本組,而是此程式檔案的屬組。
工作中經常會遇到這樣一個問題?
營運和開發同屬於技術部,使用者同屬於一個組,檔案在一個目錄中,營運人員和開發人員可以相互之間訪問自己的檔案,要是一個一個修改屬組就有點麻煩,這時候用sgid就會很方便的解決這個問題。
12345678910111213141516171819202122232425
例子:
[root@Vmware5 tmp]
# usermod -a -G mygrp xen
[root@Vmware5 tmp]
# usermod -a -G mygrp kvm
[root@Vmware5 tmp]
# mkdir /tmp/test
[root@Vmware5 tmp]
# ls -ld /tmp/test/
drwxr-xr-x. 2 root root 4096 Oct 25 00:48
/tmp/test/
[root@Vmware5 tmp]
# chmod g+w /tmp/test
[root@Vmware5 tmp]
# ls -ld /tmp/test/
drwxrwxr-x. 2 root root 4096 Oct 25 00:48
/tmp/test/
[root@Vmware5 tmp]
# chown :mygrp /tmp/test
[root@Vmware5 tmp]
# ls -ld /tmp/test
drwxrwxr-x. 2 root mygrp 4096 Oct 25 00:48
/tmp/test
[root@Vmware5 ~]
# su - xen
[xen@Vmware5 ~]$
cd
/tmp/test
[xen@Vmware5
test
]$
touch
a.xen
[xen@Vmware5
test
]$
ls
-l
total 0
-rw-rw-r--. 1 xen xen 0 Oct 25 00:50 a.xen
[root@Vmware5 ~]
# su - kvm
[kvm@Vmware5 ~]$
cd
/tmp/test
[kvm@Vmware5
test
]$
touch
a.kvm
[kvm@Vmware5
test
]$
ls
-l
total 0
-rw-rw-r--. 1 kvm kvm 0 Oct 25 00:51 a.kvm
-rw-rw-r--. 1 xen xen 0 Oct 25 00:50 a.xen
kvm使用者想往xen建立的檔案a.xen中寫東西,但是被拒絕了。
12
[kvm@Vmware5
test
]$
echo
"hello"
>>a.xen
-
bash
: a.xen: Permission denied
咱們在用root,給/tmp/test檔案添加一個sgid許可權位,然後再測試下。
123
[root@Vmware5 ~]
# chmod g+s /tmp/test
[root@Vmware5 ~]
# ls -ld /tmp/test
drwxrwsr-x. 2 root mygrp 4096 Oct 25 00:51
/tmp/test
切換到xen普通使用者
1234567891011121314
[root@Vmware5 ~]
# su - xen
[xen@Vmware5
test
]$
touch
b.xen
[xen@Vmware5
test
]$ ll b.xen
-rw-rw-r--. 1 xen mygrp 0 Oct 25 01:01 b.xen
[root@Vmware5 ~]
# su - kvm
[kvm@Vmware5 ~]$
echo
"hello"
>>b.xen
[kvm@Vmware5 ~]$
cat
b.xen
hello
[kvm@Vmware5 ~]$
touch
b.kvm
[root@Vmware5 ~]
# su - xen
[xen@Vmware5 ~]$
cd
/tmp/test/
[xen@Vmware5
test
]$
echo
"My name is taoyake."
>>b.kvm
[xen@Vmware5
test
]$
cat
b.kvm
My name is taoyake.
可以成功寫進去,這個就是因為在/tmp/test檔案設定了sgid許可權位
但是這個不但可以能成功寫進去,還可以刪除檔案,我們只能自己刪除自己的檔案,不想讓其他使用者刪除我們的檔案,這時候怎麼辦呢?
1234567
例如:
[xen@Vmware5
test
]$
rm
b.kvm
[xen@Vmware5
test
]$ ll
total 0
-rw-rw-r--. 1 kvm kvm 0 Oct 25 00:51 a.kvm
-rw-rw-r--. 1 xen xen 0 Oct 25 00:50 a.xen
-rw-rw-r--. 1 xen mygrp 0 Oct 25 01:01 b.xen
3.這時候就用到了粘滯位,t,sticky,附加other的許可權上,表現為t。
chmod o+|-t /path/somefile
123456789101112
執行個體操作:
[root@Vmware5 ~]
# ls -ld /tmp/test
drwxrwsr-t. 2 root mygrp 4096 Oct 25 01:10
/tmp/test
[xen@Vmware5
test
]$
ls
a.kvm a.xen b.xen c.kvm
[xen@Vmware5
test
]$
echo
"beyond"
>>c.kvm
[xen@Vmware5
test
]$
cat
c.kvm
beyond
[xen@Vmware5
test
]$
echo
""
>c.kvm
[xen@Vmware5
test
]$
cat
c.kvm
[xen@Vmware5
test
]$
rm
-rf c.kvm
rm
: cannot remove `c.kvm': Operation not permitted
可以添加和任意修改其他使用者的檔案,就是不能刪除其他使用者的檔案,自己可以刪除自己建立的檔案。
1234567891011
[kvm@Vmware5
test
]$
touch
c.kvm
[kvm@Vmware5
test
]$
ls
a.kvm a.xen b.xen c.kvm
[kvm@Vmware5
test
]$
rm
c.kvm
[kvm@Vmware5
test
]$
ls
a.kvm a.xen b.xen
[xen@Vmware5
test
]$ ll
total 0
-rw-rw-r--. 1 kvm kvm 0 Oct 25 00:51 a.kvm
-rw-rw-r--. 1 xen xen 0 Oct 25 00:50 a.xen
-rw-rw-r--. 1 xen mygrp 0 Oct 25 01:01 b.xen
本文出自 “歲月在流逝,光輝依然在” 部落格,請務必保留此出處http://taokey.blog.51cto.com/4633273/1329992