![](/img/trans.png)
[英]can't generate core file after change user from root to nobody in c language
[英]Can we change permissions from user to root?
我有一個C程序,它創建一個文件“abcd.txt”並將一些數據寫入其中。 我通過使用用戶名“bobby”來執行我的代碼,因此創建文件abcd.txt時所有者為bobby。
但我的任務是,即使我用一些用戶名“bobby”執行我的代碼,也應始終以root用戶身份創建該文件。 有人可以幫我說一下這可能嗎?
作為一般原則,當您正在編寫文件或在文件上執行chown(2)時,您需要有效的uid(euid為root)。
如果您在Linux下執行此操作,則可以使用特定於Linux的方法。
這是舊的UNIX DAC方法,它充滿了危險。 它假設您沒有安裝sudo
或無法安裝它。
您的可執行文件應由root擁有,並設置可執行文件setuid位。
對於大多數操作,您應該使用seteuid()將權限從root刪除到bobby,包括寫入。 完成后,使用seteuid(0)將權限級別恢復為root權限,並對文件執行chown()(或fd上的fch)以將其所有權更改為root。
為了安全起見,設置你的可執行文件由root擁有:safegrp其中'safegrp'是允許執行此文件的用戶所特有的組的名稱(將bobby添加到safegrp); 並確保setuid可執行文件的模式為4510;
如果你的系統上有sudo,那么按照上面相同的流程處理可執行文件中的權限,但是不要將文件模式設置為setuid,將safegrp
添加到sudoers這個可執行文件中,現在bobby可以用sudo /你的/運行它斌/ PROG
可以更嚴格地控制文件使用POSIX.1e功能支持。 在您的情況下,您希望將SYS_CHOWN授予您的程序;
出於安全原因,我可能會將其設置為完全獨立的二進制文件或子進程,並仍然使用sudo並執行適當的權限刪除。
linuxacl [在Linux上使用訪問控制列表的ACL]有關於此主題的優秀教程
您可以使用強制訪問控制來限制對這種危險二進制文件的訪問,但SE Linux很難配置:^)雖然可能是一個很好的方法
您可能不希望以root身份運行程序,除非您真的必須這樣做。 也許在運行程序后從shell腳本運行“chown”? 或者,您可以使用以root身份運行的程序中的chown(2)
(或在Linux上使用等效功能)。
使用chown()方法。 可能有更權威的鏈接,但這個很好,因為它包含對getpwnam()的調用。 我過去已經完成了所有這些工作,但不幸的是我還沒有代碼(它由IBM擁有)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.