Budowa systemów opartych o jądro Linux

0

Nie wiem, nawet jeżeli to nie robię [aktualizacji].
Dlaczego ? Na innym komputerze zaktualizowałem GNU/Linux Mint 17.2 Mate do GNU/Linux Mint 17.3 Mate i zaczęły się kłopoty a to ze sterownikami, a to trzeba było dysk skanować dyski przez fsck a to menadżer aktualizacji nie był w stanie ich wyszukać. Lepiej od nowa zainstalować z CD/pendrive niż upgradować ....

Co się tyczy zawieszania środowiska graficznego ... Też miałem coś takiego. Używałem otwartych sterowników -> potem zamkniętych od NVIDIA -> potem otwartych i wtedy też zaczął się wieszać komputer -> problem "rozwiązałem" tym że wróciłem do zamkniętych sterowników. Nazywam to "zemstą NVIDI" ;)

Na kernelach się nie znam.

1
  1. w katalogu /root znajduje się czasami podkatalog boot

Edit: na 80% widziałem coś takiego dzisiaj na swoim kompie (Linux Mint), ale teraz nie jestem pewien w czym.

Możliwe że mignęło mi coś w rodzaju "$root/boot"
https://wiki.archlinux.org/index.php/Diskless_system
http://www.gnu.org/software/grub/manual/grub.html

  1. pliki do bootowania znajdują się w katalogu /boot w Linux Mint.
    Jeśli nie utworzy się partycji /boot to zapisane są one w partycji root ("/") i katalogu "/boot".

  2. Budowa systemów Linux to nie jest coś na jedno popołudnie, trzeba wziąć pod uwagę to że temat cały czas się rozwija i ma odnogi (różne dystrybucje).
    Coś n.t.

http://downtoearthlinux.com/posts/the-essential-guide-to-the-linux-filesystem/
http://www.howtogeek.com/117435/htg-explains-the-linux-directory-structure-explained/
http://www.ibm.com/developerworks/library/l-boot-rootfs/
http://teaching.idallen.com/cst8207/14w/notes/750_booting_and_grub.html

0

Szkoda zakładać nowy temat - mam takie "szybkie" pytanie - gdzie mogę znaleźć kod źródłowy poszczególnych aplikacji?
Konkretnie /sbin/login w tym momencie - jest jakaś strona z kodami źródłowymi?
Szukałem w sieci ale nie znalazłem nic co działa.

2

Wpisując man login dostaję manuala. Na dole pokazanej strony jest napis shadow-utils 4.1.5.1. Googlowanie projektu i programu przyniosło taki efekt: https://github.com/shadow-maint/shadow/blob/master/src/login.c

0

Jak jest przeprowadzany proces logownaia w linuksach ?

Oczywiście trochę poczytałem przed zadaniem pytania, słowem wstępu oto czego się dowiedziałem.
Mamy pliki:
Plik /etc/group - zawiera nazwy grup w systemie oraz listę członków każdej grupy.
plik /etc/shadow - ma nazwe uzytkownika, skrót [hash] jego hasła (jakiej funkcji skrótu używa się obecnie?) i tym podobne
Plik /etc/passwd - zawiera listę użytkowników rozpoznawanych przez system.

Mimo rozeznania mam kilka pytań na które brak mi odpowiedzi.

  • Dlaczego jest tyle plików? W systemach Windowsowych istnieje coś takiego jak baza SAM.
    Jest jakiś powód istnienia tylu plików ? Domyślam się że może chodzić o kompatybilność wsteczną ewentualnie w mrocznych latach 90-tych nie przewidziano czegoś. A może zwyczajnie tak jest bezpieczniej że istnieje osobny specjalny plik który ma w sobie hasła?

  • Jak wspomniałem wcześniej obecnie używam GNU/Linux Mint 17.3 Cinnamon
    Moje pytanie dlaczego jest tak dużo uzytkowników - zwłaszcza że ich nie tworzyłem?

root0root:/root:/bin/bash
daemon1daemon:/usr/sbin:/usr/sbin/nologin
bin2bin:/bin:/usr/sbin/nologin
sys3sys:/dev:/usr/sbin/nologin
sync4sync:/bin:/bin/sync
games5games:/usr/games:/usr/sbin/nologin
man6man:/var/cache/man:/usr/sbin/nologin
lp7lp:/var/spool/lpd:/usr/sbin/nologin
mail8mail:/var/mail:/usr/sbin/nologin
news9news:/var/spool/news:/usr/sbin/nologin
uucp10uucp:/var/spool/uucp:/usr/sbin/nologin
proxy13proxy:/bin:/usr/sbin/nologin
www-data33www-data:/var/www:/usr/sbin/nologin
backup34backup:/var/backups:/usr/sbin/nologin
list38Mailing List Manager:/var/list:/usr/sbin/nologin
irc39ircd:/var/run/ircd:/usr/sbin/nologin
gnats41Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody65534nobody:/nonexistent:/usr/sbin/nologin
libuuid100:/var/lib/libuuid:
syslog101:/home/syslog:/bin/false
messagebus102:/var/run/dbus:/bin/false
usbmux103usbmux daemon,,,:/home/usbmux:/bin/false
dnsmasq104dnsmasq,,,:/var/lib/misc:/bin/false
avahi-autoipd105Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
kernoops106Kernel Oops Tracking Daemon,,,:/:/bin/false
avahi107Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
pulse108PulseAudio daemon,,,:/var/run/pulse:/bin/false
colord109colord colour management daemon,,,:/var/lib/colord:/bin/false
hplip110HPLIP system user,,,:/var/run/hplip:/bin/false
mdm111MDM Display Manager:/var/lib/mdm:/bin/false
rtkit112RealtimeKit,,,:/proc:/bin/false
saned113:/home/saned:/bin/false
speech-dispatcher114Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
kacper1001kacper,,,:/home/kacper:/bin/bash
oprofile115OProfile JIT user,,,:/var/lib/oprofile:/bin/bash
statd116:/var/lib/nfs:/bin/false
debian-tor117:/var/lib/tor:/bin/false
nvidia-persistenced118NVIDIA Persistence Daemon,,,:/:/sbin/nologin

Jak wygląda proces autoryzacji użytkownika czy menadżera logowania?
a) Menadżer otrzymuje dane dostępowe otwiera wyżej wymienione pliki i samodzielnie sprawdza czy dane są poprawne.
b) czy też jadro Linux ma wbudowane funkcję autoryzujące użytkownika
Ja bym się bardziej skłaniał ku podpunktowi a
gdyż udało mi się znaleźć posty manager logowania: https://en.wikipedia.org/wiki/SLiM
KOD: https://sourceforge.net/projects/slim.berlios/?source=typ_redirect
Na szybko przejrzałem i nie znalazłem tam jakiś magicznych funkcji jadra.
Możecie mi pomóc (choć bardziej)znaleźć kod menadżera logowania np w środowisku Cinnamon lub KDE.
Przeglądałem githuba ale szczerze powiedziawszy nie wiedziałem gdzie patrzyć - tyle tego było [w KDE].

0

Dlatego jest tak dużo plików ponieważ ISO Mint zawiera 1.3GB programów. Chcesz mało plików zainstaluj Archlinux z netinstall lub Gentoo z chroota. Czyste systemy które budujesz od podstaw, tak samo openSUSE, Manjaro, Debian, Ubuntu ma wersję netinstall core.

0

Re: uwierzytelnianie - to problem na osobną książkę (nawet jeśli ograniczysz się tylko do Linuxa).

Wstępniak: http://www.linuxgeek.net/documentation/authentication.phtml

Edit: a ta lista jest taka długa bo to przecież użytkownicy systemowi (daemony itp). Lepiej ich nie w(y)kurzać :)

0

@vpiotr

Edit: a ta lista jest taka długa bo to przecież użytkownicy systemowi (daemony itp). Lepiej ich nie w(y)kurzać :)

Możliwe że masz rację ale wytłumacz mi po co mi deamon games,news,mail etc ?
Czy wszyscy ci użytkownicy są konieczni? Na linuksach się nie znam ale czy nie powinno być tak że jest root,kacper{ja} a cała reszta jest aplikacją uruchamianą przy starcie - te całe mail,news,game.
Co się tyczy innych użytkowników - rozumiem że mniej więcej tak działa mechanizm - gdy system wystartuje automatycznie loguje użytkownika pulse [zdjae sie to jest podsystem dźwięku] a temu miast konsoli czy GUI uruchamia się aplikacja / podsystem odpowiedzialny za dźwięk w systemie ?

Tak nawiasem mówiąc wkurza mnie to w moim systemie że mam uruchomionych 169 procesów a co one robią Tego nie wie nikt?!
Oczywiście tylko 2 są aktywne - lecz mimo to lubię wiedzieć co jest włączone i dlaczego w moim komputerze

Powtórze:

czy [...] jadro Linux ma wbudowane funkcję autoryzujące użytkownika ?

bo natrafiłem na ślad jakiegoś mechanizmu PAM - http://www.linux-pam.org/Linux-PAM-html/Linux-PAM_ADG.html
Moje śledztwo wykazało że w tym Linuxie to nic nie ma. Mneadzer okien - nie, podsystem dźwieku- a po co ?, autoryzacja użytkownika - sam se zrób ;)
Mam lektur na kilka dni.

@vpiotr
Napisałeś:

uwierzytelnianie - to problem na osobną książkę (nawet jeśli ogrhttp://4programmers.net/Forum/Hardware_Softwareaniczysz się tylko do Linuxa

Co jest w tym skomplikowanego - mam zamiar przeczytać m.in. link który wskazałeś - już nawet zacząłem ale prosze - zaspoileruj :)
/// Pisze to jeszcze przed lekturami linków- może być durne.
Myślałem że to dość proste - proces autoryzujący pobiera login i hasło, jeżeli się zgadza to uruchamia (tu zaczynają się moje braki) powłokę.
Z tym że proces powłoki jest uruchamiany z innym SID czy GID ?
http://man.yolinux.com/cgi-bin/man2html?cgi_command=setsid
http://man.yolinux.com/cgi-bin/man2html?cgi_command=setgid

0

No dobra, to mały spojler:

Podstawowa informacja w tym temacie:

  • proces autoryzacyjny ma zazwyczaj w poważaniu hasło, dlaczego?

Autoryzacja = sprawdzenie uprawnień do operacji (tu sprawdzasz czy aktualny użytkownik może uruchomić program X)
Uwierzytelnianie = Autentykacja = sprawdzenie tożsamości użytkownika (tu jest ew. sprawdzane hasło)

https://pl.wikipedia.org/wiki/Uwierzytelnianie
http://www.cyberciti.biz/faq/authentication-vs-authorization/

Podejrzewam (nie wiem tego) że sam kernel mało wie o użytkowniku - co najwyżej zna jego UID. Reszta procesów siedzi poza kernelem. Tak bym przynajmniej zrobił w konstrukcji typu "mikrokernel". Ale kernel Linuxa (masło maślane) to moloch, może ma coś więcej.
Częściowo potwierdzają to z grubsza linki które podesłałem i np. też https://en.wikipedia.org/wiki/Linux_Security_Modules

0

OK Przeczytałem już parę artykułów o PAM ale wciąż nie rozumiem jak przebiega uwierzytelnianie użytkownika
Dowidziałem się że PAM jest niezbędną aplikacją każdej 'nowoczesnej dystrybucji', jest związany z aplikacjami wymagająca autoryzacji użytkownika - (gdzieś było wymienione np.) sudo, su, passwd itp. PAM udostępnia interfejs programistyczny - API do komunikacji z menadżerem
Oto przykład aplikacji używającej PAM: http://www.linux-pam.org/Linux-PAM-html/adg-example.html
Nie za bardzo, mimo 'analizy' kodu powyższej aplikacji rozumiem proces uwierzytelniania.

/*
  This program was contributed by Shane Watts
  [modifications by AGM and kukuk]

  You need to add the following (or equivalent) to the
  /etc/pam.d/check_user file:
  # check authorization
  auth       required     pam_unix.so
  account    required     pam_unix.so
 */

#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <stdio.h>

static struct pam_conv conv = {
    misc_conv,
    NULL
};

int main(int argc, char *argv[])
{
    pam_handle_t *pamh=NULL;
    int retval;
    const char *user="nobody";

    if(argc == 2) {
        user = argv[1];
    }

    if(argc > 2) {
        fprintf(stderr, "Usage: check_user [username]\n");
        exit(1);
    }

    retval = pam_start("check_user", user, &conv, &pamh);

    if (retval == PAM_SUCCESS)
        retval = pam_authenticate(pamh, 0);    /* is user really user? */

    if (retval == PAM_SUCCESS)
        retval = pam_acct_mgmt(pamh, 0);       /* permitted access? */

    /* This is where we have been authorized or not. */
    ///TUTAJ RZEKOMO JUZ WIADOMO CZY JESTEM AUTORYZOWANYM UZYTKOWNIKIEM
   ////CO TO MI DAJE ?

    if (retval == PAM_SUCCESS) {
        fprintf(stdout, "Authenticated\n");
    } else {
        fprintf(stdout, "Not Authenticated\n");
    }

    if (pam_end(pamh,retval) != PAM_SUCCESS) {     /* close Linux-PAM */
        pamh = NULL;
        fprintf(stderr, "check_user: failed to release authenticator\n");
        exit(1);
    }

    return ( retval == PAM_SUCCESS ? 0:1 );       /* indicate success */
} 

Przykładowa aplikacja wywołuje następujące funkcję.
int pam_start( service_name,user,pam_conversation, pamh) -* The pam_start function creates the PAM context and initiates the PAM transaction***
int pam_authenticate(pamh,flags); - The pam_authenticate function is used to authenticate the user.
int pam_acct_mgmt(pamh, flags); - The pam_acct_mgmt function is used to determine if the users account is valid.
int pam_end(pamh,pam_status); -* The pam_end function terminates the PAM transaction and is the last function an application should call in the PAM context**.*
Nie pojmuje tego kodu - wiem co robi kod ale nie rozumiem co to znaczy że PAM uzna mnie np za autoryzowanego usera - czy da mi wyższe uprawnieina?

http://www.linux-pam.org/Linux-PAM-html/Linux-PAM_SAG.html
Powyżej jest link do podręcznika dla administratorów systemów linuksowych.
Jest tam opisane jak konfigurować PAM ale ani trochę tego nie rozumiem - nie wiem o co chodzi w tych plikach konfiguracyjnych :(
(Oczywiście czytałem jak konfigurować PAM w innych źródłach ale też nie pomogło.)

Podsumowując
Czym jest ten PAM - jakimś procesem uruchomionym w tle?
Ja osobiście nie znalazłem go na liście procesów.
Co mi daje komunikacja z PAM za pomocą interfejsu? - po co się ona odbywa ?

PS: PAM jest w mojej ocenie zbyt skomplikowany - PAM powinien zostać uproszczony lub zniszczony ;)

0

Popatrz na górę pliku: .so - shared object, czyli unixowy odpowiednik DLL.

0

Na devce gentoo zawsze było super wytłumaczone:
https://devmanual.gentoo.org/tasks-reference/pam/
jeżeli czegoś nie wiesz szukasz w inrenetach. Możliwe, że znajdziesz polską wersję dokumentacji do gentoo.

Dodatkowo poczytaj o tym ataku:
https://www.exploit-db.com/exploits/39277/

1 użytkowników online, w tym zalogowanych: 0, gości: 1