linux 进程 setuid,linux特殊权限位之setuid、setgid和sticky
我們登陸到系統之后,創建一個普通文件或者目錄的時候,會有一個默認的權限。普通文件是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)chmod u(+|-)s /path/somefile
chmod 4664 /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/fstab
cat: /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]$ ./cat fstab
./cat: fstab: Permission denied
[taokey@Vmware5 tmp]$ exit
logout
特換到root用戶,添加setuid權限[root@Vmware5 tmp]# chmod u+s cat添加完s權限位之后,再切換到普通用戶taokey,測試是否可以成功執行cat命令[root@Vmware5 tmp]# su - taokey
[taokey@Vmware5 ~]$ cd /tmp/
[taokey@Vmware5 tmp]$ ./cat fstab
#
# /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 1
UUID=3a69daa4-b393-4694-abbb-b856345b376d /boot ext4 defaults 1 2
UUID=34f85ed8-5f68-4fdc-8aa0-e50d2f9f012e /home ext4 defaults 1 2
UUID=95d97c70-9291-499b-ac16-a38508a85e4d swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
切換到普通用戶之后,可以成功執行cat命令,查看/tmp/fstab文件,就是因為tmp目錄下cat這個命令上添加了s權限位。[taokey@Vmware5 tmp]$ ll cat
-rwsr-xr-x. 1 root root 45224 Oct 25 00:21 cat
注意:設置suid這個特殊權限很危險,不到萬不得已,做好還是不要使用。
2.Sgid,Set id,屬組有s權限,意思就是執行此程序時,此進程的屬組不再是運行者本人所屬的基本組,而是此程序文件的屬組。Set gid權限如果給文件設置,是讓運行此文件的其它用戶具有這個文件的屬組特性;給目錄設置Set gid權限,任何用戶在該目錄下創建的文件,則該文件屬組都和目錄的屬組一致。
工作中經常會遇到這樣一個問題?
運維和開發同屬于技術部,用戶同屬于一個組,文件在一個目錄中,運維人員和開發人員可以相互之間訪問自己的文件,要是一個一個修改屬組就有點麻煩,這時候用sgid就會很方便的解決這個問題。例子:
[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中寫東西,但是被拒絕了。[kvm@Vmware5 test]$ echo "hello" >>a.xen
-bash: a.xen: Permission denied
咱們在用root,給/tmp/test文件添加一個sgid權限位,然后再測試下。[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普通用戶
[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權限位
但是這個不但可以能成功寫進去,還可以刪除文件,我們只能自己刪除自己的文件,不想讓其他用戶刪除我們的文件,這時候怎么辦呢?例如:
[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
實例操作:
[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
可以添加和任意修改其他用戶的文件,就是不能刪除其他用戶的文件,自己可以刪除自己創建的文件。
[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
表示方法:
將三個特殊位的用八進制數值表示,放于 u/g/o 位之前。其中 suid :4 sgid:2 sticky:1.
總結
以上是生活随笔為你收集整理的linux 进程 setuid,linux特殊权限位之setuid、setgid和sticky的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像处理方面的sci期刊_【IEEE A
- 下一篇: 最美的Linux中文版的吗,号称最美的L