Root
如何在不切換到 root 的情況下以 root 身份執行 smartctl?
我有這個執行
smartctl
命令並獲取其輸出的 C 程式碼:#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int main() { cout << "Hello ! " << endl; FILE *fp; char path[1035]; /* Open the command for reading. */ fp = popen("smartctl -A /dev/sda", "r"); if (fp == NULL) { printf("Failed to run command\n" ); exit(1); } /* Read the output a line at a time - output it. */ while (fgets(path, sizeof(path), fp) != NULL) { printf("%s", path); } /* close */ pclose(fp); return 0; }
機器是openSUSE 13.2。我的問題是它需要root權限,但我不想切換到root。
我嘗試過但沒有奏效的方法:
CAP_SYS_ADMIN
向程序執行檔添加了功能。- 添加
CAP_DAC_OVERRIDE
到smartctl
執行檔中(如此處建議),我還將其添加到程序執行檔中。- 我曾經
setcap 'cap_dac_override=+ep' cpptest
添加過該功能(也用於CAP_SYS_Admin
),但是當我使用時,getcap
我只得到其中一個,而不是兩者。(你能幫我嗎?)- 我將權限更改
/dev/sda
為 755、777、766,並將設備的所有權更改為使用chown root:users /dev/sda
.我編寫了一個使用套接字執行一些網路操作的程序,它需要 root 權限,但我添加了
CAP_NET_ADMIN
它並且它工作。我只是不知道為什麼功能不起作用。這是一個非常重要的問題。非常感謝任何幫助。
請注意:我提供了 C 程式碼,但這是 Linux 的問題,而不是程式問題。
根據這個討論
CAP_SYS_RAWIO
,需要將能力應用於smartctl
執行檔。