Strona 1 z 1

Eclipse utracił uprawnienia do otwierania sock_raw jako zwykły użytkownik

: 20 stycznia 2013, 02:19
autor: Pad19
Witam.
M
am zainstalowane Ubuntu 12.04, nic nie zmieniane przy uprawnieniach, standardowo stworzony jeden użytkownik przy instalacji systemu.

Mam zainstalowany program Eclipse, w którym programowałem aplikacje sieciowe w języku C. Program Eclipse zainstalowany przez centrum oprogramowania, też bez żadnych modyfikacji.

Dzisiaj Eclipse mi się zawiesił przy zamykaniu projektu, w końcu zabiłem jego proces i od tej pory nie mogę otwierać w nim funkcji socket jako sock_raw.

Przykładowy kod:

Kod: Zaznacz cały

s_out = socket(AF_PACKET, SOCK_RAW, ETH_P_ALL);
                if (s_out == -1)
                {
                    printf ("Nie moge otworzyc gniazda s_out\n");
                }
Wcześniej wszystko działało prawidłowo, jako zwykły użytkownik nie root. Teraz niestety zawsze

Kod: Zaznacz cały

s_out
przyjmuje wartość: i zwraca błąd:

Kod: Zaznacz cały

SIOCGIFINDEX: Bad file descriptor

Myślę, że nadpisały się uprawnienia jakiegoś pliku ale nie mam pojęcia jakiego.

W internecie znalazłem wiele informacji o tym, że sock_raw zadziała tylko uruchamiany z konta roota i owszem działa. Jednakże, tak jak napisałem wcześniej, wszystko również działało mi na koncie zwykłego użytkownika i chciałbym aby dalej tak było.

Pozdrawiam.

: 20 stycznia 2013, 02:31
autor: Rafal_F
Socket otwierasz w programie, który napisałeś przy pomocy Eclipse? A próbowałeś uruchomić program poza Eclipse? I czy jesteś pewien, że problem nie jest błędny kod?

: 20 stycznia 2013, 02:58
autor: Pad19
Tak, jestem pewny, że kod jest poprawny, mam napisane kilka programów w ten sam sposób i wszystkie działały prawidłowo.

Mam zapisane zrobione projekty, które jeszcze działały około dwie godziny temu, teraz je otwieram i nie działają. Poza programem Eclipse, w tej chwili, też nie otwiera funkcji socket, wcześniej niestety nie pamiętam, czy działało poza Eclipse, bo prawie zawsze uruchamiałem przez niego.

: 20 stycznia 2013, 03:30
autor: Rafal_F
Dołącz zawartość:

Kod: Zaznacz cały

/var/log/syslog
z momentu awarii.
Zgodnie z dokumentacją funkcji socket:
RETURN VALUE On success, a file descriptor for the new socket is returned. On
error, -1 is returned, and errno is set appropriately.
Sprawdź wartość zmiennej errno, powinna ona dostarczyć więcej informacji na temat problemu. Więcej o zmiennej w:

Kod: Zaznacz cały

man errno

: 20 stycznia 2013, 04:17
autor: Pad19
W log/syslog nic nie ma na ten temat, nie jest to problem z jądrem, system się nie zawiesił. Żadne nowe wpisy nie pojawiają się tam przy otwieraniu socketu. Tak samo nie ma wpisu nawet jak zabijałem proces Eclipsa. Funkcja perror operująca na errno zwraca: "Operation not permitted". ioctl(s_out, SIOCGIFINDEX, &ifr) powoduje błąd "SIOCGIFINDEX: Bad file descriptor". W "http://debian.linux.pl/threads/12771-Za ... #post81406" nie ma nic co mogłoby mieć związek z tym co mi się stało.

Sytuacja dla mnie jest jasna od początku. Problem występuje z uprawnieniami które miał Eclipse a je stracił przez nieprawidłowe zamknięcie. Zgodnie z dokumentacją przeczytaną w internecie jak już pisałem otwieranie socketu jako raw jest dozwolone tylko spod roota. Jeśli działało mi to spod zwykłego użytkownika to znaczy że Eclipse podczas instalacji dokonał zmian w systemie i nadał uprawnienia. Prawdopodobnie podczas zamykania i przez to że zabiłem mu proces narobił będów w tych plikach uprawnień. Reinstalacja Eclipsa niestety nie pomogła. Teraz pytanie do osoby która zna się na uprawnieniach Linuxa :) Gdzie i jak działają mechanizmy które pozwalają użytkownikom odpalać programy z pewnymi przywilejami roota(nie sudo) i jak przywrócić tą funkcjonalność do Eclipsa.

: 20 stycznia 2013, 14:26
autor: fnmirk
Pad19, nie ma odpowiedzi opisowej, że Twoim zdaniem, w logu nic nie ma. Zostałeś poproszony przez Rafala_F ,o dostarczenie konkretnych informacji to proszę ich dostarczyć.

Proszę zapoznać się z opisem:
http://debian.linux.pl/threads/12771-Za ... #post81406

Wstawiając na forum polecenia, ich wyniki, logi itp. proszę używać znaczników code.

Ps. Zielony kolor jest na tym forum zarezerwowany, wyłącznie dla moderatorów.

: 20 stycznia 2013, 15:33
autor: Rafal_F
Eclipse tu nie ma nic do rzeczy (o ile nie był uruchomiony jako root), a przynajmniej nie powinien. Eclipse nie tworzy żadnego wirtualnego środowiska, sam w sobie nie zawiera też kompilatora, uruchamia po prostu zewnętrzne programy. Spróbuj przebudować projekt poza eclipse używając make, bądź samego gcc w zależności od poziomu skomplikowania projektu i ponownie go uruchomić. U mnie przykładowa funkcja z pierwszego postu uruchomiona w przestrzeni użytkownika nie zwraca błędu.