Linux containers in 500 lines of code

Relatd: I’ve used Linux containers directly and indirectly for years, but I wanted to become more familiar with them. So I wrote some code. This used to be 500 lines of code, I swear, but I’ve revised it some since publishing; I’ve ended up with about 70 lines more. I wanted specifically to find a minimal set of restrictions to run untrusted code. This isn’t how you should approach containers on anything with any exposure: you should restrict everything you can. But I think it’s important to know which permissions are categorically unsafe! ...

November 1, 2016 · 1 min · 98 palabras · Nacho Cano

Limitando el número de procesos por usuario

Mediante el comando ulimit podemos consultar y controlar el valor de los recursos disponibles para la consola y los procesos que puedan ser iniciados desde ella. Las diferentes opciones que acepta este comando son: -a All current limits are reported -b The maximum socket buffer size -c The maximum size of core files created -d The maximum size of a process’s data segment -e The maximum scheduling priority ("nice") -f The maximum size of files written by the shell and its children -i The maximum number of pending signals -l The maximum size that may be locked into memory -m The maximum resident set size (many systems do not honor this limit) -n The maximum number of open file descriptors (most systems do not allow this value to be set) -p The pipe size in 512-byte blocks (this may not be set) -q The maximum number of bytes in POSIX message queues -r The maximum real-time scheduling priority -s The maximum stack size -t The maximum amount of cpu time in seconds -u The maximum number of processes available to a single user -v The maximum amount of virtual memory available to the shell and, on some systems, to its children -x The maximum number of file locks -T The maximum number of threads Para consultar todos los valores asignados actualmente: ...

August 1, 2011 · 3 min · 628 palabras · Nacho Cano

Endianness

“Endianicidad” designa el formato en el que se almacenan los datos de más de un byte en un ordenador. El sistema big-endian adoptado por Motorola entre otros, consiste en representar los bytes en el orden “natural”, así el valor hexadecimal 0x4A3B2C1D se codificaría en memoria en la secuencia {4A, 3B, 2C, 1D}. En el sistema little-endian adoptado por Intel, entre otros, el mismo valor se codificaría como {1D, 2C, 3B, 4A}, de manera que de este modo se hace más intuitivo el acceso a datos, porque se efectúa fácilmente de manera incremental de menos relevante a más relevante (siempre se opera con incrementos de contador en la memoria). ...

July 30, 2011 · 2 min · 400 palabras · Nacho Cano

¿Un keylogger en Ubuntu?

El comando xinput permite configurar y probar dispositivos de entrada para las XWindow. Podemos obtener un listado de los dispositivos de entrada: $ xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=15 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Power Button id=8 [slave keyboard (3)] ↳ Sleep Button id=9 [slave keyboard (3)] ↳ Laptop_Integrated_Webcam_2M id=10 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)] ↳ Dell WMI hotkeys id=13 [slave keyboard (3)] También podemos obtener más información de algún dispositivo en concreto, por ejemplo, del teclado, cuyo identificador, en mi caso, es el 11: ...

July 22, 2011 · 4 min · 649 palabras · Nacho Cano

inception

Inception en C: $ git clone https://github.com/karthick18/inception.git

March 14, 2011 · 1 min · 7 palabras · Nacho Cano

ls sin ls

En bash: $ for i in *; do echo $i; done Fuente: nfosolutions.com En C: /* * * Esempio che scansiona una cartella stampando a video i file in essa * contenuti. */ #include #include #include #include int main(int argc, char *argv[]) { DIR *dir; struct dirent *drent; if(argc < 2) { fprintf(stderr, "%s \n", argv[0]); return EXIT_FAILURE; } if((dir = opendir(argv[1])) == NULL) { fprintf(stderr, "Errore opendir()\n"); return EXIT_FAILURE; } while((drent = readdir(dir)) != NULL) { fprintf(stdout, "--> %s\n", drent->d_name); } if(closedir(dir) < 0) { fprintf(stderr, "Errore closedir()\n"); return EXIT_FAILURE; } } En Python: ...

March 12, 2011 · 2 min · 347 palabras · Nacho Cano

setuid y setgid

setuid y setgid son unos permisos especiales, también llamados los sticky bits, que se les pueden asignar a los programas ejecutables para que se ejecuten con los permisos del propietario y no del usuario que los ejecuta. Esto sirve para, por ejemplo, que cualquier usuario ejecute el comando ping aunque éste necesite privilegios de administrador, que es el propietario. En GNU/Linux, y en Unix, estos bits se ignoran cuando se aplican a directorios. ...

February 28, 2011 · 2 min · 415 palabras · Nacho Cano