Zielsetzung:
Einen Internet-Browser über einen ganz normalen Desktop-Starter in einem neu zu startenden minimalen Debian (ohne Desktop-Environment) innerhalb einer virtuellen Maschine ausführen, um dann mit diesem Browser mit einem unprivilegierten User in einer vom normalen Heimnetzwerk und den privaten Daten des Anwenders getrennten und somit isolierten Umgebung im Internet zu surfen. Ein paar weitere ausführlichere Ausführungen zu meiner Motivation und den Grund für dieses Vorhaben findet man in diesem Thread.
Voraussetzungen:
Da für die neue Mini-Debian-Installation ein VDI-File (Virtuelles Harddisk-Image) notwendig ist und die Installation über „debootstrap“ erfolgt, muss entweder eine schon laufende Debian-VM verfügbar sein oder es muss ein Loop-Device für VDI-Images installiert werden, um die virtuelle Harddisk regulär zu mounten. Ich ralisiere das durchzuführende Setup der neuen VM hier über eine schon vorhandene Debian-VM, die bei mir mit Jessie und Xfce als Desktop schon seit einiger Zeit läuft.
Vorbereitungen:
Meine neue Mini-Debian-Installation zum Surfen im Internet soll den Namen „Surfer“ bekommen. Dazu als erstes das VBox-Manager-GUI öffnen und eine neue VM anlegen und Name, Typ und Version der neuen VM eingeben.
Im nächsten Dialog wird der verfügbare Speicher festgelegt, in Abhängigkeit von der Größe des im Rechner installierten Speichers. Ich wähle bei mir immer 4096 MB, da ich 8 GB zur Verfügung habe und bisher keine Engpässe bemerkt habe.
Im dritten Dialog wird die Art der virtuellen Festplatte bestimmt, sowie deren Größe festgelegt. Da ich in dieser Installation wirklich nichts zusätzliches außer dem Browser und dafür notwendige Zusatzprogramme (Flash, Soundmixer) installiere, reichen bei mir 2 GB als feste (!)
Größe. Hinzu kommt, dass mich speziell bei dieser Art einer VM die Systemlogs nicht interessieren und ich das Schreiben dieser Logs deshalb kurzerhand nach tempfs gemountet habe. Das bedeutet, sie wachsen in dieser (kleinen) virtuellen Harddisk nicht immerfort, sind aber auch nur eingeschränkt bei der Fehlersuche verfügbar, da sie nach dem Schließen der VM einfach vergessen werden.
Mit diesen drei Schritten ist die neue VM erzeugt. Meistens führe ich auch sofort noch ein paar weitere Einstellungen im Vbox-Manager durch: 2 Prozessoren, 64 MB Grafikspeicher, bidirektionale Zwischenablage, keine Diskette.... aber das war es dann auch schon.
Installation:
Wie bereits erwähnt, führe ich das Setup mithilfe meiner bereits vorhandenen Xfce-VM aus. Bevor ich diese VM jedoch starte, ist vorher im VBoxManager-GUI eine kleine Einstellung notwendig, und zwar die temporäre Einbindung der gerade zuvor erstellten und der neuen VM gehörenden Surfer.vdi. Ich öffne dazu also den „Massenspeicher-Dialog“ und füge zur bestehenden xfce.vdi (bei mir heißt die so) einen neuen Sata-Controller hinzu. Dann wähle ich FileDialog-geführt die soeben erstellte Surfer.vdi aus und starte die Xfce-VM, sobald sie Harddisk hinzugefügt ist.
Nun führe ich das Setup entsprechend des folgenden „Drehbuchs“ durch.
HowTo: Minimal-Debian-Installation mit debootstrap + Openbox
HowTo: Minimal-Debian-Installation mit debootstrap + Openbox
Zuletzt geändert von TomL am 28.10.2015 12:51:39, insgesamt 1-mal geändert.
Re: HowTo: Minimal-Debian-Installation mit debootstrap + Ope
Setup Debian-Grundsystem ohne Desktop-Environment auf zweite (!) Festplatte installieren, hier: /dev/sdb
Code: Alles auswählen
blkid // Check: Name = /dev/sdb?
df -h // Check: Gemountet? umount!
mkfs.ext4 /dev/sdb1 // Check: Leer+ext4=ok? Probleme? Mit GParted löschen, neu anlegen
[ ! -d /media/sdb ] && mkdir /media/sdb // Zielverzeichnis für "neues" Debian erstellen
mount /dev/sdb1 /media/sdb -t ext4
df -h // Check: Gemountet?
debootstrap --arch i386 jessie /media/sdb http://ftp.de.debian.org/debian
debootstrap --arch amd64 jessie /media/sdb http://ftp.de.debian.org/debian
ls /media/sdb // Check! Sichtkontrolle
mkdir /media/sdb/proc && mkdir /media/sdb/dev && mkdir /media/sdb/sys // Sofern nach debootstrap nicht vorhanden!
cat /proc/mounts | grep sdb // Check! Sichtkontrolle
mount --bind /proc /media/sdb/proc
mount --bind /dev /media/sdb/dev
mount --bind /sys /media/sdb/sys
cat /proc/mounts | grep sdb // Check! Gemountet?
chroot /media/sdb
nano /etc/apt/sources.list // Append: non-free contrib
apt-get update
apt-get install console-data console-common locales keyboard-configuration
dpkg -l tzdata locales
apt-get install tzdata locales // nur fehlende !!!
apt-get install linux-image-586 -s // Check! Simulation (Info)
apt-get install linux-image-586 // Kernel für ältere PC (empfohlen!)
apt-get install linux-image-586 --no-install-recommends // oder: ohne recommends
apt-get install linux-image-686-pae // oder: alternativ Kernel mit Physical-Adress-Extension
passwd // root-PWD setzen. Achtung: Ggf. noch US-Tastatur y=z, z=y
cat /etc/fstab // Check! leer = ok
echo "proc /proc proc defaults 0 0" >>/etc/fstab // nano /etc/fstab
echo "sysfs /sys sysfs defaults 0 0" >>/etc/fstab
blkid // Get UUID
echo "UUID=????? / ext4 errors=remount-ro 0 1" >>/etc/fstab // replace ????? mit UUID
cat /etc/fstab // Check: Sichtkontrolle
dpkg -l grub* // Check! Installiert? Nein = ok
apt-get install grub2 // führt grub-install automatisch aus, ansonsten:
grub-install /dev/sdb // manuell in chroot oder
grub-install /dev/sdb --root-directory=/media/sdb // nach verlassen chroot mit exit
exit // chroot beenden
/----------------------------------------------------------------------------------------------------------------------
Vorbereitendes Customizing. Hier -vor Neustart- weil in VM keine Copy/Paste-Unterstützung u. DE-Keyboard verhanden ist
Disable Recommends, sofern gewünscht:
echo 'APT::Install-Recommends "0";' >/media/sdb/etc/apt/apt.conf // Geprüft! Ist in Jessie wirksam
echo 'APT::Install-Suggests "0";' >>/media/sdb/etc/apt/apt.conf
cat /etc/apt/apt.conf // oder:
echo 'APT::Install-Recommends "0";' >/media/sdb/etc/apt/apt.conf.d/98nosuggests
echo 'APT::Install-Suggests "0";' >>/media/sdb/etc/apt/apt.conf.d/98nosuggests
cat /etc/apt/apt.conf.d/98nosuggests
Netzwerk:
nano /media/sdb/etc/hostname // Set Hostname
NEUER_NAME // add
nano /media/sdb/etc/hosts
127.0.0.1 localhost.localdomain NEUER_NAME // replace
nano /media/sdb/etc/network/interfaces // add
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
auto eth0
iface eth0 inet dhcp
shutdown -h now // Ausführende produktive VM schließen
//======================================================================================================================
Neu-Installierte VM starten, System-Customizing durchführen:
dpkg-reconfigure tzdata // Europe, Berlin
dpkg-reconfigure locales // de.de utf8
dpkg-reconfigure console-data // Select Keymap f. Arch.l.: qwertz,german,standard,latin1
dpkg-reconfigure keyboard-configuration // immer default, Right-Alt = AltGR, No Compose-Key
dpkg-reconfigure console-common
shutdown -r now // locales + Keyboard 'aktivieren'
ifconfig // Connect?
ifup eth0 // Nein, dann manuell starten
//----------------------------------------------------------------------------------------------------------------------
apt-get install xserver-xorg xinit // XWindow-API
apt-get install build-essential linux-headers-$(uname -r) // VBoxLinuxAdditions-Setup
apt-get install openbox lxterminal idesk x11-xserver-utils fbpanel // OpenBox-Setup
mkdir /media/cdrom
mount /dev/cdrom /media/cdrom
sh /media/cdrom/VBoxLinuxAdditions.run // Installation der Gasterweiterungen
shutdown -r now // VBoxAdditions 'aktivieren'
//======================================================================================================================
VM Client-Customizing:
startx // GUI-Desktop starten = Vollbild-Unterstützung
// u. Copy/Paste-Funktion. Rechts-Click=Terminal
apt-get install mc sudo cifs-utils // Filemanager, root-Autorisierung, Samba
apt-get install libdbus-glib-1-2 libasound2 // Palemoon
dpkg -l flashplugin-nonfree pavucontrol pulseaudio // Check!
apt-get install flashplugin-nonfree pavucontrol pulseaudio // nur fehlende !!!
nano /etc/default/grub // edit: GRUB_TIMEOUT=1
update-grub
visudo // add:
User_Alias EXTRAPERMISSIONS = thomas, inet
EXTRAPERMISSIONS ALL=(ALL)NOPASSWD:/usr/local/bin/mountctrl
//----------------------------------------------------------------------------------------------------------------------
Spezielles "persönliches" Customizing, wie z.B. das oben erwähnte "varlog" und mountctrl als Ersatz f. fstab
mount -t cifs -o username=thomas,password=***** //10.10.1.2/HD_1 /mnt
Copy Icons: /usr/local/share/Icons // Desktop-Starter-Icons
Copy Scripts: /usr/local/bin // mountctrl, mount varlog -> tempfs
Copy Systemd-Unit: /etc/systemd/systemd // mountctrl.service, varlog-service
chown -R root:root /usr/local/share/Icons
chown -R root:root /usr/local/bin
chown -R root:root /etc/systemd/system
adduser thomas // Benutzerverwaltung
adduser inet
addgroup downloaduser
adduser thomas downloaduser
adduser thomas inet
adduser inet downloaduser
echo -e "username=thomas\npassword=*****">/home/thomas/.smbcredentials
chmod 600 /home/thomas/.smbcredentials && chown thomas:thomas /home/thomas/.smbcredentials
mkdir /media/HD_1 && mkdir /media/Downloads && mkdir /media/Install // Fehlende Verzeichnisse anlegen
chown -R thomas:thomas /home/thomas
chown -R inet:inet /home/inet
systemctl enable mountctrl.service
systemctl enable varlog.service
//----------------------------------------------------------------------------------------------------------------------
Disable Recommends entfernen
[ -f "/etc/apt/apt.conf" ] && rm /etc/apt/apt.conf
[ -f "/etc/apt/apt.conf.d/98nosuggests" ] && rm /etc/apt/apt.conf.d/98nosuggests
shutdown -r now
//======================================================================================================================
Zuletzt geändert von TomL am 28.10.2015 17:13:40, insgesamt 5-mal geändert.
Re: HowTo: Minimal-Debian-Installation mit debootstrap + Ope
Als letztes fehlt noch die grundsätzliche OpenBox-Konfiguration, 4 Desktop-Starter und der Autostart des User "inet"
/home/inet/.idesktop/palemoon.lnk
/home/inet/.idesktop/lxterminal.lnk
/home/inet/.idesktop/pavucontrol.lnk
/home/inet/.idesktop/mountctrl_poweroff_helper.lnk
Code: Alles auswählen
mkdir ~/.config/openbox
nano ~/.config/openbox/autostart // add:
idesk &
fbpanel &
xsetroot -solid '#23382F' & // Grün
xsetroot -solid '#2D5297' & // oder Blau
xsetroot -solid '#0A1D43' & // oder Tiefdunkelblau (eine (!) Farbeinstellung auswählen)
nano ~/.config/fbpanel/default // Selektiv editieren!
widthtype = percent
width = 100
roundcorners = false
Menu:
# action = sudo shutdown -h now
action = lxterminal -e "sudo /usr/local/bin/mountctrl poweroff"
Plugin {
type = launchbar
config {
button {
image = /usr/local/share/Icons/totalcommander.png
tooltip = MidnightCommander
action = lxterminal -e /usr/bin/mc
}
button {
image = /usr/local/share/Icons/terminal.png
tooltip = Terminal
action = /usr/bin/lxterminal
}
button {
image = /usr/local/share/Icons/palemoon3.png
tooltip = web-browser
action = /opt/palemoon/palemoon
}
}
}
#plugin {
# type = volume
#}
# Digital Clock
#Plugin {
# type = dclock
# config {
# ShowSeconds = false
# HoursView = 24
# TooltipFmt = %A %x
# #Action = xmessage Please define some command &
# }
#}
Plugin {
type = tclock
config {
# 2 line view, time in bold above and date below
# 21:10:42
# 2015 Oktober 25 Sonntag
# ClockFmt = <span font="Sans 10" color="darkblue">%-H:%M:%S %P
%Y %B %e %-A</span>
# 21:42:10
ClockFmt = <span font="Sans 12, bold" color="darkblue">%-H:%M:%S </span>
TooltipFmt = %A %x
#Action =
ShowCalendar = true
ShowTooltip = true
}
}
//--------------------------------------------------------------------------------------------------------------------------------------
Code: Alles auswählen
mkdir /etc/systemd/system/getty@tty1.service.d // automatic login via systemd
nano /etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin "inet" %I
nano /etc/profile
if [ "$(tty)" = "/dev/tty1" ]; then // in /etc/profile "startx" automatisieren. Eintrag hinzugefügen.
startx
logout
fi
shutdown -r now
//--------------------------------------------------------------------------------------------------------------------------------------
Code: Alles auswählen
table Icon
Caption: Palemoon
ToolTip.Caption: Palemoon - WebBrowser
Command: /opt/palemoon/palemoon
Icon: /usr/local/share/Icons/palemoon.png
Width: 32
Height: 32
X: 74
Y: 116
end
Code: Alles auswählen
table Icon
Caption: Terminal
ToolTip.Caption: Terminal-Emulator
Command: lxterminal
Icon: /usr/local/share/Icons/terminal.png
Width: 32
Height: 32
X: 74
Y: 216
end
Code: Alles auswählen
table Icon
Caption: Sound-Control + Mixer
ToolTip.Caption: Sound-Control + Mixer
Command: /usr/bin/pavucontrol
Icon: /usr/local/share/Icons/speakerctrl2.png
Width: 32
Height: 32
X: 239
Y: 116
end
Code: Alles auswählen
table Icon
Caption: Shutdown
ToolTip.Caption: Shutdown-Helper
Command: lxterminal -e "sudo /usr/local/bin/mountctrl poweroff"
Icon: /usr/local/share/Icons/poweroff.png
Width: 32
Height: 32
X: 84
Y: 774
end
Zuletzt geändert von TomL am 28.10.2015 17:04:25, insgesamt 2-mal geändert.
Re: HowTo: Minimal-Debian-Installation mit debootstrap + Ope
Was du da gemacht hast nennt sich "Sandboxing" und ginge auch einfacher und damit schneller (in Sachen Komplexität, nicht Einrichtung). Wenn du dein Sandbox-Debian nicht in eine vollwertige VM sondern nur in ein chroot steckst sparst du dir das Booten eines kompletten virtualisierten Betriebssystems und hättest ebenfalls ein abgeschottetes Userland.
Abgesehen von erhöhtem RAM- und HDD-Verbrauch gäbe es auch keinen merklichen Unterschied bei der Benutzung. Und auch dieser Overhead wäre kleiner als bei einer VM.
Abgesehen von erhöhtem RAM- und HDD-Verbrauch gäbe es auch keinen merklichen Unterschied bei der Benutzung. Und auch dieser Overhead wäre kleiner als bei einer VM.
Re: HowTo: Minimal-Debian-Installation mit debootstrap + Ope
Ja, ich kenne natürlich Sandboxing, und genau das war ja auch meine eigentliche Motivation. Und das das auch mit chroot gehen könnte... diese Erkenntnis hatte ich während des Doings... irgendwie hat sich diese Erkenntnis geradezu aufgedrängt.... so sehr, dass ich dann wirklich einige Zeit darüber nachgedacht habe. Und letztendlich habe ich den Gedanken dann doch wieder verworfen... und ich habe einige für mich gute Gründe dafür gefunden.hikaru hat geschrieben:Was du da gemacht hast nennt sich "Sandboxing" und ginge auch einfacher und damit schneller
Der erste Grund -vermutlich der dümmste- ist Misstrauen. Mir fehlt schlicht und einfach das Vertrauen, das quasi-produktiv mit Chroot zu machen, selbst wenn chroot offensichtlich gerade dafür geschaffen ist. Ich assoziere chroot als rein "logische" Trennung von meinen primären System durch eine Verzeigerung auf ein anderes "System" bei Nutzung der gleichen Hardware. Infolgedessen betrachte ich chroot lediglich als temporäres System hinterm Vorhang.... nur hinter einem Vorhang. Ich weiss, dass es theoretisch nicht möglich ist, aus chroot auszubrechen.... wie gesagt, der vermutlich dümmste Grund.... fehlendes Vertrauen. Demhingegen betrachte ich die VM tatsächlich als physisch getrennt.... der VM ist das vorhandensein des Hostrechners anscheinend gar nicht bekannt.... allenfalls durch das Netz. Aber das empfinde ich hinsichtlich meines Misstrauens als absolut genügend.
Der zweite Grund ist die vermutlich gleiche genutzte Hardware.... mit dem wahrscheinlichen Erfolg, dass ich vemutlich den gleichen Bad-Mac-Read-Error und das miese Nachlade-Youtube-Verhalten habe, wie es jetzt auf dem Host besteht. Auch das ist mit meiner Surf-VM gelöst.
Der dritte und für mich wichtigste Grund ist, ich kopiere die VM einfach 1:1 auf mein Homedir unserer 3 Laptops und auf unseren Bürorechner und finde jederzeit die gleiche Umgebung vor und es wird dafür kein neuer Aufwand generiert.
Und das letzte, ich kann die VM einfach auf nen Stick kopieren und kann sie auf jeden beliebigen Rechner ans laufen bringen, wenn eben VirtualBox installiert ist.
Und manchmal handele ich (ganz unvernünftig) auch einfach mal nach der Devise, dass individuell betrachtet manchmal auch mal das zweitbeste das bessere sein kann..
![Cool 8)](./images/smilies/icon_cool.gif)
Re: HowTo: Minimal-Debian-Installation mit debootstrap + Ope
Schöne Anleitung. Vielleicht werde ich mal Teile deiner Openbox-Konfiguration verwenden. Aber du könntest dir noch das Debian-Paket
grml-debootstrap anschauen. Da ist dann die Installation eines Native-Debian über debootstrap doch etwas einfacher. Einfach "grml-debootstrap" ohne Parameter aufrufen. Alles fast so einfach wie eine normale Installation.
![Debian](/pics/debianpackage.png)