Files
在控制台列印 /etc/shadow 文件
如何更改執行檔的權限以訪問 /etc/shadow 文件?
到目前為止,我有以下 bash 腳本:
#!/bin/bash gcc print.c -o print chmod +s print ./print exit 0
和以下c程式碼:
#include <stdio.h> #include <stdlib.h> int main() { FILE *open = fopen("/etc/shadow", "r"); int tmp; do { tmp = fgetc (open); printf("%c", tmp); } while (tmp != EOF); fclose(open); return 0; }
我可以輕鬆地列印該
/etc/passwd
文件,但是一旦我嘗試訪問該文件,我就會得到一個轉儲的核心/etc/shadow
。
要授予二進制權限以 root 身份執行,您需要在二進製文件上設置“粘性位”。
通常編譯後,您可能會看到:
# ls -l print -rwxr-xr-x 1 mark mark 111 24 Oct 17:32 print
設置 set-uid (sticky) 位可以使用和八進制模式完成,或者象徵性地完成(請注意,您需要“root”權限才能更改文件的所有權):
# chown root print # chmod o-x print # chmod u+s print # ls -l print -rwsr-xr-- 1 root mark 111 24 Oct 17:32 print
在第一個版本
s
中,正如您已經發現的那樣,權限中的 表示這既是執行檔又是“set-uid”。但是您還必須更改文件的所有權,以便“set-uid”設置root的 uid而不是您自己的使用者。在這一點上,“組”沒有改變它的價值,但這在這種特殊情況下並不重要。(雖然它可能是安全的一個因素。)上面的最後一行顯示了也可以表示為八進制數的權限,因此如果這是您想要的結果,那麼您可以將
chmod
上面的兩行替換為一行:# chmod 4754 print
有關更多詳細資訊,請查看手冊頁
chmod
。如果這不是您想要的,請在您的問題中說明您的要求。
重要提示:該
/etc/shadow
文件出於某種原因而保密。如果您使用其他使用者可以執行的東西公開它,您可能會危及系統的安全性。刪除世界可執行權限是對安全性的“點頭”,但是如果您覺得需要以/etc/shadow
這種方式公開,則可能是在解決錯誤的問題。