Category Archives: Help

Cómo activar los logs de mysql de forma online, ejemplo

Para poder activar los logs de mysql sin la necesidad de reiniciar el servicio se puede ejecutar una sencilla instrucción.

Para ver si esta activado y para ver también el fichero donde se van a guardar:

show variables like ‘general_log%’;

Para activar los logs:

set global general_log=1;

Si a continuación dejamos un “tail -f” del fichero log, veremos todas las queries que están ejecutando y que se están registrando en el log.

Para desactivar:

set global general_log=0;

Hasta pronto!!!

Ejemplos rsync

Unos sencillos ejemplos de la herramienta rsync.

Trayendo los datos desde otro server al server donde se ejecuta el rsync:

Opción adicional: Rsync excluyendo directorio

rsync -avz --exclude 'tmp' server1.okitup.com:/home/serv1okitup/ /home/serv2okitup/

Enviando los datos desde el servidor donde se ejecuta rsync a otro server destino:

Opción adicional: Con distinto puerto ssh

rsync -avu --rsh='ssh -p41555' /home/serv1okitup/ root@server2.okitup.com:/home/serv2okitup/

Owncloud – Descifrar ficheros manualmente

Con el siguiente script se puede descrifrar el contenido de un fichero cifrado de owncloud.

El script php quedaría así:

<?php
 require_once 'crypt.php';

// first get users private key and decrypt it
 $encryptedUserKey = file_get_contents("/var/www/clients/client1/web1/web/data/user1/files_encryption/test.txt.private.key");
 $decryptedUserKey = OCA\Encryption\Crypt::decryptPrivateKey($encryptedUserKey, "admin");

// now we need to decrypt the file-key, therefore we use our private key and the share key
 $shareKey = file_get_contents("/var/www/clients/client1/web1/web/data/user1/files_encryption/share-keys/documents/test.txt.user1.shareKey");
 $encryptedKeyfile = file_get_contents("/var/www/clients/client1/web1/web/data/user1/files_encryption/keyfiles/documents/test.txt.key");
 $decryptedKeyfile = OCA\Encryption\Crypt::multiKeyDecrypt($encryptedKeyfile, $shareKey, $decryptedUserKey);

// finally we can use the decrypted file-key to decrypt the file
 $encryptedContent = file_get_contents("/var/www/clients/client1/web1/web/data/user1/files/documents/test.txt");
 $decryptedContent = OCA\Encryption\Crypt::symmetricDecryptFileContent($encryptedContent, $decryptedKeyfile);

//echo "result: " . $decryptedContent . "\n";
 echo $decryptedContent;
 ?>

Observaciones:

  • Hay un require de crypt.php, se tiene que tener en cuenta ehhh 😉
  • Se tiene que disponer de la private.key, del shareKey y del keyfile para poder realizar el descifrado.

Hasta pronto,

Scripting : xargs – paths con espacios – wildcard

Cuando queremos ejecutar comandos shell – sobretodo ‘find’ – enlazados via pipe que incluyen paths, directorios o carpetas con espacios nos encontramos con problemas cuando recogemos una salida y queremos aplicarle un comando xargs.

La solución es decirle a find que acabe sus resultados con el caracter null y avisar a xargs que le van a llegar entradas con el caracter null :

find /path/con espacios/ -type f -print0 | xargs -0 -I % ls %

Si el comando que alimenta xargs no puede añadir el carater null podemos ‘encapsular’ el resultado entre comillas con un sed :

ls /path/con espacios/ | sed 's/.*/"&"/' | xargs -I % echo %

Finalmente, si queremos usar una wildcard en un comando ejecutado por xargs tenemos que ‘encapsularlo’ en un nuevo shell :

find /path/con espacios/ -type f -print0 | xargs -0 -I % sh -c 'ls "%"*sufijoespecialqueestamosbuscando'

Owncloud regenerar sharekeys

Os pasamos un script que os permitirá una acción de owncloud muy interesantes.

Se trata de generar las sharekeys de owncloud si por algún motivo no se han generado correctamente o han quedado corruptas.

La única pega que hemos visto es que necesitas como mínimo que exista la sharekey del que comparte y a partir de aquí genera la key del fichero y las nuevas sharekey de los usuarios para que puedan ser sustituidas o movidas. Decimos pega porque puede ser que precisamente lo que necesitéis sea generar la sharekey del que comparte :/

<?php


// This script is meant to be called from CLI

// The script generates a new set of shareKeys and the encrypted file-key for an encrypted shared file
// if the share owner already has its


if ($argc<2) {
fwrite(STDERR, "Object needed\n");
exit(1);
}


// I placed the script in a subfolder of owncloud web-root
require_once '../apps/files_encryption/lib/crypt.php';


$startdir=$_SERVER['PWD'];
$SHAREOWNER = 'BoxSMC';
$OWNERPASSWORD = 'Zp5rW6+@4uSh5-7';
$OCDATADIR="/var/www/boxsmc.cloudatta.com/web/data";
$WORKDIR=$startdir . "/work-" . $SHAREOWNER ."/files_encryption";

$myAllowUsers = array($SHAREOWNER,"operez@federacio.salutmental.org");


// the file for we need new keys has to be relative to the "files" folder of the share-owner
$OBJECTNAME = $argv[1];

if (!is_file($OCDATADIR."/".$SHAREOWNER."/files_encryption/keyfiles/".$OBJECTNAME.".key")) {
        fwrite(STDERR, 'No keyfile found for Object, cannot continue');
        exit(1);
}


$FILENAME = basename($OBJECTNAME);
$OPATH = dirname($OBJECTNAME);

// first get share owners private key and decrypt it
$encryptedUserKey = file_get_contents("$OCDATADIR/$SHAREOWNER/files_encryption/$SHAREOWNER.private.key");
$decryptedUserKey = OCA\Encryption\Crypt::decryptPrivateKey($encryptedUserKey, $OWNERPASSWORD);

// now we need to decrypt the file-key, therefore we use the private key and the share key
$shareKey = file_get_contents("$OCDATADIR/$SHAREOWNER/files_encryption/share-keys/$OBJECTNAME.$SHAREOWNER.shareKey");
$encryptedKeyfile = file_get_contents("$OCDATADIR/$SHAREOWNER/files_encryption/keyfiles/$OBJECTNAME.key");
$decryptedKeyfile = OCA\Encryption\Crypt::multiKeyDecrypt($encryptedKeyfile, $shareKey, $decryptedUserKey);

// then we get the users public key
$userPubKeys = array();
foreach ( $myAllowUsers as $myAllowUser ) {
        $userPubKeys[$myAllowUser] = file_get_contents("$OCDATADIR/public-keys/" . $myAllowUser . '.public.key');
}
// generating the new keys
$multiEncKey = OCA\Encryption\Crypt::multiKeyEncrypt($decryptedKeyfile, $userPubKeys);

$newshareKeys = $multiEncKey['keys'];
$newKeyfile = $multiEncKey['data'];


// create recursive work directory structure for keyfiles and share-keys if needed
if (!is_dir($WORKDIR . "/share-keys/" . $OPATH)) {
                if (!mkdir($WORKDIR . "/share-keys/" . $OPATH, 0770, true)) {
                        fwrite(STDERR, 'Failed to create folders...');
                        exit(1);
                        }
}
if (!is_dir($WORKDIR . "/keyfiles/" . $OPATH)) {
                if(!mkdir($WORKDIR . "/keyfiles/" . $OPATH, 0770, true)) {
                        fwrite(STDERR, 'Failed to create folders...');
                        exit(1);
                }
}


// storing the key files
foreach ($newshareKeys as $userId => $newshareKey) {
        file_put_contents($WORKDIR . "/share-keys/" . $OBJECTNAME . "." . $userId . ".shareKey", $newshareKey);
}

file_put_contents($WORKDIR . "/keyfiles/" . $OBJECTNAME . ".key", $newKeyfile);

fwrite(STDERR, "Done $FILENAME\n");

Recomendamos revisar los parámetros de entrada en la fuente que nos ayudó a nosotros:

https://github.com/gnanet/misc-scripts/tree/master/owncloud (Interesante ver también: oc-sharekey-robot.sh)

Próximamente, script de descifrado de ficheros 🙂