Rumah  >  Artikel  >  Tutorial sistem  >  Apakah mekanisme penghantaran keupayaan dalam Linux

Apakah mekanisme penghantaran keupayaan dalam Linux

王林
王林asal
2024-02-18 15:01:061028semak imbas

Warisan mekanisme keupayaan dalam Linux bermakna apabila proses mencipta proses anak, proses anak boleh mewarisi kebenaran keupayaan proses induk. Dalam sistem Linux, mekanisme keupayaan ialah kaedah kawalan kebenaran yang lebih terperinci yang membenarkan proses hanya mempunyai kebenaran tertentu dan bukannya semua kebenaran. Tujuan asal mekanisme ini adalah untuk meningkatkan keselamatan sistem dan mengurangkan beban pengurusan kebenaran pentadbir.

Dalam model kebenaran Linux tradisional, kebenaran sesuatu proses ditentukan oleh pengguna dan kumpulan pengguna di mana ia berada. Jika proses perlu melaksanakan beberapa operasi yang memerlukan keistimewaan, seperti menukar masa sistem, memuatkan modul kernel, dsb., maka proses itu mesti dijalankan sebagai pengguna root. Masalah dengan pendekatan ini ialah apabila proses berjalan sebagai pengguna akar, ia akan mempunyai hampir semua kebenaran dalam sistem, yang merupakan potensi risiko kepada keselamatan sistem.

Untuk menyelesaikan masalah ini, Linux memperkenalkan mekanisme keupayaan. Secara khusus, setiap proses diberikan set keupayaan, yang mentakrifkan kebenaran yang boleh dilaksanakan oleh proses tersebut. Dengan membahagikan kebenaran kepada keupayaan yang berbeza, proses hanya boleh mempunyai kebenaran minimum yang diperlukan, sekali gus mengurangkan risiko penyalahgunaan sistem.

Di Linux, kebenaran keupayaan dibahagikan kepada tiga kategori: dibenarkan, berkesan dan diwarisi. Antaranya, dibenarkan ialah set kebenaran yang sebenarnya diberikan kepada proses, berkesan ialah set kebenaran yang dimiliki oleh proses itu, dan boleh diwarisi ialah set kebenaran yang boleh diwarisi. Apabila proses mencipta proses anak, proses anak mewarisi kebenaran warisan proses induk. Ini bermakna selagi kebenaran keupayaan berada dalam set kebenaran diwarisi proses induk, ia akan muncul secara automatik dalam set kebenaran diwarisi proses anak.

Berikut ialah contoh kod khusus yang menunjukkan pewarisan kebenaran yang boleh diwarisi apabila proses induk mencipta proses anak:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/capability.h>

int main() {
    pid_t pid;
    cap_t inheritable;
    cap_flag_value_t cap_flag;

    // 创建子进程
    pid = fork();
    
    if (pid == 0) {
        // 子进程
        
        // 获取继承的inheritable权限
        inheritable = cap_get_proc();
        
        // 展示子进程的inheritable权限集合
        printf("Child process inheritable capabilities:
");
        cap_print(inheritable, NULL);

        // 释放capability对象
        cap_free(inheritable);
        
        exit(0);
    } else if (pid > 0) {
        // 父进程
        
        // 设置inheritable权限
        inheritable = cap_get_proc();
        cap_get_flag(inheritable, CAP_CHOWN, CAP_INHERITABLE, &cap_flag);
        
        if (cap_flag == CAP_SET) {
            // 如果CAP_CHOWN权限在inheritable权限集合中被设置,则取消该权限的继承
            cap_clear_flag(inheritable, CAP_CHOWN, CAP_INHERITABLE);
        }
        
        // 创建子进程
        pid = fork();
        
        if (pid == 0) {
            // 新的子进程
        
            // 获取继承的inheritable权限
            inheritable = cap_get_proc();
            
            // 展示子进程的inheritable权限集合
            printf("New child process inheritable capabilities:
");
            cap_print(inheritable, NULL);

            // 释放capability对象
            cap_free(inheritable);
            
            exit(0);
        }
        
        // 释放capability对象
        cap_free(inheritable);
    } else {
        // fork失败
        fprintf(stderr, "Fork error
");
        exit(1);
    }
    
    return 0;
}

Melalui contoh kod di atas, kita dapat melihat bahawa proses anak yang dicipta oleh proses induk mewarisi kebenaran yang boleh diwarisi set proses induk. Sudah tentu, kebenaran boleh ditetapkan dan dikawal secara fleksibel mengikut keperluan khusus. Dengan cara ini, mekanisme keupayaan dalam Linux melaksanakan warisan kebenaran antara proses dan pengurusan kebenaran yang terperinci.

Atas ialah kandungan terperinci Apakah mekanisme penghantaran keupayaan dalam Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn