簡體   English   中英

我們可以將權限從用戶更改為root嗎?

[英]Can we change permissions from user to root?

我有一個C程序,它創建一個文件“abcd.txt”並將一些數據寫入其中。 我通過使用用戶名“bobby”來執行我的代碼,因此創建文件abcd.txt時所有者為bobby。

但我的任務是,即使我用一些用戶名“bobby”執行我的代碼,也應始終以root用戶身份創建該文件。 有人可以幫我說一下這可能嗎?

作為一般原則,當您正在編寫文件或在文件上執行chown(2)時,您需要有效的uid(euid為root)。

如果您在Linux下執行此操作,則可以使用特定於Linux的方法。

通用解決方案

沒有sudo的可用性

這是舊的UNIX DAC方法,它充滿了危險。 它假設您沒有安裝sudo或無法安裝它。

您的可執行文件應由root擁有,並設置可執行文件setuid位。

處理

對於大多數操作,您應該使用seteuid()將權限從root刪除到bobby,包括寫入。 完成后,使用seteuid(0)將權限級別恢復為root權限,並對文件執行chown()(或fd上的fch)以將其所有權更改為root。

一些基本的安全

為了安全起見,設置你的可執行文件由root擁有:safegrp其中'safegrp'是允許執行此文件的用戶所特有的組的名稱(將bobby添加到safegrp); 並確保setuid可執行文件的模式為4510;

隨着sudo的可用性

如果你的系統上有sudo,那么按照上面相同的流程處理可執行文件中的權限,但是不要將文件模式設置為setuid,將safegrp添加到sudoers這個可執行文件中,現在bobby可以用sudo /你的/運行它斌/ PROG

Linux特定解決方案

POSIX.1e

可以更嚴格地控​​制文件使用POSIX.1e功能支持。 在您的情況下,您希望將SYS_CHOWN授予您的程序;

出於安全原因,我可能會將其設置為完全獨立的二進制文件或子進程,並仍然使用sudo並執行適當的權限刪除。

linuxacl [在Linux上使用訪問控制列表的ACL]有關於此主題的優秀教程

SE-Linux的

您可以使用強制訪問控制來限制對這種危險二進制文件的訪問,但SE Linux很難配置:^)雖然可能是一個很好的方法

您可能不希望以root身份運行程序,除非您真的必須這樣做。 也許在運行程序后從shell腳本運行“chown”? 或者,您可以使用以root身份運行的程序中的chown(2) (或在Linux上使用等效功能)。

使用chown()方法。 可能有更權威的鏈接,但這個很好,因為它包含對getpwnam()的調用。 我過去已經完成了所有這些工作,但不幸的是我還沒有代碼(它由IBM擁有)。

http://manpages.courier-mta.org/htmlman2/chown.2.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM