GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana aplikasi C/C++ saya menentukan apakah pengguna root menjalankan perintah?

getuid atau geteuid akan menjadi pilihan yang jelas.

getuid memeriksa kredensial pengguna sebenarnya.

e yang ditambahkan di geteuid singkatan dari effective . Ini memeriksa kredensial yang efektif.

Sebagai contoh saja, jika Anda menggunakan sudo untuk menjalankan program sebagai root (pengguna super), kredensial Anda yang sebenarnya masih merupakan akun Anda sendiri, tetapi kredensial efektif Anda adalah akun root (atau anggota grup wheel, dll.)

Misalnya, pertimbangkan kode seperti ini:

#include <unistd.h>
#include <iostream>

int main() { 
    auto me = getuid();
    auto myprivs = geteuid();


    if (me == myprivs)
        std::cout << "Running as self\n";
    else
        std::cout << "Running as somebody else\n";
}

Jika Anda menjalankan ini secara normal, getuid() dan geteuid() akan mengembalikan nilai yang sama, jadi akan tertulis "running as self". Jika Anda melakukan sudo ./a.out sebagai gantinya, getuid() masih akan mengembalikan ID pengguna Anda, tetapi geteuid() akan mengembalikan kredensial untuk root atau wheel, sehingga akan tertulis "Berjalan sebagai orang lain".


Saya akan merekomendasikan BUKAN membuat perubahan ini, tetapi malah meningkatkan pesan kesalahan Anda. Diragukan bahwa aplikasi Anda benar-benar perlu "di-root"; alih-alih itu membutuhkan hak istimewa tertentu yang dimiliki root, tetapi sistem operasi mana dengan kontrol keamanan berbutir halus mungkin dapat memberikan ke aplikasi tanpa memberikannya akses root penuh. Bahkan jika itu tidak mungkin sekarang, itu mungkin 6 bulan atau 2 tahun dari sekarang, dan pengguna akan kesal jika program Anda menolak untuk berjalan berdasarkan asumsi mundur tentang model izin daripada hanya memeriksa apakah itu berhasil dalam kinerja. operasi istimewa yang diperlukan.


#include <unistd.h> // getuid
#include <stdio.h> // printf

int main()
{
    if (getuid()) printf("%s", "You are not root!\n");
    else printf("%s", "OK, you are root.\n");
    return 0;
}

Linux
  1. Bagaimana Anda bisa menentukan versi terinstal dari pustaka glibc?

  2. Bagaimana saya bisa mengingat argumen dari perintah bash sebelumnya?

  3. Bagaimana cara mendapatkan nama pengguna di C/C++ di Linux?

  1. Cara Menghapus Pengguna di Linux Menggunakan Command Line

  2. Bagaimana saya bisa menampilkan gambar di luar direktori root web di aplikasi php saya?

  3. Bagaimana saya bisa menyembunyikan output dari aplikasi shell di Linux?

  1. Bagaimana Menjalankan Perintah Sebagai Administrator Sistem (root)?

  2. Bagaimana Cara Menentukan Pengkodean Karakter yang Digunakan Terminal Dalam Program C/c++?

  3. Bagaimana saya bisa mengeksekusi kode PHP dari baris perintah?