1. 程式人生 > >linux set uid set gid stick bit   軟硬連接

linux set uid set gid stick bit   軟硬連接

linux setgid setuid

1. 首先來看一個,特殊的權限 set uid

root@nfyx:/home/nfyx/test/umask# which passwd
/usr/bin/passwd
root@nfyx:/home/nfyx/test/umask# ll /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 5月 17 07:37 /usr/bin/passwd*
root@nfyx:/home/nfyx/test/umask#

這裏的s權限, 是什麽情況?

那麽,這裏要學習的就是set_uid

產生原因,普通用戶對一些特殊可執行文件的執行。

比如: 自己可以修改自己的密碼,而不能修改其它用戶的密碼,但root用戶又可以修改任何用戶的密碼。

這就可以理解為權限的特殊性。

前提一般都是加在二進制文件上的(理解為可執行文件),加在其它的文件或目錄,是沒什麽意義的!

案例:

平時ls命令,只能看自己所創的文件或目錄,而無法查看root目錄下的文件:

nfyx@nfyx:~/test/umask$ ls /root/
ls: 無法打開目錄‘/root/‘: 權限不夠
nfyx@nfyx:~/test/umask$

明顯權限不夠:

nfyx@nfyx:~/test/umask$ su
密碼:
root@nfyx:/home/nfyx/test/umask# chmod u+s /bin/ls
root@nfyx:/home/nfyx/test/umask# ll /bin/ls
-rwsr-xr-x 1 root root 126584 3月 3 2017 /bin/ls*

root@nfyx:/home/nfyx/test/umask# su nfyx
nfyx@nfyx:~/test/umask$ ls /root/
Desktop
nfyx@nfyx:~/test/umask$
這裏很明顯可以,看到root 目錄下的文件了。

這裏的chmod u+s /bin/ls

是把/bin/lis 的user加一個supper 權限,即加一個超級用戶的權限。

要取消,就用

chmod u-s /bin/ls

root@nfyx:/home/nfyx/test/umask# chmod u-s /bin/ls
root@nfyx:/home/nfyx/test/umask# ll /bin/ls
-rwxr-xr-x 1 root root 126584 3月 3 2017 /bin/ls*

root@nfyx:/home/nfyx/test/umask#
這裏,就把 /bin/ls 裏面的s權限給取消了!

(還可以用 chmod u=rws /bin/ls 命令)

2 . set gid 權限。

chmod g+s /bin/ls

chmod g-s /bin/ls

默認情況下,和set uid 所起的作用是一樣的。

特殊用法,就是在目錄改變用戶組之後,下面再新建的,文件或目錄都會和改變的用戶組一樣。

案例:

root@nfyx:/home/nfyx/test/setuid# chmod g+s setgid/
root@nfyx:/home/nfyx/test/setuid# ls -ld setgid/
drwxr-sr-x 2 root root 4096 10月 31 14:24 setgid/
root@nfyx:/home/nfyx/test/setuid# chown :nfyx setgid/
root@nfyx:/home/nfyx/test/setuid# ls -ld setgid/
drwxr-sr-x 2 root nfyx 4096 10月 31 14:24 setgid/
root@nfyx:/home/nfyx/test/setuid# mkdir setgid/aa
root@nfyx:/home/nfyx/test/setuid# ls -ld setgid/aa/
drwxr-sr-x 2 root nfyx 4096 10月 31 14:26 setgid/aa/
root@nfyx:/home/nfyx/test/setuid# touch setgid/aa.txt
root@nfyx:/home/nfyx/test/setuid# ls -l setgid/aa.txt
-rw-r--r-- 1 root nfyx 0 10月 31 14:26 aa.txt
root@nfyx:/home/nfyx/test/setuid#

也是就說,一旦group設置了gid 那麽,在改變目錄用戶組之後,在目錄下,所創建的所有新文件和目錄

都和已經改變的用戶組一樣!

若把gid 去掉,那麽,所建的目錄或文件,就屬於,創建者所在的組!

如:

root@nfyx:/home/nfyx/test/setuid# chmod g-s setgid/
root@nfyx:/home/nfyx/test/setuid# ll -d setgid/
drwxr-xr-x 3 root nfyx 4096 10月 31 14:26 setgid//
root@nfyx:/home/nfyx/test/setuid# mkdir setgid/bb
root@nfyx:/home/nfyx/test/setuid# touch setgid/bb.txt
root@nfyx:/home/nfyx/test/setuid# ll setgid/
總用量 16
drwxr-xr-x 4 root nfyx 4096 10月 31 14:36 ./
drwxr-xr-x 3 root root 4096 10月 31 14:24 ../
drwxr-sr-x 2 root nfyx 4096 10月 31 14:26 aa/
-rw-r--r-- 1 root nfyx 0 10月 31 14:26 aa.txt
drwxr-xr-x 2 root root 4096 10月 31 14:36 bb/
-rw-r--r-- 1 root root 0 10月 31 14:36 bb.txt
root@nfyx:/home/nfyx/test/setuid#


3.stick bit

先看一個 文件權限,如:

root@nfyx:/home/nfyx/test/setuid# ll -d /tmp/
drwxrwxrwt 14 root root 16384 10月 31 14:17 /tmp//

這裏的權限有些不太一樣,

這裏的t 就是附加的防刪除權限

因為,在/tmp目錄下,有很多臨時文件,大多權限都是777,為了防止其它用戶,對其進行刪除,

就多了一個粘貼位,即防刪除權限,

一旦,文件或目錄的權限是rwxrwxrwt,那麽其它的用戶,可讀可寫修改,但是,就是不能將其進行刪除。

案例:

nfyx@nfyx:/$ ll -d /tmp/
drwxrwxrwt 14 root root 16384 10月 31 16:45 /tmp//
nfyx@nfyx:/$ rm -dR /tmp/
rm: 無法刪除‘/tmp/.Test-unix‘: 不允許的操作
rm: 無法刪除‘/tmp/.ICE-unix‘: 不允許的操作
rm: 無法刪除‘/tmp/.font-unix‘: 不允許的操作

按理說他有rwx權限,每一個用戶都要以刪的, 但是由於有一個粘貼位t,所以就無法刪除它裏面的文件.

3 軟連接 硬連接

a 軟連接

命令:ln -s souce destians (即 ln -s 源文件 目錄文件)

nfyx@nfyx:~/test/link$ ls
nfyx@nfyx:~/test/link$ mkdir link
nfyx@nfyx:~/test/link$ ls
link
nfyx@nfyx:~/test/link$ ln -s link/ softlink
nfyx@nfyx:~/test/link$ ll
drwxrwxr-x 2 nfyx nfyx 4096 10月 31 17:04 link/
lrwxrwxrwx 1 nfyx nfyx 5 10月 31 17:04 softlink -> link/
nfyx@nfyx:~/test/link$
這樣子,就做好了一個軟連接(這相當於windows 的快捷方式 )

提示:盡量使用絕對路徑做軟連接。

b 硬連接

命令: ln soure destians (與軟連接不同的是,他們同用一個INODE號)

如:

nfyx@nfyx:~/test/link$ touch aa.txt
nfyx@nfyx:~/test/link$ ln aa.txt bb.txt
nfyx@nfyx:~/test/link$ ll -i
總用量 12
1839330 drwxrwxr-x 3 nfyx nfyx 4096 10月 31 17:23 ./
1838567 drwxrwxr-x 11 nfyx nfyx 4096 10月 31 17:03 ../
1849098 -rw-rw-r-- 2 nfyx nfyx 0 10月 31 17:22 aa.txt
1849098 -rw-rw-r-- 2 nfyx nfyx 0 10月 31 17:22 bb.txt
1845100 drwxrwxr-x 2 nfyx nfyx 4096 10月 31 17:04 link/
1839835 lrwxrwxrwx 1 nfyx nfyx 5 10月 31 17:04 softlink -> link//
nfyx@nfyx:~/test/link$ ln -s aa.txt cc.txt
nfyx@nfyx:~/test/link$ ll -i
總用量 12
1839330 drwxrwxr-x 3 nfyx nfyx 4096 10月 31 17:23 ./
1838567 drwxrwxr-x 11 nfyx nfyx 4096 10月 31 17:03 ../
1849098 -rw-rw-r-- 2 nfyx nfyx 0 10月 31 17:22 aa.txt
1849098 -rw-rw-r-- 2 nfyx nfyx 0 10月 31 17:22 bb.txt
1849788 lrwxrwxrwx 1 nfyx nfyx 6 10月 31 17:23 cc.txt -> aa.txt
1845100 drwxrwxr-x 2 nfyx nfyx 4096 10月 31 17:04 link/
1839835 lrwxrwxrwx 1 nfyx nfyx 5 10月 31 17:04 softlink -> link/

也就是這兩個文件用了同一個Inode號。

但是:(目錄不允許做硬連接)

nfyx@nfyx:~/test/link$ ln link/ linkdir
ln: link/: 不允許將硬鏈接指向目錄
nfyx@nfyx:~/test/link$

再次就是,硬連接,不能跨分區!因為,每個分區都有自己獨立的Inode號(這樣子,就會沖突了)

硬連接裏面的,文件內容是相同的,

改一個文件的內容,其它硬連接文件的內容也會跟著改變。

硬連可以有很多個連接指向同一個文件,但是只要,還有一個連接指向,那麽他的內容都仍然還在。

除非所有的文件都刪除,那麽,那個Inode號,才會被刪除,這時,文件數據內容才會被刪除。



附加:(find 命令)

find -name 、-type 、-ctime 、 -mtime.

find /etc/ -name "*.conf" (通過名字,模糊查找)

find -type d "111" (d找目錄)

find -type f "cc.txt" (f找文件)

find -type f -mtime -1 -name "*.conf" (小於1天的 +1 表示大於一天的)


find /etc/ -type f -mmin -60 -exec ls -lh {} \; (找etc 下 的 文件 小於60分鐘的,並 挨個顯示出來)

find -inum ### (通過inode 號來查找相關的文件)

希望,大家能夠理解!

2017.10.31

本文出自 “牛糞也香” 博客,請務必保留此出處http://ainfyx.blog.51cto.com/724466/1977854

linux set uid set gid stick bit   軟硬連接