Root

如何在不切換到 root 的情況下以 root 身份執行 smartctl?

  • March 4, 2015

我有這個執行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。

我嘗試過但沒有奏效的方法:

  1. CAP_SYS_ADMIN向程序執行檔添加了功能。
  2. 添加CAP_DAC_OVERRIDEsmartctl執行檔中(如此建議),我還將其添加到程序執行檔中。
  3. 我曾經setcap 'cap_dac_override=+ep' cpptest添加過該功能(也用於CAP_SYS_Admin),但是當我使用時,getcap我只得到其中一個,而不是兩者。(你能幫我嗎?)
  4. 我將權限更改/dev/sda為 755、777、766,並將設備的所有權更改為使用chown root:users /dev/sda.

我編寫了一個使用套接字執行一些網路操作的程序,它需要 root 權限,但我添加了CAP_NET_ADMIN它並且它工作。我只是不知道為什麼功能不起作用。

這是一個非常重要的問題。非常感謝任何幫助。

請注意:我提供了 C 程式碼,但這是 Linux 的問題,而不是程式問題。

根據這個討論CAP_SYS_RAWIO,需要將能力應用於smartctl執行檔。

引用自:https://unix.stackexchange.com/questions/188075