Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam!
Zainstalowałem serwer fhem, który jest w
pic@debian:/$ su Hasło: root@debian:/# find -name fhem ./etc/init.d/fhem ./opt/fhem root@debian:/#
Serwer działa, ale nie uruchamia się z pełnymi uprawnieniami roota. Zainstalowałem więc sudo, a w pliku /etc/sudoers dopisałem
# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d %pic ALL=(ALL) NOPASSWD: /usr/bin/gnokii, /sbin/reboot, /sbin/poweroff, /usr/bin/vmware, /etc/init.d/fhem, /opt/fhem
Następnie plikom /etc/init.d/fhem i /opt/fhem nadałem uprawnienia specjalne
chmod u+s /etc/init.d/fhem chmod g+s /etc/init.d/fhem chmod -R u+s fhem chmod -R o+s fhem
Po tej czynności uprawnienia do plików zostały zmienione i wyglądają tak
root@debian:/etc/init.d# ls -l fhem -rwsr-sr-x 1 root root 1442 sty 4 14:10 fhem root@debian:/etc/init.d#
root@debian:/opt# ls -l fhem/ razem 200 -rwSr-Sr-- 1 fhem root 31488 lis 9 14:16 configDB.pm drwsr-sr-x 32 fhem root 4096 sty 4 14:10 contrib drwsr-sr-x 2 fhem root 4096 sty 4 14:10 demolog drwsr-sr-x 4 fhem root 4096 sty 4 14:10 docs drwsr-sr-x 5 fhem root 20480 sty 4 14:10 FHEM -rwSr-Sr-- 1 fhem root 1032 sty 9 11:14 fhem.cfg -rwSr-Sr-- 1 fhem root 12559 lis 9 14:16 fhem.cfg.demo -rwsr-sr-x 1 fhem root 104888 lis 9 14:16 fhem.pl -rwSr-Sr-- 1 root 1001 0 sty 10 13:24 gnokii-errors drwsr-sr-x 2 fhem root 4096 sty 4 15:40 log -rwSr-Sr-- 1 fhem root 761 lis 9 14:16 README_DEMO.txt drwsr-sr-x 8 fhem root 4096 sty 4 14:10 www root@debian:/opt#
Jednak powyższe działania nie spowodowały, że fhem odpala się z pełnymi uprawnieniami roota.
Znalazłem inny sposób na uruchomienie fhem z pełnymi uprawnieniami roota
pic@debian:/dev$ su Hasło: root@debian:/dev# /etc/init.d/fhem stop Stopping fhem... root@debian:/dev# /etc/init.d/fhem status fhem is not running root@debian:/dev# /etc/init.d/fhem start Starting fhem...
Jednak powyższy sposób jest bez sensu i chciałbym, aby fhem odpał się automatycznie z pełnymi uprawnieniami roota przy starcie systemu.
Ostatnio edytowany przez prosze (2015-01-10 16:17:36)
Offline
chmod -R u+s fhem -rwsr-sr-x 1 root root 1442 sty 4 14:10 fhem
Pokaż wynik polecenia
file fhem
Pliku wykonywalnego, a nie skrypta z init.d
Ostatnio edytowany przez Jacekalex (2015-01-10 16:21:05)
Offline
Tylko gdzie jest plik wykonywalny?
pic@debian:~$ file fhem fhem: cannot open `fhem' (No such file or directory) pic@debian:~$ su Hasło: root@debian:/home/pic# file fhem fhem: cannot open `fhem' (No such file or directory) root@debian:/home/pic# exit exit pic@debian:~$ file fhem fhem: cannot open `fhem' (No such file or directory) pic@debian:~$
root@debian:/# find -name fhem ./etc/init.d/fhem ./opt/fhem root@debian:/#
root@debian:/opt/fhem# ls -l razem 200 -rwSr-Sr-- 1 fhem root 31488 lis 9 14:16 configDB.pm drwsr-sr-x 32 fhem root 4096 sty 4 14:10 contrib drwsr-sr-x 2 fhem root 4096 sty 4 14:10 demolog drwsr-sr-x 4 fhem root 4096 sty 4 14:10 docs drwsr-sr-x 5 fhem root 20480 sty 4 14:10 FHEM -rwSr-Sr-- 1 fhem root 1032 sty 9 11:14 fhem.cfg -rwSr-Sr-- 1 fhem root 12559 lis 9 14:16 fhem.cfg.demo -rwsr-sr-x 1 fhem root 104888 lis 9 14:16 fhem.pl -rwSr-Sr-- 1 root 1001 0 sty 10 13:24 gnokii-errors drwsr-sr-x 2 fhem root 4096 sty 4 15:40 log -rwSr-Sr-- 1 fhem root 761 lis 9 14:16 README_DEMO.txt drwsr-sr-x 8 fhem root 4096 sty 4 14:10 www root@debian:/opt/fhem#
Ostatnio edytowany przez prosze (2015-01-10 16:42:56)
Offline
Co właściwie uruchamia ten plik /etc/init.d/fhem.
Bo jeżeli skrypta fhem.pl to na żadnym skrypcie powłoki czy perla albo pythona nie zadziała bit suid i sgid, takie rzeczy można robić tylko z plikami binarnymi ELF.
Np:
file `which sudo` /usr/bin/sudo: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, stripped
Skrypty musisz ustawić w sudoers i uruchamiać przez sudo.
To chyba najłatwiejszy sposób.
Przy okazji. w init.d to nie są programy, tylko skrypty startowe demonów systemowych, czemu go po prostu nie dodasz do autostartu, żeby wstawał automatycznie z systemem?
Bo na razie kombinujesz tak, jakbyś chciał się podrapać paluchem prawej nogi za lewym uchem, albo ubrać wojskowy hełm na lewą stronę. :D
Ostatnio edytowany przez Jacekalex (2015-01-11 06:04:05)
Offline
Plik z /etc/init.d/fhem wyląda tak
#!/bin/sh # description: Start or stop the fhem server # Added by Alex Peuchert ### BEGIN INIT INFO # Provides: fhem.pl # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: FHEM server ### END INIT INFO set -e cd /opt/fhem port=7072 if test "$2" != "noaptmark"; then apt-mark hold fhem > /dev/null fi case "$1" in 'start') echo "Starting fhem..." # if you need to start hmland for use with # Homematic, please start the hmland daemon # like this (please use correct path and port, # depending on your installation!) # # /opt/hmcfgusb/hmland -d -p 1234 -r 0 # perl fhem.pl fhem.cfg # if you want to use configDB for configuration, # use this command to start fhem: # # perl fhem.pl configDB # # and remove/comment the above line including fhem.cfg RETVAL=$? ;; 'stop') echo "Stopping fhem..." # if you want to stop hmland during fhem stop: # pkill hmland pkill -U fhem perl RETVAL=$? ;; 'status') cnt=`ps -ef | grep "fhem.pl" | grep -v grep | wc -l` if [ "$cnt" -eq "0" ] ; then echo "fhem is not running" else echo "fhem is running" fi ;; *) echo "Usage: $0 { start | stop | status }" RETVAL=1 ;; esac exit $RETVAL
i urchamia serwer do zarządzania domem, który dostępny jest przez przeglądarkę po wpisaniu adresu
http://localhost:8083/fhem?
Informacje o fhem są tutaj http://fhem.de/fhem.html
Nie mam pojęcia, który to jest plik wykonywalny.
Ostatnio edytowany przez prosze (2015-01-10 17:13:40)
Offline
a w ogóle ustawiłeś odpalanie demona fhem przy starcie czy czekasz aż sam się magicznie uruchomi?
pytanie kontrolne: jeśli fhem nie działa co będzie po
sudo service fhem start
dywagacje kolegi piętro wyżej o suidach, elfach i innych krasnoludkach raczej były nie na temat...
jakie to było polecenie do kontroli uruchamiania... rc-cośtam, niech ktoś się zlituje i przypomni...
Offline
ethanak, przecież pisałem w pierwszym poście, że fhem uruchamia się tylko nie z pełnymi uprawnieniami roota. Po ponownym odpaleniu systemu dla pewności jeszcze raz to sprawdziłem
pic@debian:~$ su Hasło: root@debian:/home/pic# /etc/init.d/fhem status fhem is running root@debian:/home/pic# exit exit pic@debian:~$ /etc/init.d/fhem status fhem is running pic@debian:~$
ale polecenie
pic@debian:~$ sudo service fhem start [sudo] password for pic: Niestety, proszę spróbować ponownie. [sudo] password for pic: Niestety użytkownik pic nie ma uprawnień do uruchamiania '/usr/sbin/service fhem start' jako root na debian. pic@debian:~$
Zaraz dodam do pliku /etc/sudoers zgodę na odpalanie /usr/sbin/service
Ostatnio edytowany przez prosze (2015-01-10 17:30:19)
Offline
to zrób z roota
service fhem start
poza tym skrypty przy starcie zawsze uruchamiają się z uprawnieniami roota - dopiero potem albo demonizer odpala binarkę z uprawnieniami konkretnego usera (nie w tym przypadku), albo binarka sama zrzuca uprawnienia.
dalej: to że skrypt istnieje w init.d nie oznacza, że się włączy. ponawiam prośbę do kolegów - zamiast smętnie bredzić o elfach i suidach powiedzcie facetowi jak się konfiguruje uruchomienie skryptu w rcX.d, bo na razie (nikogo nie obrażając) wypowiedzi są na poziomie kolegi Momtozadar Mocha z forum ubuntu, a ja na telefonie nam dość ograniczone pole manewru :(
Offline
Od wczoraj nie miałem prądu... W tej chwili sytuacja wygląda tak.
1. Uruchamiam komputer i loguje się na konto roota i daje
pic@debian:~$ su Hasło: root@debian:/home/pic# service fhem start
a następnie czekam, czy fhem uruchomi skrypt wysyłający smsa
#!/bin/bash echo "Idę na ryby?" | gnokii --sendsms 6071xxxxxx
ale nic z tego - sms nie zostaje wysłany. Sms zostaje dopiero wysłany po
root@debian:/home/pic# /etc/init.d/fhem stop Stopping fhem... root@debian:/home/pic# /etc/init.d/fhem status fhem is not running root@debian:/home/pic# /etc/init.d/fhem start Starting fhem... root@debian:/home/pic# GNOKII wersja 0.6.30 Udane wysłanie. Numer referencyjny wiadomości: -1
I teraz mam problem, bo nie wiem, dlaczego sms nie zostaje wyłany.
1. Czy z powodu tego, że serwer fhem nie został uruchomiony (ale przecież go uruchomiłem)?
2. Czy z powodu tego, że gnokii do wysyłania smsa wymaga uprawnień roota (a wiem, że wymaga).
Drugi przypadek wydaje mi się bardzej prawdopodobny, bo kiedy z konta roota zatrzymuje fhem, a następnie go uruchamiam to sms jest wysyłany, ponieważ fhem został uruchomiony z uprawnieniami roota.
Zrobiłem też inny test. W odpalanym skrypcie bash zamiast wysyłania smsa umieściłem polecenie tworzenia pliku
#!/bin/bash echo > "plik.txt"
i po uruchomieniu systemu plik jest tworzony bez końeczności wydawania polecenia service fhem start To dlaczego sms nie jest wysyłany skoro serwer fhem działa?
Ostatnio edytowany przez prosze (2015-01-11 16:41:30)
Offline
a w jaki sposób demon fhem uruchamia się przy starcie systemu? tylko bez teorii o elfach i krasnalach poprosiłbym...
a jeszcze jedno - czy gnokii znajduje się w ścieżce obowiązującej przy uruchamianiu programów z rc.d? pytam bo kiedyś sam się na to naciąłem.
Ostatnio edytowany przez ethanak (2015-01-11 17:59:10)
Offline
Wychodzi na to, że gnokii nie jest w ścieżce obowiązującej przy uruchamianiu programów z rc.d
PATH=/sbin:/usr/sbin:/bin:/usr/bin
Gnokii
pic@debian:~$ su Hasło: su: Uwierzytelnienie się nie powiodło pic@debian:~$ su Hasło: root@debian:/home/pic# find -name gnokii ./.cache/gnokii ./.config/gnokii ./.local/share/gnokii root@debian:/home/pic#
Na temat demona fhem nie będę tworzył żadnych teorii bo się na tym nie znam.
Ostatnio edytowany przez prosze (2015-01-11 20:38:45)
Offline
Ja tylko powiem, że start-stop-daemon ma opcję odpalania procesów jako inni użytkownicy.
Poniżej jest przykład skryptu odpalającego qbittorrenta na prawach morfik:p2p , czyli user morfik, grupa p2p :
#! /bin/sh ### BEGIN INIT INFO # Provides: qbittorrent-nox # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Should-Start: iptables-persistent pgl # Should-Stop: iptables-persistent pgl # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start QBittorrent # Description: Start qbittorrent-nox on start. Change USER= before running ### END INIT INFO # Author: Jesper Smith # # Do NOT "set -e" # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="QBittorrent" NAME=qbittorrent-nox DAEMON=/usr/bin/$NAME DAEMON_ARGS="" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/qbittorrent-nox USER=morfik:p2p # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon -c $USER -b -t --start --quiet --exec $DAEMON \ || return 1 start-stop-daemon -c $USER -b --start --quiet --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 sleep 1 } # # Function that stops the daemon/service # do_stop() { start-stop-daemon -c $USER --quiet --stop --exec $DAEMON sleep 2 return "$?" } VERBOSE="yes" case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac
Jeśli teraz odpali się qbittorrenta przy starcie systemu, lub zwyczajnie via ten skrypt rc, to proces wygląda tak:
root:~# /etc/init.d/qbittorrent-nox start [ ok ] Starting QBittorrent: qbittorrent-nox. root:~# ps -eo "user,group,pid,args" | grep -i qbitt morfik p2p 64221 /usr/bin/qbittorrent-nox
Bez cudowania z sudo i innymi wynalazkami. xD
Offline
@morfik: już o tym wspominałem jeśli raczysz się wczytać w cały wątek - tylko co to ma do rzeczy?
@prosze: polecenia ( z roota):
which gnokii
(to powinno pokazać gdzie jest gnokii)
find /etc/ -path "/etc/rc?.d/*fhem"
to odpowie na dręczące mnie pytanie
ps auxw | grep fhem
a to odpowie na pytanie którego nie zadałem, ale na które nie znasz odpowiedzi.
Offline
Co co ma do rzeczy? Masz przykład jak odpalić proces via skrypt startowy jako inny user niż root i masz przy tym jego zawartość, którą se możesz wziąć za wzór, a nie jakieś magiczne słowa typu: " demonizer"...
Offline
ethanak, oto wyniki poleceń
pic@debian:~$ su Hasło: root@debian:/home/pic# which gnokii /usr/bin/gnokii root@debian:/home/pic# find /etc/ -path "/etc/rc?.d/*fhem" /etc/rc3.d/S01fhem /etc/rc2.d/S01fhem /etc/rc6.d/K01fhem /etc/rc5.d/S01fhem /etc/rc0.d/K01fhem /etc/rc4.d/S01fhem /etc/rc1.d/K01fhem root@debian:/home/pic# ps auxw | grep fhem fhem 888 0.0 1.2 14292 11388 ? S 10:15 0:00 perl fhem.pl fhem.cfg root 3256 0.0 0.2 4568 2236 pts/0 S+ 10:20 0:00 grep fhem root@debian:/home/pic#
Offline
ethanak, wiesz już dlaczego sms nie jest wysyłany? Ja niestety nie wiem.
morfik, tak wygląda mój skrypt z /etc/init.d/fhem --> http://wklej.org/id/1595287/ Możesz podpowiedzieć, jak go zmienić, aby fhem był odpalany na prawach roota?
Ostatnio edytowany przez prosze (2015-01-14 14:23:06)
Offline
wiem dlaczego ale nie wiem skąd się bierze owo dlaczego (tzn. dlaczego fhem jest w ogóle uruchamiany bo dla S01 raczej nie ma prawa działać). teoretycznie zmiana na S98 powinna poskutkować odpaleniem serwera, ale to teoria.
muszę po prostu zainstalować fhema i zobaczyć co go boli - a do tego muszę mieć trochę wolnego czasu :(
jeszcze jedno - czy wysłanue smsa to jedyna czynność wymagająca roota? bo jeśli tak to można to w miarę prosto rozwiązać pozostawiając fhema tak jak jest...
spróbuj zmienić uprawnienia gnokii na 6755 - może pomoże?
Ostatnio edytowany przez ethanak (2015-01-14 14:32:48)
Offline
Właściwie sprawdzałem tylko tworzenie pliku (nie wymaga roota) i wysyłanie smów (tutaj wymaga). Innch możliwości nie testowałem. Zadałem też pytnie na tym forum (http://forum.fhem.de/index.php/topic,31844.msg243212.html#msg243212) i dostałem odpowiedź
Tylko i tak nie wiem, o co chodzi :)
EDIT:
Uprawnienia dla gnokii już miałem wcześniej ustawine na
pic@debian:~/Desktop$ ls -l /usr/bin/gnokii -rwsr-sr-x 1 root 1001 135768 lut 19 2014 /usr/bin/gnokii pic@debian:~/Desktop$
Ostatnio edytowany przez prosze (2015-01-14 14:52:44)
Offline
jakbyś tę odpowiedź zamieścił jako tekst to może bym zrozumiał - na telefonie widzę jeno wielce gustowny szlaczek.
---
dobra dopadłem w barze kumpla z laptopem.
dlaczego nie spróbujesz tego co ci polecili na forum?
Ostatnio edytowany przez ethanak (2015-01-14 14:55:50)
Offline
Taka była odpowiedź:
in /opt/fhem/fhem.pl you find
# If started as root, and there is a fhem user in the /etc/passwd, su to it
so maybe removing the user fhem could do it
Offline
so may be removing user fhem would be solution...
Offline
Tego skryptu nie ruszasz jeśli ma być odpalany jako root -- wcześniej źle zrozumiałem i myślałem, że chcesz odpalać go jako nie root, jeśli ten skrypt zostanie odpalony jako root, to wszystkie zawarte w nim polecenia będą wykonywane jako root, także bez sensu jest zmiana uprawnień wykonywanych w skrypcie poleceń na root jeśli ten skrypt jest odpalany jako root, bo przecie to jest oczywiste, że jeśli odpalasz skrypt jako root, to wszystko w nim się wykonuje z uprawnieniami roota. xD Jedynie co to masz tam:
perl fhem.pl fhem.cfg
a co robi ten skrypt i co tam za config jest, to ja nie mam zielonego pojęcia -- zajrzyj i zobacz co tam się dzieje. Może w tym configu masz jakieś opcje od zrzucania uprawnień, albo sam skrypt coś tam ustawia sobie.
Offline
ethanak napisał(-a):
so may be removing user fhem would be solution...
Oczywiście, że próbowałem tego rozwiązania i w pliku /etc/passwd postawiłem "#" przed
#fhem:x:999:20::/opt/fhem:/bin/false
Offline
Od kiedy maybe == solution? xD
Poza tym, ja sobie pobrałem tę paczke na debiana co tam jest na ich stronie i tam jest config i jakiś config.demo i w tym drugim jest pełno atrybutów -- dostosować ten pierwszy config i będzie działać jak trza. :]
Offline