Forum Linux.pl

Programowanie => Bash, skrypty powłoki => Wątek zaczęty przez: Zagiewa w 2017-09-28, 22:12:58

Tytuł: Program z prawami root
Wiadomość wysłana przez: Zagiewa w 2017-09-28, 22:12:58
Witam. Jak można stworzyć program/skrypt który wykona polecenia które wymagają bycia zalogowanym jako root kiedy ja pracuje na koncie zwykłego użytkownika?
Na pewno jest to możliwe tylko jak to mogę zrobić? Przykładowo potrzebuję aby wykonywało się co jakiś czas polecenie: "sync; echo 3 > /proc/sys/vm/drop_caches" - wymaga ono bycia zalogowanym jako root.
Skrypt ma być uruchamiany automatycznie w momencie uruchomienia komputera dlatego można by go było "wpisać" na stałe w pracę systemu jeśli mogę tak to nazwać :)
Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: 1709 w 2017-09-29, 00:01:48
Cytuj
Skrypt ma być uruchamiany automatycznie w momencie uruchomienia komputera

1. Cron
https://pl.wikipedia.org/wiki/Crontab
W linku niżej takze wspomniano o crontab
Cytuj
zamiast deklarowania kiedy ma zostać uruchomione polecenie lub skrypt korzystamy z „@reboot”,
2. Systemd lub Init w zależności co posiada system
https://www.dobreprogramy.pl/mariushko/Poradnik-systemd-cz.-2,67878.html
https://webinsider.pl/linux-autostart/

Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: Zagiewa w 2017-10-02, 21:11:27
Jak sprawić żeby program uruchamiał się automatycznie to akurat wiem, bardziej mi zależy aby polecenia które będzie on wywoływał wymagają bycia zalogowanym jako root i nie chcę aby pytał mnie za każdym razem o hasło aby polecenie się wykonało.
Musi być jakiś sposób na "zaznaczenie", że TE polecenia albo TEN plik zawierający polecenia mają prawo zostać wykonane z poziomu zwykłego użytkownika bez podawania hasła.
Użyłem nawet najgorszego rozwiązania z możliwych jak np:
echo HASLO | sudo -S swapoff -a && swapon -a
ale dostaje odpowiedz:
swapon: nie można otworzyć /dev/mapper/fedora-swap: Brak dostępu
Jakieś pomysły?
Jeszcze ślęczę przy pliku sudoers może tak się uda
Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: marcin'82 w 2017-10-02, 22:12:48
No to w końcu jako root czy zwykły użytkownik?

W tabeli crona użytkownika ROOT możesz umieścić takie cudactwo:
@reboot su UŻYTKOWNIK -c "moje polecenie"


Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: Zagiewa w 2017-10-03, 12:20:02
Chcę jako zwykły użytkownik uruchamiać niektóre polecenia które wymagają podania hasła root ale bez ich podawania.
Z cronem jest jakiś problem na fedora. Plik cron.allow nie istnieje a po jego utworzeniu i dodania użytkownika polecenie crontab -l zwraca:
You (Zagiewa) are not allowed to use this program (crontab)
Nie znalazłem jeszcze sposobu na naprawienie tego
Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: marcin'82 w 2017-10-03, 21:41:25
No to spróbuj z sudo bez hasła, na przykład:
https://wiki.archlinux.org/index.php/allow_users_to_shutdown#Users_without_sudo_privileges .
Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: Zagiewa w 2017-10-04, 11:58:04
Właśnie już wcześniej podjąłem walkę z sudoers ale bez powodzenia. Za pomocą visudo dodałem takie linijki na samym końcu pliku:
Cmnd_Alias SWAPOFF=/sbin/swapoff -a
Cmnd_Alias SWAPON=/sbin/swapon -a
Zagiewa localhost=NOPASSWD:SWAPOFF
Zagiewa localhost=NOPASSWD:SWAPON
I po ponownym uruchomieniu komputera nie działa...
Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: Paweł Kraszewski w 2017-10-04, 14:14:43
Cmnd_Alias SWAPOFF=/sbin/swapoff -a
Cmnd_Alias SWAPON=/sbin/swapon -a
Zagiewa localhost=NOPASSWD:SWAPOFF
Zagiewa localhost=NOPASSWD:SWAPON

1. nazwa użytkownika nie może zawierać dużych liter (taka konwencja, niestosowanie się gryzie w tyłek w różnych niespodziewanych momentach: "It is usually recommended to only use usernames that begin with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes. They can end with a dollar sign.")

2. sudo nie wie co to localhost. Musisz użyć rzeczywistej nazwy kompa: "Note that sudo only inspects actual network interfaces; this means that IP address 127.0.0.1 (localhost) will never match.".

3. host w sudoers robi co innego niż myślisz - linijki aktywują się w zależność od tego NA JAKIM komputerze odpaliłeś sudo, nie SKĄD się połączyłeś (mam wrażenie, że chesz zablokować swapon/swapoff przy połączeniach zdalnych). Pole host inne niż ALL stosuje się, gdy wiele komputerów współdzieli ten sam plik sudoers (np przez NFS albo na sztywno osadzony w obrazie systemu), a chcemy włączyć/wyłączyć niektóre reguły na kiektórych komputerach.

Czyli wynikowa regułka będzie wyglądać tak:

zagiewa ALL=(ALL:ALL) NOPASSWD: /sbin/swapoff -a, /sbin/swapon -a

Po edycji sudoers nie trzeba ponownie uruchamiać komputera.
Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: Zagiewa w 2017-10-05, 00:04:02
1. Tego nie doczytałem dzięki, chociaż sugerowałem się, że skoro nazwa użytkownika jest Zagiewa a nie zagiewa to w pliku sudoers również powinienem użyć takiej samej nazwy.
2. Odnośnie localhost to u mnie wygląda to tak:
[Zagiewa@localhost ~]$ hostname
localhost.localdomain
Do tej pory skoro wpisy w sudoers nie przynosiły efektu myślałem, że komputer musi być ponownie uruchomiony, dobrze wiedzieć, że nie :)
Tak czy siak dalej nie działa. Usunąłem moje wpisy, wstawiłem twój ale nie działa:
[Zagiewa@localhost ~]$ swapoff -a
swapoff: Trzeba być superużytkownikiem.
A gdy wpiszę sudo swapoff -a prosi o hasło
3. Nic z tych rzeczy, pracuję tyko na tym komputerze i praca zdalna nie wchodzi w grę. Użycie localhost to przypadek a nie próba połączenia zdalnego :)
Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: Paweł Kraszewski w 2017-10-05, 05:41:34
A teraz
sudo /sbin/swapoff -a
:)
Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: Zagiewa w 2017-10-05, 11:12:01
[Zagiewa@localhost ~]$ sudo /sbin/swapoff -a
[sudo] hasło użytkownika Zagiewa:
Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: Paweł Kraszewski w 2017-10-05, 11:53:07
sudo (jak cały UNIX) rozróżnia duże i małe litery.

1. W sudoers nazwa użytkownika musi być co do litery taka sama jak rzeczywista.
2. O tym użytkowniku z dużej litery chodziło mi, żeby poprawić login w /etc/passwd i /etc/shadow tak, żeby było z małej (edytując prze vipw). Na teraz można w sudoers dać z dużej (żeby zgadzało się z loginem), ale na przyszłość nie robić loginów niezgodnych ze schematem.

Przykład problemu z nieszablonowym loginem: systemy pocztowe nie rozróżniają dużych i małych liter. ZAGIEWA@... zagiewa@... czy Zagiewa@... to ten sam mail. Serwer pocztowy zamienia nazwę usera na same małe litery i tak szuka w systemie - a jak rzeczywisty user nie ma samych małych liter to go nie znajdzie i zwróci nadawcy błąd o nieistniejącym odbiorcy.
Tytuł: Odp: Program z prawami root
Wiadomość wysłana przez: Zagiewa w 2017-10-05, 12:24:17
To źle zrozumiałem. Poprawiłem nazwę użytkownika w sudoers i już działa dzięki :)
Co do nazw użytkowników to zapamiętam na przyszłość ale póki co pozostawię bez zmian.
Żeby ułatwić sobie sprawę postanowiłem w sudoers dodać ścieżkę do skryptu w katalogu domowym żeby nie musieć deklarować nowych poleceń w sudoers. Teraz wystarczy że wrzucę do skryptu potrzebne polecenie i wykonam skrypt :)
Zagiewa ALL=(ALL:ALL) NOPASSWD: /home/Zagiewa/sudoers_test/test.sh
A w pliku test.sh
#!/bin/bash
/sbin/swapoff -a
/sbin/swapon -a
Dzięki wielkie za pomoc!