Domingo, 23 de Setembro de 2007
Joomla
Estou a fazer o meu novo projecto em Joomla.
É absolutamente 5 estrelas, tinham-me dito horrores de como construir um site com ele, mas acho que para quem como eu fez o tirocínio em CMS com o Siteseed 1, está preparado para enfrentar qualquer outro (desculpa Paulo Laureano Santos, mas tinha que dizer isto :P).
Só é pena que algumas das extensões mais interessantes sejam pagas, mas enfim, já percebi que há uma verdadeira indústria de volta do Joomla.
Mas compensa e recomendo, construir um site com isto é o mesmo que limpar o rabinho a um bebé.
A ouvir: The Carpet Crawlers, Genesis.YouTube: http://www.youtube.com/watch?v=ko0hiIYGANU
Novo Projecto
Estou a começar um novo projecto, já tenho domínio registado e muita coisa feita.
E não, não tem nada que ver com blogs :P
A ouvir: Come As You Are, Nirvana
YouTube: http://www.youtube.com/watch?v=aNqAyIijj-Y
MySQL :: It's the ctl, stupid
Er... pois, o
ctl file normal do MySQL agora não funciona, por isso, aqui vai um para arrancar e parar o MySQL
chrooted.
#!/bin/shCHROOT_MYSQL=/chroot/mysqlSOCKET=/tmp/mysql.sockMYSQLD=/usr/local/mysql/libexec/mysqldPIDFILE=/usr/local/mysql/var/`hostname`.pidCHROOTUID=/usr/local/sbin/chrootuidecho -n " mysql"case "$1" instart) nohup ${CHROOTUID} ${CHROOT_MYSQL} mysql ${MYSQLD} >/dev/null 2>&1 & sleep 5 && ln ${CHROOT_MYSQL}/${SOCKET} ;;stop) kill `cat ${CHROOT_MYSQL}/${PIDFILE}` rm -rf ${CHROOT_MYSQL}/${SOCKET} ;;*) echo "" echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;;esacexit 0A ouvir: Still Got The Blues, Gary Moore
YouTube: http://www.youtube.com/watch?v=wPA4KXKyVjU
MySQL :: Just a little tighter, honey
No seguimento do artigo sobre o MySQL em ambiente
chrooted, ainda há mais algumas coisas que podem ser feitas para aumentar a sua segurança, nomeadamente:
- Desabilitar o acesso remoto:
Adicionar ao ficheiro /etc/my.cnf, na secção [mysqld], a linha
skip-networking
Se, mesmo assim, for necessário o acesso remoto ao MySQL, por exemplo para efectuar um backup, pode utilizar-se o SSH:
# ssh mysqlserver /usr/local/mysql/bin/mysqldump -A > backup.sql
- Desabilitar a utilização do comando LOAD DATA LOCAL INFILE:
Adicionar ao /etc/my.cnf a linha
set-variable=local-infile=0
- Remover a base de dados test, bem como todos os users, excepto o root:
mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not (host="localhost" and user="root");
mysql> flush privileges;
- Agora, alterar o nome do administrador do MySQL (root) para outro:
mysql> update user set user="mydbadmin" where user="root";
mysql> flush privileges;
A ouvir: Come Away With Me, Norah Jones
YouTube: http://www.youtube.com/watch?v=aBKcKQHZXks
MySQL chrooted
Uma coisa que eu costumo fazer sempre nos servidores que instalo é "chrootar" o MySQL e aplicar-lhe alguns truques (que ficam para outro artigo) para o tornar o mais seguro possível.
Vou assumir um MySQL instalado tal como
neste artigo que escrevi anteriormente e a funcionar perfeitamente. Para o verificar, executar:
# mysql -p
Para tudo estar bem, deve aparecer o seguinte:
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)mysql> quit;
Adiante para o chroot...
É necessário criar a seguinte estrutura de directórios:
# mkdir -p /chroot/mysql/dev
# mkdir -p /chroot/mysql/etc
# mkdir -p /chroot/mysql/tmp
# mkdir -p /chroot/mysql/var/tmp
# mkdir -p /chroot/mysql/usr/local/mysql/libexec
# mkdir -p /chroot/mysql/usr/local/mysql/share/mysql/english
Os direitos de acesso a estes directórios devem ser os seguintes:
# chown -R root:sys /chroot/mysql
# chmod -R 755 /chroot/mysql
# chmod 1777 /chroot/mysql/tmp
Agora, têm que ser copiados alguns ficheiros para esta estrutura de directórios:
# cp /usr/local/mysql/libexec/mysqld
/chroot/mysql/usr/local/mysql/libexec/
# cp /usr/local/mysql/share/mysql/english/errmsg.sys
/chroot/mysql/usr/local/mysql/share/mysql/english/
# cp /etc/hosts /chroot/mysql/etc/
# cp /etc/host.conf /chroot/mysql/etc/
# cp /etc/resolv.conf /chroot/mysql/etc/
# cp /etc/group /chroot/mysql/etc/
# cp /etc/master.passwd /chroot/mysql/etc/passwords
# cp /etc/my.cnf /chroot/mysql/etc/
Dos ficheiros /chroot/mysql/etc/passwords e /chroot/mysql/etc/group,
removem-se todas as linhas, excepto as respeitantes ao MySQL.
Tem que ser criado um device file especial para o /dev/null:
# mknod /chroot/mysql/dev/null c 2 2
# chown root:sys /chroot/mysql/dev/null
# chmod 666 /chroot/mysql/dev/null
E copiar a base de dados dos previlégios do MySQL:
# cp -R /usr/local/mysql/var/ /chroot/mysql/usr/local/mysql/var
# chown -R mysql:mysql /chroot/mysql/usr/local/mysql/var
O MySQL está pronto a ser executado num ambiente chrooted:
# chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld &
Bem, quando tiver pachorra, escrevo um artigo sobre como correr o Apache também em ambiente chrooted e como integrar com o PHP e o MySQL de modo a fazer um todo coerente.
A ouvir: Yet Another Movie, Pink Floyd
YouTube: http://www.youtube.com/watch?v=Ep9RTAmH5Rw
BASH, stdout e stderr
Precisei de fazer um script (backup.sh) corrido pelo
cron daemon fazendo com o que o rsync gerasse o maior número de informação possível dos respectivos
logs (-vv) para um ficheiro – /var/log/rsync.backup.log
Os
logs precisavam de combinar o
stdout e o
stderr, portanto:
# backup.sh >> /var/log/backup.log 2>&1Contudo, apenas queria que o
output do
stderr fosse para o
cron, para em caso de erro, me ser enviado em e-mail.
Então:
# (./backup.sh > /var/log/backup.log) 2>&1 | tee -a /var/log/backup.logo que propaga o stderr para o cron e a restante tralha do
stdout para o ficheiro de logs :)
Agora só me falta organizar a informação, é uma chatice que o
stdout e o
stderr não sejam sincronizados.
A ouvir: Sorrow, Pink Floyd
YouTube: http://www.youtube.com/watch?v=njQtAC6EH8E
Os comentários são da exclusiva resonsabilidade dos seus autores.
Mário Gamito, 2004 - 2007
Todos os direitos reservados.