ubuntuusers.de

loop device without root permissions

Status: Gelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

Krümelomat

Avatar von Krümelomat

Anmeldungsdatum:
18. Oktober 2010

Beiträge: 1120

Guten Tag, wie kann ich ein Loop Laufwerk mittels Script aus einer Containerdatei laden, ohne den Befehl "su" verwenden zu müssen?

http://wiki.ubuntuusers.de/LUKS/Containerdatei (Skripte ganz unten)

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21834

Wohnort: Lorchhausen im schönen Rheingau

Mit sudo. geht auch in Skripten ohne Passworteingabe, siehe sudo/Konfiguration

Krümelomat

(Themenstarter)
Avatar von Krümelomat

Anmeldungsdatum:
18. Oktober 2010

Beiträge: 1120

Ok hab das jetzt so gelöst dass ich einfach vor die Befehle sudo gesetzt habe:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
CRYPTNAME=container
MNT=/Pfad/zum/Mointpoint
FS=ext4
LOOPDEV=`sudo losetup -f`

if [ "`sudo losetup -a | grep -c "$SAFE"`" != "0" ]; then
        echo "bereits eingehängt"
        exit
fi

sudo losetup $LOOPDEV $SAFE
sudo cryptsetup luksOpen $LOOPDEV $CRYPTNAME
sudomount -t $FS /dev/mapper/$CRYPTNAME $MNT

Gibt es eine Möglichkeit den Loop Luks Container per Starter mit einem Klick einzubinden, so dass nur eine Passwortabfrage des Containers kommt und ich KEIN root Kennwort brauche?

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21834

Wohnort: Lorchhausen im schönen Rheingau

*seufz*

Krümelomat schrieb:

Gibt es eine Möglichkeit den Loop Luks Container per Starter mit einem Klick einzubinden, so dass nur eine Passwortabfrage des Containers kommt und ich KEIN root Kennwort brauche?

redknight schrieb:

Mit sudo. geht auch in Skripten ohne Passworteingabe, siehe sudo/Konfiguration

Den zweiten Link hab ich nicht zum Spaß dazugeschrieben oder weil Links in Beiträgen professionell wirken. Da steht genau das drin, was Du jetzt suchst. Lies nochmal den Punkt "Einstellungen".

Krümelomat

(Themenstarter)
Avatar von Krümelomat

Anmeldungsdatum:
18. Oktober 2010

Beiträge: 1120

Danke dass du dir die Zeit genommen hast. Also ich komme mit diesen Einträgen nicht zurecht

sudo visudo
%users ALL=NOPASSWD: /order/script

dann abmelden, anmelden, doppelklick auf Script, im Terminal ausführen, funktioniert nicht, es schließt sich blitzschnell. Normal müsste dann "geben sie den Passsatz ein" als Ausgabe kommen.

(2) Hab auch in Benutzer und Gruppen die Gruppe "luks" hinzugefügt und bei "Nutzer" nen Haken reingemacht und dann

sudo visudo
%luks ALL=NOPASSWD: /order/script

probiert.

Das ganze hab ich auch mit und ohne sudo vor den relevanten Programmaufrufen im Script getestet. Alles ohne Erfolg.

Nur ein Erfolg mit (2) war, dass ich wenn ich im Ordner mit dem Skript den Terminalaufruf "sudo ./script" getätigt habe, dann alles so lief wie vorgesehen. Nur ich möchte nicht das Terminal dort öffnen müssen sowie den Befehl eingeben, sondern einfach nur auf das Script Doppelklicken und dann bei der Abfrage "Im Terminal ausführen" anklicken können.

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21834

Wohnort: Lorchhausen im schönen Rheingau

Ok, dann hast Du das wesentliche beachtet und einfach nur ein Verständnisproblem: Du musst in dem Fall die Befehle, die Du verwendest, also losetup und cryptsetup als erlaubte Befehle hinterlegen. Du hast hinterlegt, dass dein Skript ohne Passworteingabe mit sudo laufen darf, dann zeiht als nächstes die Regel dass root alles ohne Passworteingabe darf 😉

Nebenbei, deine if-Condition ist unnötig komplex:

1
2
3
4
5
if sudo losetup -a | grep -q "$SAFE"
then
        echo "bereits eingehängt"
        exit
fi

Ich habe grad nichts zum loopen zur Hand, aber das könnte sogar ohne sudo klappen.

Krümelomat

(Themenstarter)
Avatar von Krümelomat

Anmeldungsdatum:
18. Oktober 2010

Beiträge: 1120

losetup ist ein sudo Befehl.

#includedir /etc/sudoers.d
%luks ALL=(root) NOPASSWD: /bin/umount
%luks ALL=(root) NOPASSWD: /sbin/cryptsetup luksClose
%luks ALL=(root) NOPASSWD: /sbin/losetup
%luks ALL=(root) NOPASSWD: /order/script
lubuntu  ALL=(ALL) NOPASSWD: ALL

hab auch

%luks ALL=NOPASSWD:

probiert. Beim Ausführen des Skripts ./script kommen immer nur Meldungen, dass root Rechte von Nöten sind. Bei "sudo ./script" funktioniert alles wie es sollte.

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21834

Wohnort: Lorchhausen im schönen Rheingau

Bitte jetzt mal vollständige Angaben:

  • sudoers

  • Welche user führt das Skript aus?

    • id $USER

      für den ausführenden Nutzer

  • dein vollständiges Skript, falls das oben nicht vollständig war

Krümelomat

(Themenstarter)
Avatar von Krümelomat

Anmeldungsdatum:
18. Oktober 2010

Beiträge: 1120

Habs gelöst mit folgendem Workaround:

Vorbereitungen:

sudo apt-get install cryptsetup

Benutzer und Gruppen: neue Gruppe: "luks" ; "luks" Benutzer anhaken.

sudo visudo

unter:

#includedir /etc/sudoers.d
%luks ALL=(root) NOPASSWD: /sbin/losetup

hinzufügen. (LiveCD bereithalten und vorher eine Kopie von /etc/sudoers anlegen falls was schiefgeht zurückkopieren)

Containerdatei einrichten:

dd if=/dev/urandom of=_Containername_ bs=1M count=_250_
(Größe in MB 250)
sudo losetup /dev/loop0 "Containername"
(evtl. losetup -f um freie Device abzufragen loop1 loop2...)
sudo cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/loop0
sudo cryptsetup luksOpen /dev/loop0 "Containername"
(mount nach /dev/mapper/)
sudo mkfs -t ext4 -L _LABEL_  /dev/mapper/"Containername"
sudo cryptsetup luksClose "Containername"
sudo losetup -d /dev/loop0

Skript zum Einhängen:

sudo losetup /dev/loop0 /ort/"Containername"

(In Nautilus erscheint dann die Loop Device, man kann sie nun anklicken und Nautilus fragt automatisch den Passsatz ab und hängt die Luks Device ein.

Script zum Aushängen der Loop Device: (nachdem man in Nautilus die Luks Device ausgehangen hat)

sudo losetup -d /dev/loop0

Auf die Skripte kann man nun einen benutzerdefinierten Anwendungsstarter deuten lassen, dann passiert das ganze per Klick aus dem Panel.

Skript zum manuellen mounten, kann mit automatsicher loop Zuweisung aus http://wiki.ubuntuusers.de/LUKS/Containerdatei kombiniert werden:

sudo losetup /dev/loop0 /ort/"Containername"
sudo cryptsetup luksOpen /dev/loop0 "Containername"
sudo mkdir /media/"Containername"
sudo mount /dev/mapper/"Containername" /media/"Containername"
sudo umount /media/"Containername"
sudo cryptsetup luksClose "Containername"
sudo rm -r /media/"Containername"
sudo losetup -d /dev/loop0
Antworten |