linux下利用C或C++ 語言呼叫需要root許可權
一、簡介
linux對檔案的許可權控制比較嚴格,這樣避免了有特殊意圖的程式獲取root許可權,但在c++程式中希望獲取root的執行許可權去操作一些只有root可讀寫的檔案。
二、詳解
1、setuid法
(1)登入root使用者,將程式設定成root:root所有者(等價於:登入root使用者編譯程式)。也可直接將普通使用者加入root組中,那麼編譯程式不用來回切換使用者。
(2)登入root使用者設定程式的UID,#chmod u+s App。
(3)程式中使用:
uid_t uid = getuid(); if (setuid(0)) { return -1; } //... if (setuid(uid)) { //恢復uid }
通過上面步驟則該使用者不管在普通使用者還是在root使用者下都能獲取root許可權。
注意:
(1)複製時要想連同其UID位一同複製,cp加引數-a,scp加引數-p。
(2)若複製到其他Linux主機上要保證程式屬於root:root所有者。
2、sudo法
在呼叫系統命令時,使用sudo+管道的方式解決,但必須修改sudo列表。
(1)sudo的配置檔案是/etc/sudoers
增加一條配置:
username ALL=(ALL) ALL
這樣,普通使用者username就能夠執行root許可權的所有命令
以username使用者登入之後,執行: #sudo su -
然後輸入username使用者自己的密碼,就可以切換成root使用者了。
(2)程式在呼叫需要root許可權的程式碼中使用system,echo "userpassword" | sudo -S sh -c "CMD1; CMD2;..."。
注意:可以通過sudo列表控制使用者username的操作許可權,比如不能修改root密碼等。
三、總結
(1)本文僅總結了兩種方法,可能還有很多獲取root許可權方法。
(2)在ArchLinux中加上sudo就等於獲取了root許可權,這種不在討論中。
(3)本人思路有限,若有更好的設計建議,也可發郵件溝通,在此先感謝!郵箱地址[email protected]。
本文來自 烏托邦2號 的CSDN 部落格 ,
全文地址請點選:https://blog.csdn.net/taiyang1987912/article/details/41113503?utm_source=copy