Strona 1 z 2

[+] skrypt bash, nie wszystkie polecenia działają

: 14 maja 2010, 01:06
autor: robero
Mam dwa proste skrypty dla touchpada: wlacz.sh i wylacz.sh.
Np. wylacz.sh

Kod: Zaznacz cały

#!/bin/bash

kdesu  rmmod psmouse
perl -pi -e 's/#rmmod psmouse/rmmod psmouse/' /etc/rc.local
Pierwsze polecenie ładnie się wykonuje ale drugie już nie, a zależy mi na tym żeby zmiany zostawały na stałe.
Polecenie jest dobre bo w konsoli roota działa.
Skrypt ma być uruchamiany przez użytkownika.
Jak poprawić ten skrypt?

: 14 maja 2010, 01:52
autor: kaworu
Zobacz tak

Kod: Zaznacz cały

#!/bin/bash

kdesu  rmmod psmouse && perl -pi -e 's/#rmmod psmouse/rmmod psmouse/' /etc/rc.local

: 14 maja 2010, 01:56
autor: robero
Niestety bez zmian

: 14 maja 2010, 10:27
autor: xmaster
Problem leży więc w uprawnieniach użytkownika, pewnie nie ma uprawnień do pliku.

: 14 maja 2010, 11:31
autor: robero
xmaster pisze:Problem leży więc w uprawnieniach użytkownika, pewnie nie ma uprawnień do pliku.
Użytkownik jest właścicielem pliku, plik jest wykonywalny.

: 14 maja 2010, 11:58
autor: Yuji
Ale nie masz uprawnień do usunięcia modułu (rmmod) i załadowania (pewnie modprobe) (potrzeba uprawnień admina). Odpalasz program z sudo na początku

Kod: Zaznacz cały

sudo ./skrypt
Ja mam takie coś aby wyłączać/włączać touchpada.

Kod: Zaznacz cały

#!/bin/bash

if [ $# -ne 1 ]; then echo "Użycie: $0 {start|stop}"; exit 1; fi

if [ "$(id -gn)" != "root" ]; then echo "Brak uprawień roota. Pa"; exit 1; fi

if [ $1 == "start" ];
then
	modprobe psmouse

	echo -e "\nPsmouse: started"

elif [ $1 == "stop" ]
then
	rmmod psmouse

	echo -e "\nPsmouse: stoped"

elif [ $1 == "restart" ]
then
	$0 stop
	$0 start

	echo -e "\nPsmouse: restarted"

fi
Restart zbędny, ale tak zostało i nie chciało mi się kasować ;p

Wrzucasz do /usr/bin (kopiujesz za pomocą sudo cp ./skryptSP /usr/bin/skryptSP)
i zawsze wywołujesz przez sudo skryptPS start lub przez sudo skryptPS stop.


Ew możesz dodać skrypt do sudoers (za pomocą visudo) aby nie wymagał hasła. (w skrypcie dodajesz sudo przed rmmode i modprobe) i kasujesz warunek sprawdzania czy jesteś adminem.

: 14 maja 2010, 13:37
autor: robero
Dzięki za odpowiedzi. Zaczynam wątpić czy znajdę takie rozwiązanie o jakie mi chodziło.
Dodam że to ma być skrypt na pulpicie(w module lancelota), włączany poprzez kliknięcie w plik skryptu i stąd problemy.
Gdybym miał to uruchamiać z konsoli to to już działa.
I nie chcę używać sudo.
Yuji pisze:Ale nie masz uprawnień do usunięcia modułu (rmmod) i załadowania (pewnie modprobe) (potrzeba uprawnień admina).
Włąsnie ta cześć się wykonuje dzięki kdesu, chodziło o tą zamianę w perl.

POSTĘP
Skrypt wlacz.sh:

Kod: Zaznacz cały

#!/bin/bash
modprobe psmouse
perl -pi -e 's/rmmod psmouse/#rmmod psmouse/' /etc/rc.local 
 
Skrypt wlacz.sh w innym miejscu (inny):

Kod: Zaznacz cały

#!/bin/bash
su root -c /home/mirko/Programy/touchpad/wlacz.sh 
Jeśli użytkownik uruchamia z konsoli ten drugi skrypt to działa, jeśli kliknę w plik to już nie, zapewne dlatego że nie wyskakuje monit o hasło.
Jakiś pomysł?

: 14 maja 2010, 14:06
autor: Yuji
dodać skrypt do sudoers?

Kod: Zaznacz cały

visudo
i dopisujesz:

Kod: Zaznacz cały

nickUsera    ALL=NOPASSWD: /sciezka/do/pliku/wlacz
nickUsera    ALL=NOPASSWD: /sciezka/do/pliku/wylacz
Wtedy nie powinno pytać o hasło

Tak na szybko to zrobiłbym tak:
Dwa pliki na pulpicie z bitem wykonywania:
wlacz.sh:

Kod: Zaznacz cały

#!/bin/sh
sudo modprobe psmouse
sudo perl -pi -e 's/rmmod psmouse/#rmmod psmouse/' /etc/rc.local
wylacz.sh:

Kod: Zaznacz cały

#!/bin/sh
sudo rmmod psmouse
sudo perl -pi -e 's/#rmmod psmouse/rmmod psmouse/' /etc/rc.local
I wpis w sudoers:

Kod: Zaznacz cały

silver  ALL=NOPASSWD:   /home/silver/Desktop/wlacz.sh
silver  ALL=NOPASSWD:   /home/silver/Desktop/wylacz.sh
I klikając na skrypty na pulpicie włącza i wyłącza mysz (nie wiem czy robi wpisy w rc.local-robiłem bez tych 2 linii - linijki z perl)

: 14 maja 2010, 16:37
autor: robero
Nie wiem dlaczego wpisy w sudoers totalnie nic mi nie dają. W ogóle chyba mam nieskonfigurowane sudo i nie chcę go konfigurować.
Dodatkowo wydaje mi się że stworzenie takiego pliku jak chciałem (taki jak stworzył Yuji) jest skrajnie niebezpieczne, bo przecież teraz dowolny skrypt z prawami użytkownika może dodać do takiego skryptu dowolne polecenia super użytkownika. Stąd moje pytanie: czy to że nowy, obcy skrypt nie ma domyślnie bitu wykonywalności jest wystarczającą ochroną? Czy ktoś może to łatwo obejść?

Problem rozwiązany, choć inaczej niż chciałem. Dodałem te skrypty to /usr/bin, zrobiłem roota właścicielem i teraz z konsoli roota wydaję polecenia o wdzięcznej nazwie:

Kod: Zaznacz cały

touchpadON.sh
i

Kod: Zaznacz cały

touchpadOFF.sh
Dziękuję wszystkim za sugestie.

: 14 maja 2010, 16:53
autor: Yuji
Do końca nie rozumiem co masz na myśli, że niebezpieczne? To, że ktoś zmodyfikuje zawartość pliku to ustaw prawa dostępu aby tylko ten użytkownik mógł modyfikować plik.

No chyba, że zapewne masz na myśli, że komuś dasz usiąść na swoim koncie i zmieni zawartość. Tak to fakt niebezpieczne, dlatego samo sudo z konsoli musi wystarczyć. Ja osobiście mam ustawione tylko plik w /usr/bin (uruchomię z każdego miejsca w konsoli) i z sudo odpalam (start|stop) (bez sudoers).

Zastanawiam się czy nie da się ustawić, że użytkownik może używać tylko rmmod i modprobe dla określonego modułu bez hasła, dla reszty normalnie z hasłem, ale raczej tak nie ma.