setuid的作用 Linux下Setuid命令

2021-10-13 01:35:55 字數 1723 閱讀 2827

[置頂] linux下setuid命令!

linuxauthenticationkillfile加密list

在linux系統中每個普通使用者都可以更改自己的密碼,這是合理的設定。

問題是:使用者的資訊儲存在檔案/etc/passwd中,使用者的密碼儲存在檔案/etc/shadow中,也就是說使用者更改自己密碼時是修改了/etc/shadow檔案中的加密密碼,但是,

-rw-r--r-- 1 root root 1787 oct 27 2009 /etc/passwd

-r-------- 1 root root 1187 oct 27 2009 /etc/shadow

/etc/passwd檔案每個使用者都有讀許可權但是只有root有寫許可權,/etc/shadow檔案只有超級使用者root有讀寫許可權,也就是說普通使用者對這兩個檔案都沒有寫許可權無法寫入新密碼,為什麼普通使用者可以更改密碼呢?

ps:在linux中設定或更改使用者密碼,是先寫入到/etc/passwd檔案然後通過pwconv命令轉換到/etc/shadow檔案,執行pwunconv命令可觀察到轉換前效果,會觀察到/etc/shadow檔案神奇的消失掉了,而/etc/passwd檔案中原來打x的地方變成了真正的加密密碼。

其實,使用者能更改密碼真正的秘密不在於檔案的許可權,而在於更改密碼的命令passwd 。

-rwsr-xr-x 1 root root 22960 jul 17 2006 /usr/bin/passwd

passwd命令有乙個特殊的許可權標記s ,存在於檔案所有者的許可權位上。這是一類特殊的許可權setuid ,可以這樣來理解它:當乙個具有執行許可權的檔案設定setuid許可權後,使用者執行這個檔案時將以檔案所有者的身份執行。passwd命令具有setuid許可權,所有者為root(linux中的命令預設所有者都是root),也就是說當普通使用者使用passwd更改自己密碼的時候,那一瞬間突然靈魂附體了,實際在以passwd命令所有者root的身份在執行,root當然可以將密碼寫入/etc/shadow檔案(不要忘記root這個傢伙是superuser什麼事都可以幹),命令執行完成後該身份也隨之消失。

可以試驗用root身份修改passwd命令許可權去掉setuid :

chmod u-s /usr/bin/passwd

passwd

changing password for user samlee.

changing password for samlee

(current) unix password:

passwd: authentication token manipulation error

普通使用者無法修改密碼,所以只要能夠想明白為什麼普通使用者可以更改密碼就可以大概了解setuid許可權的作用。

接下來我們用兩個setuid的按理來進一步詮釋下它的概念——

案例一:setuid授權示例

為便於深入理解setuid ,筆者以touch命令為例做一演示。

普通使用者samlee用touch建立檔案newfile01 :

touch newfile01

ls -l newfile01

-rw-rw-r-- 1 samlee samlee 0 05-21 01:20 newfile01

檔案的建立者預設就是所有者,所以檔案newfile01的所有者為samlee 。

管理員root給touch命令新增setuid許可權:

chmod u+s /bin/touch # 或 chmod 4755 /bin/touch

ls -l /bi

setuid的作用 深入理解SetUID

在linux系統中每個普通使用者都可以更改自己的密碼,這是合理的設定。問題是 使用者的資訊儲存在檔案 etc passwd中,使用者的密碼儲存在檔案 etc shadow中,也就是說使用者更改自己密碼時是修改了 etc shadow檔案中的加密密碼,但是,look rw r r 1 root roo...

SetUid的許可權問題

1什麼是setuid 我們知道,在linux的命令列下執行 ps aux 命令時,就會列出當前系統中的所有程序,在其中可以看到每個程序都和使用者的真實id關聯,實際上,linux中的每個程序還跟乙個稱為有效使用者id set user id 緊密關聯。前者用於表示該程序由那個使用者控制,後者用於為新...

linux下xhost的作用

xhost 是用來控制x server訪問許可權的。通常當你從hosta登陸到hostb上執行hostb上的應用程式時,做為應用程式來說,hosta是client,但是作為圖形來說,是在hosta上顯示的,需要使用hosta的xserver,所以hosta是 server.因此在登陸到hostb前,...