INSTALACJA MYSQL4.1 + CHROOT
Autor: Alan Krasiński xanax x.a.n.a.x@wp.pl 2006-05-16 09:10

Sam opis powstał w oparciu o różne list/dyskusje na stronach anglojęzycznych. Całość została zrobiona na stabilnej wersji Debiana ?sarge?. Sam nie testowałem, ale znajomy sprawdzał to samo dla mysqla w wersji 5.0 i powiedział, że też działa. Sprawdźcie dajcie znać. Docelowo miałem pisać jeszcze o instalacji apacha + chroot, ale takie dokumenty zostały już napisane, więc trzeba z tego korzystać linki są na samym końcu dokumentu

MYSQL 4.1 czyli zabawę czas zacząć.

Jeśli jeszcze nie macie zainstalowanego mysql?a to z konta roota wydajemy polecenie:

apt-get install mysql-server-4.1 
Czytanie list pakietów... Gotowe 
Budowanie drzewa zależności... Gotowe 
Zostaną zainstalowane następujące dodatkowe pakiety: 
  libdbd-mysql-perl libmysqlclient12 libmysqlclient14 mysql-client-4.1 
  mysql-common-4.1 
Sugerowane pakiety: 
  mysql-doc-4.1 
Polecane pakiety: 
  libmysqlclient14-dev 
Zostaną zainstalowane następujące NOWE pakiety: 
  libdbd-mysql-perl libmysqlclient12 libmysqlclient14 mysql-client-4.1 
  mysql-common-4.1 mysql-server-4.1 
0 zaktualizowanych, 6 nowo zainstalowanych, 0 do usunięcia i 
0 nie zaktualizowanych. 
Konieczne pobranie 15,4MB/17,3MB archiwów. 
Po rozpakowaniu zostanie dodatkowo użyte 36,5MB miejsca na dysku. 
Czy chcesz kontynuować? [T/n] 

Oczywiście dajemy T i enter po zainstalowaniu sprawdzamy czy wszystko działa.

mysqladmin ping 

i powinniśmy uzyskać odpowiedź

mysqld is alive 

Czyli mamy juz mysqla :). Teraz wybieramy sobie miejsce w którym chcielibyśmy zamknać naszego mysql?a. Ja wybrałem /servers/ więc:

cd / 
mkdir servers 
cd servers 
mkdir mysql 
cd mysql 

Teraz musimy stworzyć naszemu mysql?owi środowisko do pracy.
Jesteśmy w katalogu /servers/mysql i wykonujemy następujące komendy.

mkdir -p etc lib tmp usr/share var/lib/mysql var/log/mysql var/run/mysqld 
chown mysql:mysql var/lib/mysql 
chown mysql:root   var/log/mysql 
chown mysql:root  var/run/mysqld 
chmod 2750 var/log/mysql 
chmod 1777 tmp

Kopjujemy pare podstawowych lików:

cp /etc/localtime etc 

Potrzebujemy pliku hosts ale tylko z wpisem o localhost. Albo kopiujemy go z /etc/ i usuwamy niepotrzebne wpisy albo:

echo "127.0.0.1 localhost" > etc/hosts 

To samo robimy z passwd, potrzebujemy go ale tylko z wpisem o użytkowniku który będzie uruchamiał mysql?a:

grep "^mysql:" /etc/passwd > etc/passwd 

Teraz skopiujemy parę innych rzeczy, które napewno nam będą potrzebne:

cp /lib/libnss_compat.so.2 lib 
cp /lib/libnss_files.so.2 lib 
cp /lib/libgcc_s.so.1 lib 

Następnym krokiem będzie skopiowanie plików samego mysql?a. Czyli:

cp -p -r /usr/share/mysql usr/share/. 

I jeszcze baze danych:

cp -a -p -r /var/lib/mysql var/lib/.

Teraz na chwile zajmiemy się naszymi plikami konfiguracyjnymi. Musimy wprowadzić następujące zmiany: w pliku /etc/mysql/debian.cnf trzeba zmienić linijke:

socket = /servers/mysql/var/run/mysqld/mysqld.sock 

I w etc/mysql/my.cnf w sekcji [client]

socket = /servers/mysql/var/run/mysqld/mysqld.sock 

i w tym samym pliku znajdź linijke chroot = i zmień ją na chroot = /servers/mysql jeśli takiej lińji niebędzie poprostu ją stwórz.
Już prawie mamy to co nam do szczęscia potrzeba, ale brak nam dwóch dość dziwnych urządzeń które normalnie znajduą się w katalogu /dev/. Czyli /dev/null i /dev/log:

mkdir /servers/mysql/dev 
cd /servers/mysql /dev 
mknod null c 1 3 
chmod 666 null 
chown root:sys null 

Co do drugiego urządzenia jest ono tworzone przez syslogad i nie można go stwożyć sztucznie (przynajmniej ja nie umiem) dlatego należy zmienić sposób w jaki syslog startuje dodając mu przełącznik:

-a /servers/mysql/dev/log 

I wyłączyć i włączyć syslogd, sam restart nie pomaga nie wiem czemu. Na tym etapie możemy zrobić już /etc/init.d/mysql stop a potem start i mysql wystartuje w chrotowanym środowisku. Można teraz usuną pliki z bazą danych jak i /usr/share/mysql bo do prawidłowej pracy samego mysql?a nie są potrzebne przynajmniej z tego co do tej pory zauważyłem, ale wtedy skrypt startujący z mysql?em będzie mówił o braku pilków które tak naprawde są ale w innym miejscu widocznym dla mysql?a. W samym środowisku chroot nie stworzyliśmy także usera debian-sys-maint który niby jest potrzebny do prawidłowego działania crona, ale biorąc pod uwagę że jest w naszym normalnym systemie wszystko powinno działać normalnie. Jakby ktoś miał czas to stestować byłbym dźwięczny za uwagi. Ten sposób na zamknięcie mysql?a w danym katalogu jest mniej wygodny niż chroot np. apacha ale niestety jest to jedyny sposób jaki znalazłem. Jeśli masz już działającego apacha, chrootowanego lub nie to żeby móc cieszyć się nowym serverem mysql?a musisz edytować plik startowy /etc/init.d/mysql dodając do niego lińje mniej więcej w rejonach jak poniżej. Ważne jest to aby server mysql?a i server apacha znajdowały w tym samym systemie plików czyli na tej samej partycji. Poniżej wykomentowałem /etc/mysql/debian-start i serwer działa u mnie bez zarzutu, ale teoretycznie to powinno zostać.

done 
            if mysqld_status check_alive warn; then 
              echo "." 
ln -f  /server/mysql/var/run/mysqld/mysqld.sock 
	/servers/apache/var/run/mysqld/. 
 # Now start mysqlcheck or whatever the admin wants. 
 # /etc/mysql/debian-start 
Teraz pare uwag dotyczących samego mysql?a 

Bezpieczeństwo a konfiguracja Mysql?a

Odizolowaliśmy sobie nasz serwerek ale teraz możemy zadać sobie pare pytań dzięki czemu nasze dziecko będzie pardziej bezpieczne. Czy potrzebujemy zdalnego dostępu do naszej bazy jeśli nie to powinniśmy wyłączyć nasłuchiwanie na porcie 3306 (taki jest chyba w standarzdzie) a nasze aplikacje nadal będą mogły korzystać z mysql?a poprzez sokety. Czyli jeśli nie interesuje nas dostęp zdalny w pliku /etc/mysql/my.conf w sekcji [mysqld] dopisujemy skip-networking

Następny krok wyłączamy funkcje LOAD DATA LOCAL INFILE które włączone zmniejszają naszą odporność na ataki SQL Injection. W tym samym pliku w tej samej sekcji dopisujemy lińje set-variable=local-infile=0

Kolejnym krokiem będzie zmiana hasła administratora:

mysql -u root 
mysql>SET PASSWORD FOR root@localhost=PASSWORD('NoweHasło');

Usuwamy baze danych test :)

mysql> drop database test;

Możemy zmienić również nazwe konta administratora:

mysql> update user set user="Nowa_nazwa" where user="root"; 
mysql> flush privileges;

Można też usunąć wszystkich ?niepotrzebnych? użytkowników, dlaczego można bo nie wiem jak bardzo w systemie jest potrzebne konto debian-sys-maint które ma związek ze skryptem startującym z mysql?em /etc/mysql/debian-start To tyle jeśli chodzi o mysql?a.

Jeśli interesuje Cię opis instalacji apacha2 http://dug.net.pl/texty/apache2.pdf
Jeśli chciałbyś zamknąć apacha w chroocie http://linio.terramail.pl/apache.html