Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index International Gentoo Users Deutsches Forum (German) Deutsche Dokumentation
  • Search

[Mini-Howto] dm-crypt verschlüsseltes /home: initscript

Dokumentation, Tipps und Tricks.
Post Reply
  • Print view
Advanced search
7 posts • Page 1 of 1
Author
Message
Moorenkopf
Apprentice
Apprentice
Posts: 189
Joined: Sun Apr 18, 2004 12:44 pm
Location: NRW

[Mini-Howto] dm-crypt verschlüsseltes /home: initscript

  • Quote

Post by Moorenkopf » Mon Apr 03, 2006 11:59 pm

Hi,
ich habe meine /home-Partition mit dm-crypt und luks verschlüsselt und will anderen nicht vorenthalten, wie ich das mounten und umounten automatisiert habe. (Hier der Thread zu dem Problem, was ich hatte: http://forums.gentoo.org/viewtopic-p-3228740.html)

Die Howtos, mit denen ich dm-crypt, luks und das (mein erstes :D) Bask-Script an's Laufen bekommen hab':
http://de.gentoo-wiki.com/DM-Crypt
http://gentoo-wiki.com/SECURITY_System_ ... _with_LUKS
http://gentoo-wiki.com/TIP_Script_to_un ... sy_Devices

Die Kurzfassung der Installation von dm-crypt:
# /sbin/badblocks -c 10240 -s -w -t random -v /dev/sda4
Kernel vorbereiten
Module laden
# modprobe dm-crypt
# modprobe sha256
# modprobe blowfish (oder: aes)
# echo dm-crypt >> /etc/modules.autolaod.d/kernel-2.6
# emerge -p cryptsetup-luks
# /bin/cryptsetup -c blowfish-cbc-essiv:sha256 -y -s 256 luksFormat /dev/sda4
# /bin/cryptsetup luksOpen /dev/sda4 localcrypt
# mkreiserfs /dev/mapper/localcrypt
# mount -t reiserfs /dev/mapper/localcrypt /mnt/localcrypt
nach dem umounten: # /bin/cryptsetup luksClose localcrypt
erneutes öffnen:
# /bin/cryptsetup luksOpen /dev/sda4 localcrypt
# mount -t reiserfs /dev/mapper/localcrypt /mnt/localcrypt
/etc/fstab:
/dev/mapper/localcrypt /home reiserfs noatime,noauto 0 0
Automatisches mounten:
Dazu verwende ich local.start und local.stop aus /etc/conf.d.

local.start

Code: Select all

/bin/cryptsetup luksOpen /dev/sda4 localcrypt && mount /home
local.stop

Code: Select all

#moo_umount
  #Quelle der Schleifenbedingung (wie gesagt, mein erstes Bashscript): http://gentoo-wiki.com/TIP_Script_to_unmount_Busy_Devices

  #Mountpoint
  mntp=/home
  #sleep
  sec=5
  #Versuche bis zum fuser -ki $mntp
  max_count=8

  count=0

  umountret=`umount $mntp 2>&1`
  while [ `echo $umountret | grep busy | wc -l` -gt 0 ]; do
    let count=count+1
    echo "moo_umount $mntp: Try No. $count"
    if [ $count == $max_count ];
    then
      fuser -ki $mntp 2>&1
      count=0;
    fi
    echo "moo_umount $mntp: Device busy -> sleep $sec"
    sleep $sec 2>&1
    umountret=`umount $mntp 2>&1`
  done

  echo "moo_umount $mntp: Successfully umounted $mntp"
  /bin/cryptsetup luksClose localcrypt
Das Script in local.stop versucht immer $max_counts mal ein normales "umount $mntp", schlägt dies fehl, so wird "fuser -ki $mntp" ausgeführt, was alle Prozesse die noch auf den Mountpoint zugreifen beenden sollte.
Nach jedem Versuch wird $sec Sekunden pausiert, weil sich (zumindest bei mir) alle Prozesse nach kurzer Zeit von selbst beenden.

Ein "cd /" vor dem herunterfahren macht sich übrigens auch gut (Stichwort: alias).

Ich hoffe ich konnte helfen, Moorenkopf
Last edited by Moorenkopf on Tue Apr 11, 2006 7:43 pm, edited 1 time in total.
Top
Perfect_P
Tux's lil' helper
Tux's lil' helper
User avatar
Posts: 103
Joined: Thu Apr 21, 2005 9:57 pm

  • Quote

Post by Perfect_P » Tue Apr 11, 2006 8:55 am

hi,
cooles HowTo. Ich persönlich fänds aber geschickter dass ganze mit nem init.d-File zu realisieren. Hab hier mal dien script in ein init-file ebastelt. Außerdem hab ich am anfang noch ne schleife reingeschrieben. Dies soll verhindern, dass der PC auch bei falschem passwort weiterbootet. Wer dass nicht will, einfach die while schleife löschen. Hier ist das script:

Code: Select all

#!/sbin/runscript

# Vars
mapdevice=system2;
mntpnt=/mnt/system2;
mntdev=/dev/sda6;
#sleep
sec=5;
#Versuche bis zum fuser -ki $mntp
max_count=8;


start() {
        ebegin "Mounting LUKS loopback device ...";
        sleep 1;
        cryptsetup -y luksOpen $mntdev $mapdevice;
        while test $? -ne 0; do
          cryptsetup -y luksOpen $mntdev $mapdevice
        done

        mount -t ext3 /dev/mapper/$mapdevice $mntpnt;
        eend $?;
}
stop() {
        ebegin "Unmounting LUKS loopback device ...";
        count=0

        umountret=`umount $mntpnt 2>&1`
        while [ `echo $umountret | grep busy | wc -l` -gt 0 ]; do
          let count=count+1
          einfo "$mntpnt: Try No. $count"
          if [ $count == $max_count ];
          then
            fuser -ki $mntpnt 2>&1
            count=0;
          fi
          einfo "$mntpnt: Device busy -> sleep $sec"
          sleep $sec 2>&1
          umountret=`umount $mntpnt 2>&1`
        done

        einfo "$mntpnt: Successfully umounted $mntpnt"
        /bin/cryptsetup luksClose $mapdevice;
        eend $?;
}
Wenn jemand ein eleganter oder besseres script hat, nur her damit. Natürlich übernehmen ich keinerlei Garantie für das Script ;-) .

das ganze könnt ihr dann mit

Code: Select all

rc-update add luks_mount default
automatisch starten lassen.

Noch einkleiner Zusatz zum HowTo: Wenn man nicht ne ganze Partition verschlüsseln will, kann man auch nur eine Containerdatei mit LUKS verschlüsseln (luks ist installiert & funktioniert):
1) Einer Containerdatei erzeugen und deren Größe festlegen:

Code: Select all

touch protected
shred -n1 -s50M protected
2) Eine loopbackdevice erstellen (wenn loop0 schon vergeben ist, nehmt eine andere Nummer):

Code: Select all

losetup /dev/loop0 /path/to/protected
3) Der Rest ist wie beim HowTo:
Formatieren:

Code: Select all

/bin/cryptsetup -c aes-cbc-essiv:sha256 -y -s 256 luksFormat /dev/loop0
Öffnen & Mounten:

Code: Select all

/bin/cryptsetup luksOpen /dev/loop0 localcrypt && mount /dev/mapper/localcrypt /mnt/localcrypt

....
(Quelle: http://gentoo-wiki.com/SECURITY_dmcrypt ... ack_device)

mfg
Top
Moorenkopf
Apprentice
Apprentice
Posts: 189
Joined: Sun Apr 18, 2004 12:44 pm
Location: NRW

  • Quote

Post by Moorenkopf » Tue Apr 11, 2006 7:42 pm

Ist in der Tat eine schöne Sache so als initscript, danke.
Hab' da aber trotzdem noch was dran verändert :D :
Aus
cryptsetup -y luksOpen $mntdev $mapdevice;
hab' ich
/bin/cryptsetup luksOpen $mntdev $mapdevice;
gemacht. Das y-Flag ist überflüssig (wenn nicht bitte melden :) ).
mount -t ext3 /dev/mapper/$mapdevice $mntpnt;
wird zu
mntfs=reiserfs;
mount -t $mntfs /dev/mapper/$mapdevice $mntpnt;
, ich hab' schließlich kein ext3 ;)

Und was man vielleicht auch noch erwähnen sollte, vor dem rc-update muss das Script ausführbar sein:

Code: Select all

# chmod +x /etc/init.d/luks_mount
# rc-update add luks_mount default
So, das waren erstmal meine Änderungen, wenn ich aus Italien zurück bin fällt mir vielleicht noch mehr ein, als bis dann, Moorenkopf


/etc/init.d/luks_mount

Code: Select all

#!/sbin/runscript

# Vars
mapdevice=localcrypt;
mntpnt=/home;
mntdev=/dev/sda4;
mntfs=reiserfs;
#sleep
sec=5;
#Versuche bis zum fuser -ki $mntp
max_count=8;


start() {
        ebegin "Mounting LUKS loopback device";
        sleep 1;
        /bin/cryptsetup luksOpen $mntdev $mapdevice;
        while test $? -ne 0; do
          /bin/cryptsetup luksOpen $mntdev $mapdevice
        done

        mount -t $mntfs /dev/mapper/$mapdevice $mntpnt;
        eend $?;
}
stop() {
        ebegin "Unmounting LUKS loopback device";
        count=0

        umountret=`umount $mntpnt 2>&1`
        while [ `echo $umountret | grep busy | wc -l` -gt 0 ]; do
          let count=count+1
          einfo "$mntpnt: Try No. $count"
          if [ $count == $max_count ];
          then
            fuser -ki $mntpnt 2>&1
            count=0;
          fi
          einfo "$mntpnt: Device busy -> sleep $sec"
          sleep $sec 2>&1
          umountret=`umount $mntpnt 2>&1`
        done

        einfo "$mntpnt: Successfully umounted $mntpnt"
        /bin/cryptsetup luksClose $mapdevice;
        eend $?;
}
Last edited by Moorenkopf on Mon Apr 24, 2006 10:41 am, edited 1 time in total.
Top
Perfect_P
Tux's lil' helper
Tux's lil' helper
User avatar
Posts: 103
Joined: Thu Apr 21, 2005 9:57 pm

  • Quote

Post by Perfect_P » Wed Apr 12, 2006 9:12 am

Moorenkopf wrote:Ist in der Tat eine schöne Sache so als initscript, danke.
Hab' da aber trotzdem noch was dran verändert :D :
Aus
cryptsetup -y luksOpen $mntdev $mapdevice;
hab' ich
/bin/cryptsetup luksOpen $mntdev $mapdevice;
gemacht. Das y-Flag ist überflüssig (wenn nicht bitte melden :) ).
Nein, du hast recht -y ist bei DM-crypt nötig, nciht bei LUKS. DAs kommt davon wenn man 10Tabs im Beowser offen hat :)
Moorenkopf wrote:
mount -t ext3 /dev/mapper/$mapdevice $mntpnt;
wird zu
mntfs=reiserfs;
mount -t $mntfs /dev/mapper/$mapdevice $mntpnt;
, ich hab' schließlich kein ext3 ;)
gute Idee


mfg
Top
Roc
n00b
n00b
Posts: 35
Joined: Fri Jul 19, 2002 1:22 pm

  • Quote

Post by Roc » Tue May 30, 2006 2:39 pm

Ich habe das ganze hier bei mir auch soweit recht gut ans laufen bekommen, allerdings gibt es noch ein kleines Problem.

Ich möchte z.B. auch die Apache-DocRoot oder die MySQL-DB auf die verschlüsselte /home- Partition bringen. Dazu ist es erforderlich, dass /etc/init.d/luks_mount auf jeden Fall ausgeführt wird, bevor Apache, MySQL und dergleichen gestartet werden.

Dazu habe ich das Initscript anstatt in den Runlevel default in den den runlevel boot eingetragen. Beim Starten klappt das auch schon wie gewünscht. Beim Shutdown wird jedoch /home geunmountet bevor die abhängigen Dienste gestoppt werden.

Eigentlich müsste sich da doch über einen Eintrag depend() am Anfang des Skripts das gewünschte Verhalten erreichen lassen, oder? Habe das auch schon mit verschiedenen Optionen versucht, aber irgendwie klappt es nicht wie erwartet.

Jemand eine Idee?
Top
Moorenkopf
Apprentice
Apprentice
Posts: 189
Joined: Sun Apr 18, 2004 12:44 pm
Location: NRW

  • Quote

Post by Moorenkopf » Tue May 30, 2006 4:07 pm

Habe das noch nie gemacht, aber eigentlich reicht doch ein Blick auf /etc/init.d/apache:
depend() {
need net
use mysql dns logger netmount postgresql
after sshd
}
Wenn man das umändert in sowas, wie
depend() {
need apache
}
und in luks_mount einbaut sollte das doch kein Problem darstellen.

Gruß, Stefan
Top
Roc
n00b
n00b
Posts: 35
Joined: Fri Jul 19, 2002 1:22 pm

  • Quote

Post by Roc » Tue May 30, 2006 9:27 pm

depend() {
need apache
}
Also wenn ich das richtig verstehe, bewirkt dieser Eintrag genau das Umgekehrte, d.h. luks_mount "benötigt" apache und startet diesen zuerst. Ich habe es auch schon mit "before apache" versucht, aber das klappt leider auch nicht, da das unmounten vor dem Beenden des Apache stattfindet.

Optimal wäre es, wenn man die Abhängigkeit so definieren könnte, das Mount und Unmount unmittelbar vor/nach dem "normalen" Filesystem-Mount der fstab erfolgen.
Top
Post Reply
  • Print view

7 posts • Page 1 of 1

Return to “Deutsche Dokumentation”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy

 

 

magic