Create your server's self signed SSL Certificates. If you use your server as a business, it had better buy and use a Formal Certificate from Verisign and so on. |
Arranque en modo consola Ubuntu 16.04
Para arrancar ubuntu 16.04 Escritorio sin X un momento, añada systemd.unit=multi-user.target
a la linux
de la línea de comandos de GRUB.
Para hacer de este el valor predeterminado, utilice
sudo systemctl set-default multi-user.target
Para volver a los valores predeterminados de arrancar en X, el uso de
sudo systemctl set-default graphical.target
Para ver el valor predeterminado actual de destino,
sudo systemctl get-default
Montar una unidad remota a través de SSH
Bash script to backup all your MySQL databases
Backing up all your MySQL databases one by one is a pain. Here is a small bash script I made to dump and compress all my databases to my folder.
Comandos linux: find con ejemplos
El comando linux find es uno de esos comandos que todo usuario de linux debería saber “casi por obligación” por que simplemente es muy poderoso cuando se trata de tener la información del archivo exacto que se necesita, pero precisamente lo importante es poder hacer algo con el o los archivos que se encuentran y el comando linux find es el comando correcto para esto.
Hace algún tiempo escribí sobre el comando find y una segunda parte donde explicaba con ejemplos como se usa el comando linux find para encontrar diversos tipos de archivos, como buscar con diferentes condiciones, opciones y demás.
Pero una de las características mas interesantes es poder encontrar los archivos que se buscan y hacer algo con ellos mediante tuberías o pipes y es lo que te voy a compartir en este artículo.
Como agregar nuevo usuario a administradores (sudo)
Para poder agregar un nuevo usuario administrador (sudo), estos son los comandos a ejecutarse:
sudo adduser nuevousuario
Donde nuevousuario es el nombre del usuario que desea crear. Este comando crea el usuario, pero todo esto aún no le configura los permisos de administrador. Para dar ese permiso al usuario recién creado, seguidamente ejecute:
sudo adduser nuevousuario sudo
Esto asignara el usuario al grupo sudo, lo cual le permitirá trabajar como un administrador.
Cifrado y descifrado simétrico con Rijndael (AES) utilizando C#/Mono
Cifrado y descifrado simétrico con Rijndael (AES) utilizando C#/Mono – Jorge Iván Meza Martínez
Introducción.
El cifrador fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y enviado al proceso de selección AES bajo el nombre “Rijndael”.
Tomado del artículo Advanced Encryption Standard de Wikipedia.
Implementación con strings.
La aplicación de demostración de esta técnica requiere del uso de por lo menos los siguientes namespaces.
using System; using System.Security.Cryptography; using System.Text; using System.IO;
Establecer la clave y el vector de inicio.
Estos valores pueden ser especificados manualmente o de manera automática por el framework. La implementación para permitir que se definan automáticamente estos valores es la siguiente.
Rijndael rijndael = Rijndael.Create(); byte[] key = rijndael.Key; byte[] iv = rijndael.IV;
Es posible forzar la generación de nuevas claves y nuevos vectores de inicio para el algoritmo utilizando los métodos rijndael.GenerateKey() y rijndael.GenerateIV() respectivamente.
Si por el contrario se desea especificar estos valores manualmente su implementación es la siguiente siendo strKey y strIv, la clave y el vector de inicialización como cadenas de texto.
byte[] key = UTF8Encoding.UTF8.GetBytes(strKey); byte[] iv = UTF8Encoding.UTF8.GetBytes(strIv);
Especificando estos valores manualmente es necesario garantizar que sus longitudes sean válidas para el algoritmo. En este caso se utilizará una longitud de clave de 32 bits y una longitud de vector de inicio de 16 bits.
int keySize = 32; int ivSize = 16; Array.Resize(ref key, keySize); Array.Resize(ref iv, ivSize);
Cifrado de cadenas de texto.
Para cifrar la información se requiere de los siguientes parámetros.
- Cadena de texto con los datos a cifrar.
- Clave.
- Vector de inicio.
El proceso retornará finalmente una cadena de texto con los datos cifrados.
/** * Cifra una cadena texto con el algoritmo de Rijndael * * @param plainMessage mensaje plano (sin cifrar) * @param Key clave del cifrado para Rijndael * @param IV vector de inicio para Rijndael * @return string texto cifrado */ public static string encryptString(String plainMessage, byte[] Key, byte[] IV) { // Crear una instancia del algoritmo de Rijndael Rijndael RijndaelAlg = Rijndael.Create(); // Establecer un flujo en memoria para el cifrado MemoryStream memoryStream = new MemoryStream(); // Crear un flujo de cifrado basado en el flujo de los datos CryptoStream cryptoStream = new CryptoStream(memoryStream, RijndaelAlg.CreateEncryptor(Key, IV), CryptoStreamMode.Write); // Obtener la representación en bytes de la información a cifrar byte[] plainMessageBytes = UTF8Encoding.UTF8.GetBytes(plainMessage); // Cifrar los datos enviándolos al flujo de cifrado cryptoStream.Write(plainMessageBytes, 0, plainMessageBytes.Length); cryptoStream.FlushFinalBlock(); // Obtener los datos datos cifrados como un arreglo de bytes byte[] cipherMessageBytes = memoryStream.ToArray(); // Cerrar los flujos utilizados memoryStream.Close(); cryptoStream.Close(); // Retornar la representación de texto de los datos cifrados return Convert.ToBase64String(cipherMessageBytes); }
Descifrado de cadenas de texto.
El proceso inverso, el de descifrado, se realiza de manera antagónica. Para hacerlo es necesario contar con los siguientes parámetros.
- Cadena de texto con los datos cifrados.
- Clave.
- Vector de inicio.
El proceso retornará finalmente una cadena de texto con los datos descifrados.
/** * Descifra una cadena texto con el algoritmo de Rijndael * * @param encryptedMessage mensaje cifrado * @param Key clave del cifrado para Rijndael * @param IV vector de inicio para Rijndael * @return string texto descifrado (plano) */ public static string decryptString(String encryptedMessage, byte[] Key, byte[] IV) { // Obtener la representación en bytes del texto cifrado byte[] cipherTextBytes = Convert.FromBase64String(encryptedMessage); // Crear un arreglo de bytes para almacenar los datos descifrados byte[] plainTextBytes = new byte[cipherTextBytes.Length]; // Crear una instancia del algoritmo de Rijndael Rijndael RijndaelAlg = Rijndael.Create(); // Crear un flujo en memoria con la representación de bytes de la información cifrada MemoryStream memoryStream = new MemoryStream(cipherTextBytes); // Crear un flujo de descifrado basado en el flujo de los datos CryptoStream cryptoStream = new CryptoStream(memoryStream, RijndaelAlg.CreateDecryptor(Key, IV), CryptoStreamMode.Read); // Obtener los datos descifrados obteniéndolos del flujo de descifrado int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); // Cerrar los flujos utilizados memoryStream.Close(); cryptoStream.Close(); // Retornar la representación de texto de los datos descifrados return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount); }
Implementación con archivos.
El cifrado y descifrado de mensajes en archivos se realiza de manera similar al expuesto anteriormente con cadenas, sin embargo varían los flujos (streams) utilizados para obtener y dirigir el flujo de la información.
Cifrado a archivos.
/** * Cifra una cadena texto con el algoritmo de Rijndael y lo almacena en un archivo * * @param plainMessage mensaje plano (sin cifrar) * @param filename nombre del archivo donde se almacenará el mensaje cifrado * @param Key clave del cifrado para Rijndael * @param IV vector de inicio para Rijndael * @return void */ public static void encryptToFile(String plainMessage, String filename, byte[] Key, byte[] IV) { // Crear un flujo para el archivo a generarse FileStream fileStream = File.Open(filename, FileMode.OpenOrCreate); // Crear una instancia del algoritmo Rijndael Rijndael RijndaelAlg = Rijndael.Create(); // Crear un flujo de cifrado basado en el flujo de los datos CryptoStream cryptoStream = new CryptoStream(fileStream, RijndaelAlg.CreateEncryptor(Key, IV), CryptoStreamMode.Write); // Crear un flujo de escritura basado en el flujo de cifrado StreamWriter streamWriter = new StreamWriter(cryptoStream); // Cifrar el mensaje a través del flujo de escritura streamWriter.WriteLine(plainMessage); // Cerrar los flujos utilizados streamWriter.Close(); cryptoStream.Close(); fileStream.Close(); }
Descifrado de archivos.
/** * Descifra el contenido de un archivo con el algoritmo de Rijndael y lo retorna * como una cadena de texto plano * * @param filename nombre del archivo donde se encuentra el mensaje cifrado * @param Key clave del cifrado para Rijndael * @param IV vector de inicio para Rijndael * @return string mensaje descifrado (plano) */ public static string decryptFromFile(String filename, byte[] Key, byte[] IV) { // Crear un flujo para el archivo a generarse FileStream fileStream = File.Open(filename, FileMode.OpenOrCreate); // Crear una instancia del algoritmo Rijndael Rijndael RijndaelAlg = Rijndael.Create(); // Crear un flujo de cifrado basado en el flujo de los datos CryptoStream cryptoStream = new CryptoStream(fileStream, RijndaelAlg.CreateDecryptor(Key, IV), CryptoStreamMode.Read); // Crear un flujo de lectura basado en el flujo de cifrado StreamReader streamReader = new StreamReader(cryptoStream); // Descifrar el mensaje a través del flujo de lectura string plainMessage = streamReader.ReadLine(); // Cerrar los flujos utilizados streamReader.Close(); cryptoStream.Close(); fileStream.Close(); return plainMessage; } Cifrado y descifrado simétrico con Rijndael (AES) utilizando C#/Mono – Jorge Iván Meza Martínez
Aplicación de demostración.
La aplicación de demostración incluye los conceptos y el código expuestos en este artículo. Con ella es posible cifrar y descifrar un mensaje que consiste en una cadena de texto arbitraria en memoria y en un archivo.
Construír la aplicación.
La aplicación de demostración puede construírse utilizando la solución incluída en la distribución con MonoDevelop o Visual Studio. También es posible construírla desde línea de comando (Mono) mediante la siguiente instrucción.
$ gmcs “/out:RijndaelSample.exe” “/r:/usr/lib/mono/2.0/System.dll” /t:exe “RijndaelSample/Main.cs”
Enlaces.
- Aplicación de demostración del cifrado Rijndael (AES) de cadenas y archivos.
http://demo.jorgeivanmeza.com/NET/Rijndael-AES-Sample/ - Advanced Encryption Standard – AES (Rijndael).
http://es.wikipedia.org/wiki/Advanced_Encryption_Standard - AES Algoritm information.
http://csrc.nist.gov/archive/aes/rijndael/wsdindex.html - Rijndael Class en MSDN.
http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndael.aspx - How To: Encrypt and Decrypt Data Using a Symmetric (Rijndael) Key (C#/VB.NET).
http://www.obviex.com/samples/Encryption.aspx
Cifrado y descifrado simétrico con Rijndael (AES) utilizando C#/Mono
Syncing Filezilla sitemanager.xml across multiple computers
So, I am using several computers and want to sync my filezilla sitemanager.xml across all platforms using a cloud service (example Dropbox).
1. Find your site manager file
Filezilla keeps all of your sites and access credentials in an XML file called “sitemanager.xml”
Windows 7/8 & Vista – C:\Users\YourUserName\AppData\Roaming\FileZilla\sitemanager.xml
Mac OSX – /users/YourUserName/.config/filezilla/sitemanager.xml
Linux – /home/YourUserName/.filezilla/sitemanager.xml
2. Make a backup copy of the sitemanager.xml in case you mess it up
3. Find a nice location for your shared sitemanager.xml file in your preferred cloud service, and copy it over
example: \Dropbox\Settings\sitemanager.xml
4. Make a “softlink” to your shared sitemanager.xml
You will need to use COMMAND PROMPT (Windows), or TERMINAL (Linux and OSX) for this.
Windows:
mklink “C:\Users\YourUserName\AppData\Roaming\FileZilla\sitemanager.xml” “C:\Users\YourUserName\Dropbox\Settings\sitemanager.xml”
OS X:
ln -s /users/YourUserName/Dropbox/Settings/sitemanager.xml /users/YourUserName/.config/filezilla/sitemanager.xml
Linux:
ln -s /home/YourUserName/Dropbox/Settings/sitemanager.xml /home/YourUserName/.filezilla/sitemanager.xml
The du Command
The du (i.e., disk usage) command reports the sizes of directory trees inclusive of all of their contents and the sizes of individual files. This makes it useful for tracking down space hogs, i.e., directories and files that consume large or excessive amounts of space on a hard disk drive (HDD) or other storage media.
A directory tree is a hierarchy of directories that consists of a single directory, called the parent directory or top level directory, and all levels of its subdirectories (i.e., directories within a directory). Any directory can be regarded as being the start of its own directory tree, at least if it contains subdirectories. Thus, a typical computer contains a large number of directory trees.
du is commonly employed by system administrators as a supplement to automated monitoring and notification programs that help prevent key directories and partitions (i.e., logically independent sections of a HDD) from becoming full. Full, or even nearly full, directories and partitions can cause a system to slow down, prevent users from logging in and even result in a system crash. Although visually identifying heavy consumers of disk space can be practical if there are relatively few users on a system, it is clearly not efficient for large systems with hundreds or thousands of users.
A minor limitation of du is the fact that the sizes of directories and files it reports are approximations, not exact numbers, and there is frequently a small discrepancy between these sizes and the sizes reported by other commands. However, this rarely detracts from its usefulness.
Also, du can only be used to estimate space consumption for directories and files for which the user has reading permission. Thus, an ordinary user would generally not be able to use du to determine space consumption for files or directories belonging to other users, including those belonging to the root account (i.e., the system administrator). However, as du is used mainly by system administrators, this is usually not a problem.
Syntax
The basic syntax for du is:
du [options] [directories and/or files]
The items in the square brackets are optional. When used with no options or arguments (i.e., names of directories or files), du lists the names and space consumption of each of the directories (including all levels of subdirectories) in the directory tree that begins with the current directory (i.e., the directory in which the user is currently working). The space consumption of any directory consists of the space occupied by all of the files in it and all of its subdirectories at all levels inclusive of all of the files in them. A final line at the end of the report gives the total space consumption for the directory tree.
du can provide information about any directory trees or files on the system whose names are given as arguments. For example, the following will report the names and sizes for each directory in the directory tree that begins with a directory named directory2 that resides in a directory named directory1, which, in turn, is located in the current directory:
du directory1/directory2
Likewise, the following will report the sizes of the two files named file1 and file2 that are located in the /sbin directory (which contains executable programs):
du /sbin/file1 /sbin/file2
du can accept any number of arguments, and they can be any combination of files and directories. When there are multiple arguments, no grand total is provided by default, although a total is still provided for each argument.
Options
As is the case with most commands on Linux and other Unix-like operating systems, du has a number of options, a few of which are commonly used. The options can vary somewhat according to the particular operating system and the version of du.
One of the most useful options is -h (i.e., human readable), which can make the output easier to read by displaying it in kilobytes (K), megabytes (M) and gigabytes (G) rather than just in the default kilobytes. Thus, the following command can be used to show the sizes of all the subdirectories in the current directory as well as the total size of the current directory, all formatted with the appropriate K, M or G:
du -h
The -s (for suppress or summarize) option tells du to report only the total disk space occupied by a directory tree and to suppress individual reports for its subdirectories. Thus, for example, the following would provide the total disk space occupied by the current directory in an easy-to-read format:
du -sh
The output is the same as the last line of a report issued by du with only the -h option.
The -a (i.e., all) option tells du to report not just the total disk usage for each directory at every level in a directory tree but also to report the space consumption for each individual file anywhere within the tree. Thus, for example, the following would list the name and size of every directory and file in the /etc directory (which contains system configuration files) for which the user has reading permission:
du -a /etc
A somewhat similar report is provided by using the star ( * ) wildcard, which will match any character or characters. For example, the following command would list the sizes of all directories that are in the tree that begins with the current directory:
du *
However, the only files listed are those in the the parent directory, not those in its subdirectories. Also, no total for the directory tree as a whole is provided.
The use of the -s option and the star wildcard together would cause du to report the names and sizes of only the files and directories contained directly in the top level directory itself (and to not list the names of any of its subdirectories and the files in them). The size of each listed directory is, of course, inclusive of all of its files and subdirectories (including all of the files in them). For example, such a report about the directory tree beginning with the current directory would be provided by the following:
du -hs *
The wildcard can also be used to filter the output to list only those items whose names begin with, contain or end with certain characters or sequences of characters. For example, the following would report the names and sizes of all of the directories and files in the current directory whose names begin with the letter s as well as the names and sizes of all levels of subdirectories of those directories regardless of what their names begin with:
du -h s*
The -c option can be added to provide a grand total for all of the files and directories that are listed. In the case of the above example, this would be
du -hc s*
As another example of the use of the wildcard, the following command would report the name and size of each gif (one of the two most popular image formats) file in the current directory as well as a total for all of the gifs:
du -hc *.gif
Another useful option is --max-depth=, which instructs du to list its subdirectories and their sizes to any desired level of depth (i.e., to any level of subdirectories) in a directory tree. For example, the following would cause du to list only the first tier (i.e., layer) of directories in the current directory and their sizes (inclusive of all of their contents, including those of their subdirectories):
du --max-depth=1
The total space consumption for the current directory tree will also be reported, and it will, of course, be the same regardless of the depth of the files listed.
Setting --max-depth= to zero tells du to not list any of the subdirectories within the selected directory, i.e., to list only report the size of the selected directory itself. The result is the same as using the -s option.
Using du With Filters
As is the case with other commands on Unix-like operating systems, du can be linked with pipes to filters to create powerful pipelines of commands. A filter is a (usually) small and specialized program that transforms data in some meaningful way.
For example, to arrange the output items according to size, du can be piped to the sort command, whose -n option tells it to list the output in numeric order with the smallest files first, as follows:
du | sort -n
As du will often generate more output than can fit on the monitor screen at one time, the output will fly by at high speed and be virtually unreadable. Fortunately, it is easy to display the output one screenful at a time by piping it to the less filter, for example,
du -h | less
The output of less can be advanced one screenful at a time by pressing the space bar, and it can be moved backward one screenful at a time by pressing the b key.
The output of du can likewise be piped to less after it has been passed through one or more other filters, for example,
du -h | sort -n | less
The grep filter can be used to search through du's output for any desired string (i.e., sequence of characters). Thus, for example, the following will provide a list of the names and sizes of directories and files in the current directory that contain the word linux:
du -ah | grep linux
One way in which du can be used to produce a list of (mostly) directories and files in a directory tree that are consuming large amounts of disk space is to use grep to search for all the lines that contain the upper case letter M (i.e., for megabytes) or G (for gigabytes), such as
du -ah | grep M
The only problem with this approach is that it will also select directories and files that contain an upper case M or G in their names even if the file size is not measured in megabytes or gigabytes. (However, this problem could be overcome through the use of regular expressions, an advanced pattern matching technique).
Alternatives to du
There are several other ways of monitoring disk space consumption and reporting file sizes. Although very useful tools, they are generally not good substitutes for du.
Among them is the df command, which is likewise used by system administrators to monitor disk usage. However, unlike du, it can only show the space consumption on entire partitions, and it lacks du's fine-grained ability to track the space usage of individual directories and files.
du is not designed to show the space consumption of partitions. The closest that it can come is to show the sizes of the first tier of directories in the root directory (i.e., the directory which contains all other directories and which is represented by a forward slash), several of which may be on their own partitions (depending on how the system has been set up). This is accomplished by becoming the root user and issuing the following command:
du -h --max-depth=1 /
The ls (i.e., list) command can provide the sizes of individual files by using its -s option, and its -h option (which is similar to du's -h option) can be added to make the output easier to read. For example, the following would list the names and sizes of the files in the current directory:
ls -sh
Although the names of the first tier of directories within the current directory are also listed, the size data accompanying them does not represent their actual disk space consumption (i.e., inclusive of their contents). Nor does ls report the contents of any lower tiers of directories, unless such directories are specifically listed as arguments.
A convenient alternative for finding the sizes of files and directory trees when using a GUI (graphical user interface) is to click with the right mouse button on the icon (i.e., a small picture or symbol) for that item and then select Properties from the menu that appears. Although this is frequently sufficient, it does not provide the detailed control and reporting that du provides.
DU (ABREVIATURA DE DISK USAGE, USO DE DISCO) ES UN COMANDO ESTÁNDAR DE LOS SISTEMAS OPERATIVOS DE LA FAMILIA UNIX. SE USA PARA ESTIMAR EL USO DE ESPACIO EN DISCO DURO DE UN ARCHIVO, UN DIRECTORIO EN PARTICULAR O DE ARCHIVOS EN UN SISTEMA DE ARCHIVOS. LA UTILIDAD DU APARECIÓ POR PRIMERA VEZ EN LA VERSIÓN 1 DEL UNIX DE AT&T
Examples:
$ du -sm *
Return
$ du -sm * 1172 Descargas 68855 Documentos 4084 Escritorio 22270 Imágenes 174192 Linux 50887 Música 3088 Proyectos 1379 Trabajo 219515 Videos
$ du -bsh Videos/
Return:
du -bsh Videos/ 215G Videos/
Si sólo quisiéramos ver cuáles son, por ejemplo, los 5 directorios más pesados en nuestro /home podríamos usa du con una serie de comandos extras, por ejemplo:
$ du -sm * | sort -nr | head -5
Lo cual devolvería:
$ du -sm * | sort -nr | head -5 219515 Videos 174192 Linux 68855 Documentos 50887 Música 22270 Imágenes
Pero los valores que nos devuelven no son “tan humanos” pues están representados en MB y son más engorrosos de entender. Es por ello que ejecutamos:
$ du -hs * | sort -nr | head -5
Replace webmin self-signed certificate to avoid sec_error_invalid_key error
Recent browser versions (e.g. Firefox 33) refuse to work with older Webmin installs.
They give a sec_error_invalid_key error, offer a 'Try again' button, but do not offer an option to add an exception.
Firefox 33 no longer supports certificates with private keys smaller than 1024 bits.
You can replace your webmin certificate with a new one by running this command:
file=/etc/webmin/miniserv.pem openssl req -x509 -newkey rsa:2048 -keyout $file -out $file -days 3650 -nodes -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" openssl x509 -x509toreq -in $file -signkey $file >> $file /etc/init.d/webmin restart
This command will create a 'pem' file with both the private key and self-signed certificate in the same file. -nodes will let you create the file without a passphrase. The -subj option saves you having to manually enter certificate details.
Or you can do it by setting ssl=0 in /etc/webmin/miniserv.conf; restarting webmin with "/etc/init.d/webmin restart" then using the web interface to make the certificate change at Webmin -> Webmin Configuration -> SSL Encryption -> Self Signed Certificate