DSM 6.x und darunter Benutzer Privilegien / Rechte

Alle DSM Version von DSM 6.x und älter
Status
Für weitere Antworten geschlossen.

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
Hi,
Kann ich einem Benutzer oder einer Gruppe erlauben die DSM Herunterfahren zu können? Ohne ihn gleich zum Admin machen zu müssen?

Warum das? Einer meiner normalen nutzer kann per WOL die DS hochfahren und seine Date auf ihr absichern etc. Nun hätte ich gerne, das er über einen normalen DSM Login die DS danach dann wieder komplett runterfahren kann.

Habe bei Anwendungsberechtigungen und Privilegieneinstellungen nichts entsprechendes gefunden.


Grüße Wessix
 

amarthius

Super-Moderator
Teammitglied
Mitglied seit
03. Jun 2009
Beiträge
6.813
Punkte für Reaktionen
33
Punkte
174
Das ist meines Wissens nicht möglich. Wäre auch nicht hilfreich, wenn ein normaler Nutzer plötzlich den Server runterfahren kann :)
 

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
Oder kann man umgekehrt einen Admin account irgendwie so einschränken das er mir nicht die ganze ds verstellen kann?
Oder lässt sich mein Problem irgendwie anders lösen? Jemand eine Idee/Trick?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Schau dir mal ssh Login mit Zertifikaten an. Dort kannst du basierend auf dem Zertifikat für den gleichen User unterschiedliche Kommandos ausführen. Du könntest also ein Cert machen mit dem man sich als root anmelden kann. In der Konfig kannst du dann genau festlegen, dass dieses Cert genau den Befehl poweroff ausführen darf und sonst nichts.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ich halte die Idee mit dem (kontrollierten) Herunterfahren der DS durch einen Benutzer (natürlich muss der Admin das irgendwie freigeben) für richtig gut. Das sollte man den Synology-Entwicklern mal per E-Mail schreiben.

Itari
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
@itari
finde es ebenfalls eine gute Idee für einen Feature Request, allerdings könnte ich mir vorstellen, dass dies Sicherheitstechnisch ned unbedenklich sein könnte. Immerhin müsste doch dazu ein non-root User root Rechte erhalten.
 

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
Schreibe ich so einen feateru request ganz normal über eine Support anfrage? Oder gibts da extra was für die "speziellen" Wünsche.

Grüße Wessix
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Kannst du afaik über das normale Formular machen. bis Syno das jedoch umgesetzt hat, solltest du dir wirklich mal den zertifikatsbasierten ssh Login anschauen. Da kann der User, wenn er über den privaten Schlüssel verfügt, ohne Kenntnis des root PW die Kiste runterfahren. Also ziemlich genau was du wohl machen willst ;-)
 

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
Hi Freunde,
dank des phantastischen Supports von jahlives, konnte ich ein script bastel, welches per ssh-Zertifikat-login aufgerufen wird und dann überprüft:
1)ob ein Pyload download läuft (dazu muss die pyLoadCli.py ausgeführt werden, muss ich noch ins autostartscript integrieren)
2)ob Rechner in einem gewissen IP Bereich gerade auf die DS zugreifen (über netstat)
3) ob gerade zugriff auf Sambafreigaben erfolgt (smbstatus)

Wenn alles negativ die DS runterfährt.

Wenn eines positiv, kein Runterfahren.

Nach ersten Testläufen funktioniert es ganz gut. Ich werde die Vorgehensweise und den Inhalt des Scripts mal schön zusammenschreiben und hier veröffentlichen.
Es gibt bestimmt noch Punkte die man verbessern oder sicherer machen kann. Wenns brauchbar ist kann man es ja evtl in das Wiki aufnehmen.

Falls jemand schon vorher Interesse am script hat, einfach bei mir melden.

Grüße Wessix
 

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344
Wäre noch ganz nett wenn sich das Skript selbst wieder nach gewisser Zeit aufrufen würde (sofern das möglich ist), damit wiederholte cron-Einträge entfallen.

MfG Matthieu
 

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
ShutdownOnLan SOL

Ziel des Projektes ist es einem normalen User das Herunterfahren der DS zu ermöglichen, ohne ihm einen DSM Administrator Zugang einrichten zu müssen.
Das Script soll aber auch verhindern, dass ein solcher User anderen Usern oder mir als admin, den Saft abdreht während auf der DS gearbeitet wird.

Umgesetzt wird dies durch ein Script, das durch einen Zertifikatbasierten Login mit z.B. Putty automatsich aufgerufen wird und der User keine Eingaben machen kann.

Vorarbeiten die gemacht werden müssen:
Als erstes muss der SSH-Zugang mittels Schlüssel eingerichtet werden.
Das Vorgehen wird im Wiki in folgendem Artikel erleutert:
http://www.synology-wiki.de/index.php/Ssh_mit_Zertifikaten_absichern

Wenn man das gemacht hat, verwendet man entweder den erstellten Schlüssel oder erstellt sich für das Shutdown-Script nochmal einen neuen mittels Putty KeyGen.

Nun muss man diesen in die
Rich (BBCode):
~/.ssh/authorized_keys
eintragen.
und setzt davor:
Rich (BBCode):
command="/root/testscript.sh",no-port-forwarding,no-agent-forwarding

sodass die entsprechende Zeile dann ungefähr so aussieht:

Rich (BBCode):
command="/root/testscript.sh",no-port-forwarding,no-agent-forwarding ssh-rsa ABBAB3................................iE= rsa-key-20110520

In diesem Fall heißt das Script testscript.sh und liegt im /root Verzeichnis. Das kann angepasst werdem. Vielleicht in shutdown.sh o.ä.

Die Punkte beim rsa schlüssel sind natürlich bei euch Zeichen eures Schlüssels.

Danach müsst ihr SSH neustarten.
!!! Bitte beachtet den Hinweis im WIKI bezüglich des Hintertürchens Telnet, das man sich vorher aufmachen sollte. Mir wäre es auch fast passiert.!!!

So nun das eigentliche Script, in meinem Falle also der Inhalt von /root/testscript.sh


Rich (BBCode):
#!/bin/ash

# Die Erste Abfrage dient dazu zu klären ob ein Pyload download läuft, wenn ihr andere pyload Pfade habt müsst ihr das entsprechend anpassen. Wenn ihr pyload nicht nutzt und diese abfrage nicht braucht könnt ihr 
# von hier bis zu netstat alles löschen, müsst dann aber weiter unten bei der Berechnung von STRINGGESAMT  $STRING0 rausnehmen und bei if [ $SRINGGESAMT = 2 ]; eintragen

if [ -z "$(/opt/bin/python /opt/pyload/pyLoadCli.py status)" ]; then    
echo "Kein Download = ok"
STRING0="1"
else
echo "Download aktiv"
STRING0="0"
fi

if [ "$STRING0" == '0' ]; then
echo 'DS wird nicht heruntergefahren, es ist ein Download aktiv.'
sleep 5
exit
fi

# Nun die Abfrage ob Clients aus dem angegebenen Ip Bereich mit der DS verbunden sind, je genauer Ihr den Ip Bereich angebt, desto strenger wird die Abfrage.
# Man könnte also auch nur einen Pc z.b. 192.168.1.10 angeben. Ip muss an eure Bedürfnisse angepasst werden

netstat -n | grep -q -n 192.168.1
if [ $? -ne 0 ];
then
echo 'Es wurden keine PCs aus dem Heimnetzwerk oder VPN gefunden, die mit der Diskstation verbunden sind = ok'
STRING1="1"
else
echo 'Es wurden Pcs aus dem Heimnetzwerk oder VPN gefunden, die in Verbindung mit der Diskstation stehen. Die Diskstation wird deshalb nicht heruntergefahren'
STRING1="0"
fi

if [ "$STRING1" == '0' ]; then
echo 'DS wird nicht heruntergefahren'
sleep 5
exit
fi

# Jetzt noch die Abfrage ob ein Zugriff auf Samba Freigaben der DS erfolgt. Hier müsst ihr auch wieder den von euch gewünschten Ip-Bereich festlegen.

if [ "$(smbstatus -q|grep 192.168.1 )"  == '' ];
then
echo "Keine SAMBA Datei-Verbindung zur Diskstation offen = ok"
STRING2="1"
else echo "Es ist eine SAMBA Dateiverbindung mit der Diskstaion geoeffnet. DS wird nicht heruntergefahren."
STRING2="0"
fi

#Am Schluss die Berechnung ob die DS heruntergefahren werden soll oder nicht. Wenn ihr eines der Argumente oben rausnehmt oder ein weiteres hinzufügt müsst ihr das hier berücksichtigen.

let STRINGGESAMT="$STRING0 + $STRING1 + $STRING2"

if [ $STRINGGESAMT = 3 ];
then echo 'DIE DS WIRD NUN RUNTERGEFAHREN!'
"/sbin/poweroff"
sleep 10
else echo 'DIE DS WIRD ANBLEIBEN!'
fi
sleep 5

Bitte beachtet, das im Script einige IPs etc. an eure Umgebung angepasst werden müssen!

So therotsich können noch weiter Abfragen eingebaut werden.
Bei meiner netstat Abfrage habe ich meinen VPN Adressbereich noch nicht eingetragen, weil ich mir da Codetechnisch nicht sicher bin, wenn mir da jemand noch einen hinweis geben könnte wäre es toll. Es soll einfach zusätzlich zum Ip Bereich 192.168.x auch noch nach 10.0.x suchen.

Wie ich das mit dem selbst wieder aufrufen machen kann muss ich schauen, wäre ja doof wenn das Terminal dann solange offen bleiben würde.

Wenn ihr jetzt in Putty das entsprechend ind der authorized_keys fesgelegte Zertifikat angebt und euch damit auf die DS verbindet sollte euer Script ausgeführt werden.


Bin für weitere Verbesserungsvorschläge dankbar.

Grüße Wessix
 
Zuletzt bearbeitet:

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
Hier noch eine vom Code eine kürzere Version, wieder mal Besten Dank an jahlives!:

Rich (BBCode):
#!/bin/ash

# Die Erste Abfrage dient dazu zu klären ob ein Pyload download läuft, wenn ihr andere pyload Pfade habt müsst ihr das entsprechend anpassen. 
# Wenn ihr pyload nicht nutzt und diese abfrage nicht braucht könnt ihr 
# von hier bis zu netstat alles löschen.
 if [ -n "$(/opt/bin/python /opt/pyload/pyLoadCli.py status)" ]; then    
 echo "Download aktiv"
 echo 'DIE DS WIRD ANBLEIBEN!'
 sleep 5
 exit
fi

# Nun die Abfrage ob Clients aus dem angegebenen Ip Bereich mit der DS verbunden sind, je genauer Ihr den Ip Bereich angebt, 
# desto strenger wird die Abfrage.
# Man könnte also auch nur einen Pc z.b. 192.168.1.10 angeben. Ip muss an eure Bedürfnisse angepasst werden

netstat -n | grep -q -n 192.168.1
if [ $? -eq 0 ]; then
 echo 'Es wurden Pcs aus dem Heimnetzwerk oder VPN gefunden, die in Verbindung mit der Diskstation stehen. Die Diskstation wird deshalb nicht heruntergefahren'
 echo 'DIE DS WIRD ANBLEIBEN!'
 sleep 5
 exit
fi


# Jetzt noch die Abfrage ob ein Zugriff auf Samba Freigaben der DS erfolgt. Hier müsst ihr auch wieder den von euch gewünschten Ip-Bereich festlegen.

if [ "$(smbstatus -q|grep 192.168.1 )"  != '' ];
 echo "Es ist eine SAMBA Dateiverbindung mit der Diskstaion geoeffnet."
 echo 'DIE DS WIRD ANBLEIBEN!'
 sleep 5
 exit
fi

echo 'DIE DS WIRD NUN RUNTERGEFAHREN!'
sleep 5
/sbin/poweroff



Nun stehe ich noch vor dem Problem, dass ich erreichen möchte, dass ein User der sich über VPN eingeloggt hat die DS dann auch per Script runterfahren können soll, aber natürlich nicht wenn noch ein anderer user oder admin aus dem vpn oder lokal zugreift.
Hier gibt es nun das Problem, dass eine Http bzw https Verbindung nur eine kurze Zeit nach dem letzten Zugriff auf die ds in netstat angezeigt wird und auch somit die ip vom VPN wieder verschwindet. Da VPn über UDP läuft bekomme ich über die VPn Verbindung an sich auch nichts raus.
Das ist leider problematisch, so könnte es passierem, dass jemand eingeloggt ist, mal 1 oder 2 minuten nicht im dsm clickt und dann wird die DS runtergefahren.

Hat da jemand eine Idee? kann ich irgendwie mit :) relativ geringem aufwand per script auslesen ob jemand im dsm eingeloggt ist? Das würde schon reichen, müsste ja gar nicht mal wissen welche ip.
Also wenn jemand noch Tipps für dieses Problem hätte wäre ich dankbar.


Grüße Wessix
 

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
So mir ist mitlerweile die Idee gekommen, das user die über VPN im DSM eingeloggt sind, diesen Status evtl. auch manuel festhalten könnten und somit ein runterfahren der DS verhindern. Ich habe mal vor einiger Zeit mit Hilfe dieser Anleitung: http://www.synology-forum.de/showthread.html?6770-3rd-party-App-on-Desktop&p=44390&viewfull=1#post44390 eine Verknüpfung zum Webinterface von Pyload erstellt gehabt, diese erfüllt auch ihren Zweck. Allerdings wird darüber ja nur eine website aufgerufen.

Könnten man mit den entsprechenden Einstellungen in der desktop.cfg auch ein Shellscript aufrufen? Wenn ja, was müsste ich bei protocol etc eintragen?

Grüße Wessix
 

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
Hat keiner Ideen bezüglich der oben genannten Punkte? Wäre nach wie vor für Hilfe dankbar.

Da sich die status Ausgabe der PyLoadCli.py anscheinend mit einer neueren Version geändert hat muss das Script etwas angepasst werden. hier der neue Code, der alte steht noch mit drin.

Rich (BBCode):
#!/bin/ash

#if [ -z "$(/opt/bin/python2.5 /opt/pyload/pyLoadCli.py status)" ]; then
if [ "$(/opt/bin/python2.5 /opt/pyload/pyLoadCli.py status)"  == 'No downloads running.' ];
then
echo "Kein Download = ok"
STRING0="1"
else
echo "Download aktiv"
STRING0="0"
fi

if [ "$STRING0" == '0' ]; then
echo 'DS wird nicht heruntergefahren, es ist ein Download aktiv.'
sleep 5
exit
fi

netstat -n | grep -q -n 192.168.2
if [ $? -ne 0 ];
then
echo 'Es wurden keine PCs aus dem Heimnetzwerk oder VPN gefunden, die mit der Diskstation verbunden sind = ok'
STRING1="1"
else
echo 'Es wurden Pcs aus dem Heimnetzwerk oder VPN gefunden, die in Verbindung mit der Diskstation stehen. Die Diskstation wird deshalb nicht heruntergefahren'
STRING1="0"

fi

if [ "$STRING1" == '0' ]; then
echo 'DS wird nicht heruntergefahren'
sleep 5
exit
fi

if [ "$(smbstatus -q|grep 192.168.2 )"  == '' ];
then
echo "Keine SAMBA Datei-Verbindung zur Diskstation offen = ok"
STRING2="1"
else echo "Es ist eine SAMBA Dateiverbindung mit der Diskstaion geoeffnet. DS wird nicht heruntergefahren."
STRING2="0"

fi

let STRINGGESAMT="$STRING0 + $STRING1 + $STRING2"

if [ $STRINGGESAMT = 3 ];
then echo 'DIE DS WIRD NUN RUNTERGEFAHREN!'

Grüße Wessix
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat