HTML

Szabi IT Blogja -- Főleg (valódi) szakembereknek

IT informatika mentés backup rendszergazda linux oracle postgresql ubuntu debian informatika számítástechnika számítógép technológia platform

Friss topikok

Linkblog

Archívum

Hálózati helyszínváltás - Linuxon

2011.03.19. 11:33 :: Szabi1981

Sziasztok!

Kiknek?

 

  1. Laptopot, vagy más hordozható számítógépet használsz, amin Linux fut (mindegy milyen).
  2. Több helyszínen élsz/dolgozol, ahol eltérőek a hálózati beállítások
  3. A számítógépet több felhasználó is használ(hat)ja, de eltérő beállításokkal
  4. Nem elég az IP cím, DNS, gateway beállítás
  5. Szükséged van CIFS megosztások (~ samba share, ~ windows share) felcsatolására
  6. Szükséged van HTTP/FTP Proxy beállítások módosítására helyszínfüggően (és nem kézzel akarod csinálni)
  7. SMTP/IMAP/POP3 levelező szerverek beállításai is teljesen helyszínfüggőek.

Cél

 

Célunk egy olyan megoldást találni, amivel a fenti igények kielégíthetőek, azaz:

  1. Dinamikus helyszínváltoztatás
  2. Automatikus (tényleg, nehogy már én kattintgassak)
  3. Helyszínfelismerés (MAC cím, SSID alapján)
  4. Okos legyen (lásd fentebb)

Windows Világ

 

Windows-os világban erre épkézláb alternatíva alig van, találtam egyet, a MobileNet xy valamit, de már el is felejtettem hogy hívják. Az hihetetlenül sokat tudott.

Az IBM/Lenovo termékeket használók jól ismerik az ThinkVantage AccessConnections -t.

Az AccessConnections jó, csak nincs Linuxra.

Linux Világ

 

Linux operációs rendszereken a de facto szabvány a NetworkManager kezd lenni.

A NetworkManager jó, csak nem eléggé.

Alapértelmezésben nagyon sokmindent nem tud, amit egy ilyen területi megoldásra biztosításani kell enterprise környezetben (vagy komoly felhasználóknak).

Mit nem tud a Network Manager?

 

Ez úgy is megfogalmazhatnám, hogy miért is írtam ezt a blogot. :)

A helyzet tipikus: egyszerű dolgokról nagyon sok fórum és blog van, de az igazi fogós kérdésekről senki nem beszél. Én erről szeretnék.

Amit nem tud a NetworkManager:

  1. A hálózati megosztások felmountolása
  2. Proxy kezelés
  3. Felhasználótól függő beállítások (más felhasználóval más share-eket mountol fel, vagy más jogokkal)
  4. Alapértelmezett nyomtató átállítása
  5. Tűzfalbeállítások kezelése helyszínfüggően

Lehetőségek

 

A NetworkManager büszkén hirdeti, hogy tud scriptelni, azaz a Network Manager Dispatcher lefuttatja a /etc/NetworkManager/dispatcher.d könyvtárban lévő scripteket, amennyiben (!) az illető szkript fájl csoport által nem írható és nem is SETUID-os.

A scriptek két paramétert kapnak:

  1. hálózati interfész neve (pl. eth0, wlan0, pan0, tun0, stb...)
  2. hálózati interfész státusza: up/down.

Ez szuper, csak az a baj, hogy a scripteknek pont erre a két paraméterre nincs szüksége, pontosabban ez édes kevés.

Megoldandó problémák

 

  1. A NetworkManager daemonként fut, így a dispatcher is. Ez a következőket okozza: Nem tudjuk milyen felhasználó jelentkezett éppen be, mert nem örökli a daemon a session-t. Ez elég nagy baj, ha van két felhasználód, pl. beaver és bogi, fel akarsz csatolni hálózati megosztásokat, de ugyanarra a megosztásra bogi-nak és beaver-nek más-más jogai vannak. Nem is beszélve a home könyvtárakról.
  2. /etc/fstab és Samba Credentials: halva született ötlet, mert ebben az esetben is meg kell adni a credentials fájl helyét, méghozzá boot folyamat során, amikor még nem történt login (!). Ebből adódóan a /etc/fstab-ban nem fogod tudni kezelni a felmountolást. Amint semmiképpen nem akarunk meglátni egy /etc/fstab fájlban az ez: /home/bogi/otthon.creds, mert akkor mindig minden bogi-val lesz csatolva.
  3. "Felmountolni guestént" szokták még az okos fórumok javasolni: Na persze, komoly helyen egyrészt nincs quest, másrészt biztonságtalan, harmadrészt, aki a guestnek írások jogokat ad, az meg is érdemli, hogy összebarmolják az adatait illetéktelenek. Abszolút felejtős.
  4. Tudnom kell a környezet nevét, ezt alapból nem kapjuk meg paraméterként.
  5. Módosítani kell a GConf-ot.
  6. Felhasználóként kell mountolnunk!

Megoldásom

 

  1. nm-tool nevű kis segédprogrammal lekérdezhetőek a NetworkManager által beállított dolgok, beleértve a helyszín nevét. Ez kényelmes kezelést biztosít
  2. Lesz egy vezérlő script a /etc/NetworkManager/dispatcher.d könyvtárban, ami meghatározza a helyszínt és hívja a helyszínfüggő scripteket. Ez a script a driver.sh nálam.
  3. A helyszínfüggő scripteket szabályos elnevezéssel láttam el, hogy könnyen kezelhető legyen programatikusan és a /usr/local/bin -ben helyeztem el.
  4. A felhasználó nevét és home könyvtárát egy GDM eseményhez társított script nyeri ki és helyezi el a /tmp/nm-user.txt és /tmp/nm-home.txt fájlokban. Így, a jól ismert, osztott állományok módszerét használva már megtudhatjuk az aktuális felhasználót. Amúgy meg nem :)
  5. Felhasználóként kell mountolnunk, ezért módosítanom kellett a /etc/sudoers fájlt is. (Ez most elég biztonságtalan, majd később megerősítem).
  6. A kívánt felhasználókat jelenleg hozzá kell adni a sudo csoporthoz. Ezt javítani kell.

/etc/sudoers:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults    env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL

# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) NOPASSWD:ALL
#
#includedir /etc/sudoers.d

/etc/NetworkManager/dispatcher.d/driver.sh:

#!/bin/bash
#Ez a script fogja eldönteni a tényleges helyszínt és hívja a többi scriptet, melyeket a /usr/local/bin -ben helyezünk el
#post-<up|down>-<helyszín>.sh sémával

wait_for_process() {
  PNAME=$1
  PID=`/usr/bin/pgrep $PNAME`
  while [ -z "$PID" ]; do
        sleep 1;
        echo "1 sec passed." >> $LOG
        PID=`/usr/bin/pgrep $PNAME`
  done
}

wait_for_process nm-applet

if [ "`nm-tool | grep -c "Otthon"`" -gt 0 ]; then
    LOCATION="home"
fi

if [ "`nm-tool | grep -c "NI"`" -gt 0 ]; then
    LOCATION="ni"
fi

if [ "$2" = "up" ]; then
    source /usr/local/bin/post-up-$LOCATION.sh
fi

if [ "$2" = "down" ]; then
    source /usr/local/bin/post-down-$LOCATION.sh
fi

/usr/local/bin/post-up-home.sh:

#Megosztások felmountolása
HOMEFILE=/tmp/nm-home.txt
if [ -e $HOMEFILE ]; then
    REALHOME=`cat /tmp/nm-home.txt`
else
    REALHOME=$HOME   
fi

sudo mount -t cifs //torch/homes              /mnt/net/$LOCATION/home        -o credentials=$REALHOME/.$LOCATION.creds >> $LOG
sudo mount -t cifs //torch/Public             /mnt/net/$LOCATION/public      -o credentials=$REALHOME/.$LOCATION.creds
sudo mount -t cifs //torch/Feltoltesek             /mnt/net/$LOCATION/feltöltések -o credentials=$REALHOME/.$LOCATION.creds
sudo mount -t cifs //torch/Letoltesek              /mnt/net/$LOCATION/letöltések  -o credentials=$REALHOME/.$LOCATION.creds
sudo mount -t cifs //torch/homes/Dokumentumok     $REALHOME/Dokumentumok         -o credentials=$REALHOME/.$LOCATION.creds
sudo mount -t cifs //torch/homes/Képek            $REALHOME/Képek                -o credentials=$REALHOME/.$LOCATION.creds
sudo mount -t cifs //torch/Public/Zenék           $REALHOME/Zenék                -o credentials=$REALHOME/.$LOCATION.creds

#Proxy beállítása
export http_proxy=http://192.168.0.2:3128/
export ftp_proxy=http://192.168.0.2:3128/

gconftool-2 -t string  -s /system/proxy/mode "manual" >> $LOG
gconftool-2 -t string  -s /system/proxy/secure_host "192.168.0.2"
gconftool-2 -t int     -s /system/proxy/secure_port 3128
gconftool-2 -t string  -s /system/proxy/ftp_host "192.168.0.2"
gconftool-2 -t int     -s /system/proxy/ftp_port 3128
gconftool-2 -t bool    -s /system/http_proxy/use_http_proxy true
gconftool-2 -t bool    -s /system/http_proxy/use_same_proxy true
gconftool-2 -t string  -s /system/http_proxy/host "192.168.0.2"
gconftool-2 -t int     -s /system/http_proxy/port 3128

Figyeljük meg, hogy a Debian/Ubuntu által alapból a home könyvtárban adott Zenék, Videók, Dokumentumok könyvtárakra fogunk mountolni, azaz, mindig azt a környzetet fogom látni ami, ahol éppen kell. A cégnél a céges dokumentumokat, otthon az otthoniakat.

A home könyváradban ehhez, hogy működjön, lennie kell egy .home.creds fájlnak, de ezt már könnyen elkészíted magadnak.

 /etc/gdm3/PostLogin/Default:

#!/bin/sh
#
# Note: this is a sample and will not be run as is.  Change the name of this
# file to <gdmconfdir>/PostLogin/Default for this script to be run.  This
# script will be run before any setup is run on behalf of the user and is
# useful if you for example need to do some setup to create a home directory
# for the user or something like that.  $HOME, $LOGIN and such will all be
# set appropriately and this script is run as root.
echo $HOME > /tmp/nm-home.txt
echo $USER > /tmp/nm-user.txt

A megoldásom hiányosságai

Sajnos nem sikerült tökéletes munkát végeznem, ugyanis:

  1. Jelszó nélküli sudo-zást igényel a módszer, ez biztonságtalan olyan céges környezetben, ahol egy laptopot akár több ember is használat
  2. Mindenki, aki használni akarja ezt a feature-t, tagja kell, hogy legyen a sudo csoportnak, ami szintén biztonsági aggályokat vet fel.

Ezen a részen még dolgozok, és küldöm a javításokat, ha kitalálom hogyan a legjobb.

Mindazonáltal egy laptopon nem látok nagy veszélyt abban, hogy a jogosult felhasználók root jogot kapnak uk-muk-fuk, de azért valóban nem ártana kicsit enhance-olni.

Zárszó

 

És innentől kezdve jössz te.

Ahogy a klasszikus "Japán játék használati útmutatója" mondta: Ha vagytok egyed és nincs játszó, önmagatokból, összerakni és az nyer aki előbb.

Más szóval: Sok sikert, és ha tudjátok fokozni az okosságomat, akkor szívesen látok minden megjegyzést, javítást, javaslatot.

 

Szabi

Szólj hozzá!

Címkék: linux hálózat networking share network samba cifs gdm location networkmanager helyszínváltás

A bejegyzés trackback címe:

https://beaver.blog.hu/api/trackback/id/tr462752423

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása