Nowe posty

Autor Wątek: Konto użytkownika  (Przeczytany 445 razy)

Offline TheBartekPL

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 1
    • Zobacz profil
Konto użytkownika
« dnia: 2018-06-26, 14:47:12 »
Cześć,

Przychodzę z tematem, który jest dość skomplikowany (w mojej opinii), aczkolwiek dla was nie powinien być problemem. Chodzi mi o utworzenie konta dla nowego użytkownika, zrobienie mu folderu w którym będzie mógł wrzucać pliki do folderu etc. Logowanie wyłączyłem i do SSH dostępu bez klucza nikt nie będzie mieć (W mojej opinii powinno działać). No okej, ale problem w tym, że w folderze użytkownika uruchamia się aplikacja, która ładuje wtyczki z folderu. Potrzebuję użytkownikowi dołączyć moją ,,wtyczkę", ale muszę zabezpieczyć to tak, by nie mógł w żaden sposób jej pozyskać (Poprzez dostawienie swojej wtyczki, pobranie jakiekolwiek etc..). Wtyczka może znajdować się poza folderem usera, a ja drugą wtyczką ją mogę ,,ładować". No i tutaj dla mnie zaczyna się problem, nie wiem jak zabezpieczyć to w 100%, by główna wtyczka była na pewno bezpieczna.. Jeśli ktoś byłby miły może podlinkować źródło wiedzy, z które mógłbym pozyskać wiedzę :D

Dzięki!

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2508
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • Linuxpedia.PL
Odp: Konto użytkownika
« Odpowiedź #1 dnia: 2018-06-26, 15:55:17 »
1. "tajna wtyczka" jest dostępna tylko dla użytkownika TAJNIAK
2. Program korzystający z wtyczek jest atrybutem SUID i UID TAJNIAK. Przez co po uruchomieniu ma dostęp do tajnej wtyczki.
3. Jak się załadują wszystkie tajności to redukujesz uprawnienia do zwykłego użytkownika i dopiero wtedy ładujesz wtyczki użytkownika. Wtedy nawet złośliwa wtyczka nie otworzy pliku tajnej wtyczki, bo proces nie ma już uprawnień.
4. Nie zabezpieczy to przed złośliwą wtyczką mogącą zrzucić całą pamięć procesu do pliku (a będzie wtedy w nim też tajna wtyczka)

Jeżeli zabezpieczenie jest za słabe, to musisz zrobić tajną wtyczkę jako osobny proces dostępny np. przez gniazdo UNIX, pamięć współdzieloną czy potoki, na zasadzie klient-serwer. Tajna wtyczka chodzi sobie jako serwer na bezpiecznym użytkowniku, z kontem niedostępnym ze zwykłego konta i świadczy usługi na rzecz programu głównego.
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2181
  • 1709
    • Zobacz profil
Odp: Konto użytkownika
« Odpowiedź #2 dnia: 2018-06-26, 16:09:17 »
Nawet sama aplikacja nie może pozwalać na odczytanie lub edycje wtyczki.
Ponieważ nowy użytkownik np. Janek
będzie uruchamiał aplikacje z atrybutem  SUID,
czyli będzie uruchamiał aplikacje z uprawnieniami użytkownika TAJNIAK
i jesli Janek z aplikacji będzie miał dostęp do wtyczki,
 to wtyczka nie będzie już tajna.

- poradnik SUID
http://www.szkolenia-linux.pl/doku.php?id=materialy:podstawy-administracji:uprawnienia#suid_guid



Inaczej chyba się nie da.
Myślałem jeszcze o rozszerzonych uprawnieniach ale dla programów,
ale takich nie znam.
« Ostatnia zmiana: 2018-06-26, 16:53:19 wysłana przez 1709 »
Pochwal się swoją kartą graficzną w tym wątku-->
http://forum.linux.pl/index.php/topic,19841.msg121122.html#msg121122

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2508
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • Linuxpedia.PL
Odp: Konto użytkownika
« Odpowiedź #3 dnia: 2018-06-26, 18:24:51 »
Jeżeli po załadowaniu bezpiecznych wtyczek aplikacja pozbędzie się wyższych uprawnień, to załadowane później wtyczki użytkownika nic nie zrobią.

// (C) 2019 Paweł Kraszewski

#include <stdio.h>
#include <unistd.h>

int main() {
    int uid, gid;
    int euid, egid;

    uid  = getuid();
    euid = geteuid();
    gid  = getgid();
    egid = getegid();

    printf("Przed zrzuceniem uprawnień: UID=%d EUID=%d GID=%d EGID=%d\n", uid, euid, gid, egid);

    if (uid != euid) { seteuid(uid); }
    if (gid != egid) { setegid(gid); }

    uid  = getuid();
    euid = geteuid();
    gid  = getgid();
    egid = getegid();

    printf("Po zrzuceniu uprawnień: UID=%d EUID=%d GID=%d EGID=%d\n", uid, euid, gid, egid);

    return 0;
}

W praniu:

> gcc -o uidgid uidgid.c
> ./uidgid
Przed zrzuceniem uprawnień: UID=1000 EUID=1000 GID=1000 EGID=1000
Po zrzuceniu uprawnień: UID=1000 EUID=1000 GID=1000 EGID=1000

> sudo ./uidgid
Przed zrzuceniem uprawnień: UID=0 EUID=0 GID=0 EGID=0
Po zrzuceniu uprawnień: UID=0 EUID=0 GID=0 EGID=0

> sudo chown 0:0 uidgid
> sudo chmod u+s,g+s uidgid
> ./uidgid
Przed zrzuceniem uprawnień: UID=1000 EUID=0 GID=1000 EGID=0
Po zrzuceniu uprawnień: UID=1000 EUID=1000 GID=1000 EGID=1000

Zawsze wolno ci zresetować EUID/EGID do odpowiednich UID/GID. Do zmiany EUID/EGID na inne niż UID/GID oraz do zmiany UID/GID potrzeba podwyższonych uprawnień.
« Ostatnia zmiana: 2018-06-27, 14:04:07 wysłana przez Paweł Kraszewski »
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy