5 Eylül 2017 Salı

Kimlik ve Gruplar

Giriş
Programlama dillerinde kullanıcının kim olduğunu, hangi gruplara dahil olduğunu kontrol etmek gerekir. Aşağıda notlarım var.

Posix

getuid
Bu sistem çağrısı kullanıcının ID'sini döndürür.  Admin için bu değer 0'dır.
Şöyle yaparız
if (getuid() == 0)
 isAdmin = TRUE;
Şöyle yaparız.
#include <stdio.h> 
#include <unistd.h>
#include <sys/types.h>

void main() {
  printf("real uid: %d\n", (int) getuid());
  printf("effective uid: %d\n", (int) geteuid());
}
Diğer kullanıcılar için sayı değeri 500 veya 1000'den başlar. Açıklaması şöyle
The system User IDs from 0 to 99 should be statically allocated by the system, and shall not be created by applications.
The system User IDs from 100 to 499 should be reserved for dynamic allocation by system administrators and post install scripts using useradd.
Başlangıç değeri Linux türevine göre değişir.

getgrgid
Komut satırından şöyle bakarız.
getent group GID | cut -d: -f1
getpwnam metodu
İsimden uid'ye erişmemizi sağlar. Şu satırı dahil ederiz.
#include <pwd.h>
Şöyle yaparız.
const char *name = "root";
struct passwd *p;
if ((p = getpwnam(name)) == NULL) {
  perror(name);
  return EXIT_FAILURE;
}
printf("%d\n", (int) p->pw_uid);

Linux
setuid
setuıid metodu yazısına taşıdım.

setresuid ve setresgid
Şöyle yaparız.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char *argv[]){
    setresuid(999, 999, 999);
    setresgid(999, 999, 999);
    ...
    return 0;
}
Bash
id komutu
Şöyle yaparız.
#!/bin/sh

if [ "$(id -u)" -ne 0 ]; then
  echo 'This script must be run by root' >&2
  exit 1
fi
$USER değişkeni
Şöyle yaparız.
if [[ "$USER" != "root" ]]; then
  echo "Error: script not running as root or with sudo! Exiting..."
  exit 1
fi

if [[ $(whoami) != "root" ]]; then
  echo "Warning: script must be run as root or with elevated privileges!"
  exit 1
fi

if [[ $(id -u) != "0" ]]; then
  echo "Error: script not running as root or with sudo! Exiting..."
  exit 1
fi
C#
Kimlik ve Gruplar yazısına taşıdım.

Hiç yorum yok:

Yorum Gönder