1. 程式人生 > >linux下利用C或C++ 語言呼叫需要root許可權

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