Teknik^tDR
Versió 3.x!

Sistemes

Algunes notes més sobre usuaris a l’Apple TV

 
per teknik el 23 agost 2011 | Informàtica, Mac, Seguretat, Sistemes

A un post anterior vaig explicar com crear un usuari que no fos frontrow. En aquest post explicaré algunes millores més que es poden aplicar per poder fer servir de manera més còmoda el nostre nou usuari.

Sudoers

Per permetre poder fer servir sudo amb el nou usuari (en el meu cas teknik) cal afegir-lo al grup admin. Per fer-ho, entrem com a root i l’afegim:

login frontrow                                          # de moment cal fer-ho com a "frontrow" ;)
sudo niutil -appendprop / /groups/admin users teknik
sudo niutil -read . /groups/admin  # comprovem que efectivament  l'usuari està al grup

Cal recordar desconnectar de l’Apple TV perquè els canvis siguin efectius.

“Clon” de l’usuari frontrow

Igual que a l’anterior post vem crear un usuari alternatiu a frontrow però amb el seu propi UID i GID, també podem crear un usuari alternatiu a frontrow, amb el mateix UID i GID però amb un altre password. Per crear el password cal veure el post anterior, o be podem fer servidor el mateix password que amb l’anterior usuari amb el següent:

sudo niutil -read . /users/teknik

i fent servir el password als següents passos, a on posa (hash):

sudo niutil -create / /users/frontrowx # Creem l'usuari "frontrowx"
sudo niutil -createprop / /users/frontrowx uid 501 # Li donem un UID = 501 (el mateix que l'usuari frontrow)
sudo niutil -createprop / /users/frontrowx gid 501 # Li donem un GID = 501, que creem després
sudo niutil -createprop / /users/frontrowx home /Users/frontrow # Li assignem el home a l'usuari
sudo niutil -createprop / /users/frontrowx shell /bin/bash # Li assignem el shell a l'usuari
sudo niutil -createprop . /users/frontrowx passwd (hash)
sudo niutil -createprop . /users/frontrowx authentication_authority ";basic;"
sudo niutil -read . /users/frontrowx
sudo niutil -appendprop / /groups/admin users frontrowx

També aprofito per incloure’l al grup admin.

Problemes al interrompre el clonat de discs amb Clonezilla

 
per teknik el 23 juny 2011 | Informàtica, Linux, Sistemes

Ahir estava clonant un disc al servidor de fitxers de l’empresa amb Clonezilla, o sigui, treballant offline. És un disc d’1TB, però deu estar ple a un 20%, així que vaig pensar que el podria clonar a mig matí sense massa problemes. Quan me’n vaig adonar que el temps estimat era de l’ordre de 18 hores, vaig decidir interrompre la operació, i reiniciar el sistema. Vaig pensar que no tindria cap problema, ja que el disc d’origen simplement estava sent llegit, i el de destinació l’havia de tornar a clonar sencer, així que vaig interrompre “a la brava” i vaig reiniciar… Sorpresa! El sistema no volia iniciar… El sistema tota la estona em deia que no trobava l’init.

Després d’uns instants de pànic, de reiniciar i assegurar-me que estava fent servir el disc original, vaig decidir desconnectar-lo i el sistema va iniciar.

Avui, pensant, he arribat a la conclusió del motiu: el disc està amb LVM2, i al clonar-lo també es van clonar totes les estructures de LVM2, tot i que les dades del disc no estaven clonades. Quan el sistema va iniciar, va trobar dos discs durs amb UIDs de LVM2 idèntics, i va donar preferència al segon disc, que era el que no tenia dades. Resultat: no trobava la partició de root. Misteri resolt!

Crear un usuari a l’Apple TV per a major seguretat

 
per teknik el 18 febrer 2011 | Informàtica, Mac, Seguretat, Sistemes

Fa uns dies vaig començar a donar-li voltes al tema de que el meu Apple TV li tinc posat el SSH (entre d’altres coses!) i que accedint per SSH l’usuari i password són trivials (frontrow/frontrow). Com que m’agrada tenir les coses una mica en condicions vaig decidir que, encara que tingui el dispositiu a la xarxa de casa sense tenir-lo exposat al mon exterior, m’agradaria no tenir-lo amb usuari i password coneguts. Així que vaig decidir investigar opcions.

AVIS: el que es descriu en aquest article pot provocar problemes en el teu Apple TV, així que si no saps molt be el que fas millor no ho provis. O en qualsevol cas, JO NO ME’N FAIG RESPONSABLE.

La opció més directa, la de canviar-li el password a l’usuari frontrow, sembla ser que no és molt recomenable, ja que pot donar problemes amb part del software instal·lat al dispositiu.

Després d’això, vaig veure que es suggeria la possibilitat de forçar l’autentificació per clau pública/privada. Tot i que és una bona opció, i força més segura que el típic usuari i password, a mi no em resulta convenient.

Finalment vaig veure una tercera opció, que és desactivar el login a través d’SSH de frontrow, mantenint la contrassenya, i crear un nou usuari amb el qual poder logar-me sense problemes. I aquí és un va començar la part interessant…

Primer vaig buscar com crear usuaris. Resulta que els Apple TV de primera generació utilitzen una versió modificada de Mac OS X 10.4 “Tiger”. I modificada vol dir, entre altres coses, retallada. Per tant, per la base de dades d’usuaris utilitzen NetInfo, que és una base de dades binaria. Els fitxers tradicionals d’Unix com /etc/passwd només s’utilitzen en mode single user. Apart, vaig comprovar que al sistema no hi havia el binari passwd. Actualment no tinc accés a cap sistema amb Tiger, l’únic que tenia va ser actualitzat fa temps a Snow Leopard. I resulta que NetInfo va desaparèixer a Leopard. Per tant, no podia passar el binari des de cap sistema (ja deixant de banda els problemes de dependències que havia llegit que hi havia). Calia trobar una altra solució…

Investigant vaig veure que la utilitat per manipular la BBDD de NetInfo si que es trobava al sistema: niutil. Després de mirar a diversos llocs, vaig crear un usuari de la següent manera (el texte subratllat és el que caldria canviar per crear-ne un de diferent).

sudo niutil -create / /users/teknik              # Creem l'usuari "teknik"
sudo niutil -createprop / /users/teknik uid 502  # Li donem un UID = 502 (l'usuari frontrow te el 501)
sudo niutil -createprop / /users/teknik gid 502  # Li donem un GID = 502, que creem després
sudo niutil -create / /groups/teknik             # Creem el grup "teknik"
sudo niutil -createprop / /groups/teknik gid 502 # Li donem un GID = 502 (igual que el de l'usuari, clar)
sudo mkdir /Users/teknik                         # Creem el home
sudo chown -R teknik:teknik /Users/teknik        # Li donem permisos a l'usuari i el grup
sudo niutil -createprop / /users/teknik home /Users/teknik # Li assignem el home a l'usuari
sudo niutil -createprop / /users/teknik shell /bin/bash    # Li assignem el shell a l'usuari

Amb això ja tenim l’usuari creat amb el seu home directory. Ara ens falta assignar-li una contrasenya. Però la qüestió és que no tenim la utilitat passwd al sistema. Una de les formes de crear-la la he trobat posteriorment a aquesta discussió, a on diu que per generar el hash de la nostre contrasenya podem fer servir OpenSSL des d’una altra màquina. En concret, si volem que la nostra contrasenya sigui “cheese” fariem el següent:

$ openssl passwd cheese
2bbFk0yBBCLC.  # Això no serà el que obtindràs, mira el comentari sobre la sal.

El hash obtingut el posariem a la base de dades de NetInfo com veurem després. Aquest mètode serveix per qualsevol sistema a on tinguem accés a OpenSSL, sigui Mac OS X, Linux o Windows. Cal dir que aquest mètode no l’he provat, i tampoc puc comparar simplement els valors dels hash amb els del següent mètode ja que tenen sal.

Ja vaig fer servir un altre mètode (que vaig esbrinar per prova i error) que serveix per màquines amb OS X. En el meu cas ho vaig fer amb un Snow Leopard, però hauria de servir perfectament un Leopard o un Tiger, o probablement versions anteriors.

Primer vaig copiar el fitxer /etc/master.passwd al meu home. D’aquesta forma els següents passos els podré fer sobre aquest fitxer sense malmetre l’original. Això és prou important si no volem arriscar-nos a tenir problemes amb el sistema posteriorment. Un cop feta la còpia, vaig fer servir una sintaxi de passwd a OS X que em permet especificar-li el tipus de base de dades a utilitzar (en aquest cas tipus file, per fer servir un fitxer de texte pla tipus Unix) i a on trobar-la (./master.passwd.tmp). Per tant, des del meu home i com a usuari normal, vaig fer el següent:

sudo cp /etc/master.passwd ./master.passwd.tmp
sudo passwd -i file -l ./master.passwd.tmp root
sudo more ./master.passwd.tmp
sudo rm ./master.passwd.tmp

Cal notar que vaig fent sudo perquè el master.passwd te com a propietari root i com a permisos 600 (només l’usuari root el pot llegir). Inclús si ho canviem, a l’executar passwd es resetejarà. Així que compte amb teclejar-ho tot exactament com ho he posat.

Fixeu-vos que l’usuari al qual li canvi la contrasenya és l’usuari root, però tenint en compte que no és el root del sistema, sinó de la nostra còpia del fitxer master.passwd. Perquè això? Perquè el fitxer només es fa servir en mode single user, i per tant no és una còpia actualitzada dels usuaris del sistema. I perquè passwd només permet canviar la contrasenya d’usuaris presents al fitxer, i root hi és. I finalment perquè només ens interessa el hash, i per tant és indiferent sobre quin usuari fem aquesta operació. Amb l’última ordre tindrem un llistat del fitxer. Buscarem el hash de l’usuari root i el copiarem, per fer-lo servir al següent pas.

sudo niutil -createprop . /users/teknik passwd (hash)
sudo niutil -createprop . /users/teknik authentication_authority ";basic;"
sudo niutil -read . /users/teknik

A la primera linia posarem el hash a la base de dades. Però amb això únicament no n’hi ha prou. Vaig intentar logar-me i em va ser impossible. La segona linia és necessaria per que Apple TV ens reconegui la contrassenya. Finalment l’última linia ens permet comprovar que tot està correcte. El resultat el podem comparar amb el de l’usuari frontrow per veure que tot és correcte. Faltarà alguna propietat, però amb les que hem posat és més que suficient per treballar amb l’usuari amb normalitat.

Per rematar-ho, provem que podem logar-nos amb normalitat amb l’usuari nou:

ssh teknik@appletv.local

Un cop ho haguem comprovat, podem procedir a bloquejar l’usuari frontrow a l’SSH modificant /etc/sshd_config de la següent manera, i finalment reiniciant l’Apple TV.

sudo bash
echo "DenyUsers frontrow" >> /etc/sshd_config
reboot

Per tant, a partir d’aleshores ens haurem de logar amb el nou usuari, ja que si ho intentem amb el frontrow obtindrem un error:

ssh frontrow@appletv.local.
frontrow@appletv.local.'s password: ****
Permission denied, please try again.
frontrow@appletv.local.'s password: (ctrl-c per sortir)

Ah! I el detall final és que no tenim su per canviar d’usuari, però si que tenim login. Així que si volem passar a l’usuari frontrow un cop logats amb el nou usuari, podem fer:

login frontrow

des de dins de l’Apple TV.

Espero que us sigui útil!

Autoconnexió de dispositius USB a VMware

 
per teknik el 8 abril 2010 | Programació, Sistemes, Virtualització

A la feina fem servir VMware per muntar entorns de desenvolupament per tasques puntuals (algunes no tant puntuals!). Últimament n’he hagut de muntar dos per desenvolupament amb terminals mòbils, i m’he trobat que cada cop que connectava el dispositiu al port USB de la màquina host, després havia de dir-li a VMware que el connectés a la màquina virtual. Buscant a Google vaig trobar un document sobre com automatitzar-ho (PDF en anglès).

Bàsicament hem de modificar el fitxer VMX que descriu la nostra màquina virtual per indicar-li el ID de fabricant i de producte que volem que s’autoconnecti a la màquina virtual que descriu aquest fitxer VMX. Per fer-ho hem d’afegir línies d’aquest tipus, una per cada dispositiu (posant device0, device1, etc.):

usb.autoConnect.device0 = "0x0fca:0x8004"

Aquest ID de fabricant i de dispositiu el podem obtenir molt facilment a Linux amb un lsusb. Això ens mostrarà una línia per cada dispositiu, incloent-hi hubs USB. Per exemple, si connecto una BlackBerry em puc trobar el següent:

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 028: ID 0fca:8004 Research In Motion, Ltd.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Fixeu-vos que el que ens interessa és l’ID, en aquest cas “0fca:8004“. Això és el que posarem entre cometes, afegint-li “0x” davant de cada un dels nombres, que són hexadecimals. En aquest cas obtenim “0x0fca:0x8004″.

Per buscar-lo a Windows, haurem d’anar a l’administrador de dispositius i obrir les propietats del dispositiu en qüestió. Un cop allà anirem a Detalles i buscarem la propietat Id. de hardware. Això ho podem veure a la següent figura:

A la segona línia hi trobem “HID\VID_0458&PID_0003“. Aquests números són els que corresponen a l’ID de fabricant (0458) i de dispositiu (0003). Per tant, a partir d’aquesta línia obtenim “0x0458:0x0003”. Fixeu-vos que cal eliminar la part de HID, VID, PID i tots els signes de puntuació, i quedar-nos amb els números, afegint-hi el 0x i els dos punts.

Al PDF mencionat hi trobarem més casos en que podem fer servir la funcionalitat d’autoconnexió (com per exemple, buscar els dispositius per nom i no per ID).

Cal anar en compte amb el detall que hem de deixar que el dispositiu estigui completament encès per assegurar-nos que el sistema el detecta correctament i que els IDs són correctes. Això ho he vist especialment amb els dispositius BlackBerry.

legacydiary.com/pdf/vmware_usb.pdflegacydiary.com/pdf/vmware_usb.pdf

Incompatibilitat entre Panda ActiveScan i VMware 2.x

 
per teknik el 3 setembre 2009 | Informàtica, Sistemes

Fa uns dies vaig estar actualitzant un servidor amb VMware que fem servir a la feina per provar coses dins màquines virtuals. Tenia un VMware 1.x i vaig passar-lo a 2.x. Apart d’algún petit problema a la instal·lació i d’aplicar els patch per que els mòduls de kernel compiléssin amb el meu kernel de Linux, tot va anar prou be.

Quan vaig intentar connectar fent servir el client VMware Server Console (que ja feia servir per la 1.x) em va donar un missatge d’error, i després de buscar una mica, vaig veure que aquest client ja no es podia fer servir, i que la forma recomanada era conectar amb un navegador a https://servidor:8333 .

Doncs be, després d’obrir els ports corresponents i de tornar-ho a intentar, em va ser impossible obtenir cap pantalla a on em demanés les credencials per logar-me ni res similar, fent servir Firefox 3.5. Ho vaig provar a una altra màquina, i després vaig decidir provar-ho amb Internet Explorer 7. Va ser impossible. En canvi a una altra màquina si que vaig poder, amb Firefox 3.5 igual.

Després d’una bona estona mirant, vaig trobar el culpable: el plugin de Panda ActiveScan. Resulta que a les dues primeres màquines l’havia fet servir per fer alguns escanejos online, i va quedar el plugin instal·lar. Comentar que els escanejos, si no recordo malament, els vaig fer amb Internet Explorer, instal·lant l’ActiveX, però sembla que també es va instal·lar el plugin de Firefox.

La solució a Firefox va ser desactivar el plugin des de la finestra de complements, com es veu a la seguent captura de pantalla, i despres reiniciant Firefox:

Panda ActiveScan plugin

La veritat és que no em vaig preocupar a intentar-ho desactivar també per Internet Explorer.

Article interessant sobre límits de memòria de Windows de 32 bits

2
per teknik el 27 agost 2009 | Informàtica, Sistemes, Windows

Fa temps (des de que, anys enrere em vaig dedicar a mirar el funcionament intern de processadors, entre ells el Pentium Pro) que venia pensant perquè els sistemes operatius actuals no feien servir els busos de 36 bits (si, 36, no 32…) de que disposaven els micros d’Intel a partir del Pentium Pro. Aquest bus permetria utilitzar 2^36 bytes de memòria, o el que és el mateix, 64 GB.

Doncshe trobat aquest article que parla dels límits de memòria de les versions de 32 bits de Windows (en anglès), i principalment be a dir que, la limitació de 4 GB en aquests sistemes és básicament imposada i no tècnica. Vamos, el que ja es veia a venir.

L’article és una mica llarg, pero molt interessant si t’agraden els temes a baix nivell.