본문 바로가기

해봐야 안다.OTL/Linux

[리눅스] MySQL 설치시 보안 개념. 및 php-5.3.0 설치

(아파치 설치는 "[리눅스] 웹서버 보안1" apache설치 관련 글을 보고 따라하기 바람. 지금 작업은 아파치가 미리 설치된 상태에서 작업.)

Mysql 설치
1. 기존 설치 패키지 검색 후 있다면 제거
2. Mysql 다운로드
3. Mysql을 운영할 User생성
4. Mysql 컴파일 설치
5. Mysql 기본 설정 및 보안 설정
6. Mysql test

 

보안의 강도를 가장 높게 하려면 Mysql 은 다음의 원칙 아래 설치/설정되어야 한다.

- Mysql 데이터 베이스는 chroot 환경에서 실행한다.
- Mysql 프로세스는 다른 시스템 프로세스가 사용하지 않는 유일한 UID/GID 로 실행한다.
-로컬 액세스만 허용한다.
-Mysql 루트 계정은 추정하기 어려운 패스워드를 설정한다.
-관리자가 어카운트 명을 변경한다.
-데이터베이스로의 익명 접속(nobody 계정 사용)을 금지한다.
-간단한 데이터베이스와 테이블을 모두 삭제한다.

 

 


./configure --prefix=/usr/local/mysql --localstatedir=/var/lib/mysql --with-charset=utf8 --sysconfdir=/etc --with-mysqld-user=mysql --with-unix-socket-path=/tmp/mysql.sock --with-mysqld-ldflags=-all-static && make && make install

 

cd /usr/local/mysql
cp share/mysql/my-medium.cnf /etc/my.cnf
ls –l /etc/my.cnf

#useradd -c "Mysql Server" -d /var/lib/mysql -s /bin/false mysql
#usermod -d /dev/null mysql
#rm -rf /var/lib/mysql/*

chown mysql.mysql /etc/my.cnf
ls –l /etc/my.cnf

vi /etc/my.cnf
27 user =mysql
46 skip-networking  //주석제거 //함으로써 로컬에서만 사용할 수 있다.
wq!

디렉터리 권한 바꾸기
chown –R root /usr/local/mysql
chgrp  -R mysql /usr/local/mysql

디렉터로 없는 사람
chmod 700 /var/lib/mysql
chown –R  mysql:mysql /var/lib/mysql


#vi /etc/profile
13: PATH=/usr/local/mysql/bin:$PATH

#source /etc/profile
#echo $PATH


[root@kimm:/usr/local/mysql]#echo $PATH
/usr/local/mysql/bin:/usr/local/mysql/bin:/usr/local/mysql/bin:/usr/local/mysql/bin:/usr/local/mysql/bin:/usr/local/mysql/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@kimm:/usr/local/mysql]#


 [root@kimm:/usr/local/mysql]#mysql_install_db --user=mysql
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h kimm.kimm.iss password 'new-password'

Alternatively you can run:
/usr/local/mysql/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/local/mysql/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/local/mysql/bin/mysqlbug script!

The latest information about MySQL is available at http://www.mysql.com/
Support MySQL by buying support/licenses from http://shop.mysql.com/

[root@kimm:/usr/local/mysql]#

 [root@kimm:/usr/local/mysql]#cp share/mysql/mysql.server /etc/init.d/mysqld
[root@kimm:/usr/local/mysql]#chkconfig --add mysqld
[root@kimm:/usr/local/mysql]#chkconfig mysqld on
[root@kimm:/usr/local/mysql]#service mysqld start
Starting MySQL                                             [  OK  ]
[root@kimm:/usr/local/mysql]#netstat -nlp |grep :3306
[root@kimm:/usr/local/mysql]#netstat -nlp |grep :mysql
[root@kimm:/usr/local/mysql]#mysql_secure_installation //enter All "y"

mysql> use mysql;
Database changed
mysql>
mysql>
mysql> select * from user;

 


Mysql 설정

관리자 어카운트 변경

디폴트로 설정되는 관리자 어카운트(root)를 무차별 대입 공격
이나 딕셔너리 공격 등으로 추측해 내기 어려운 이름으로 변경한다.
변경해 두면 설사 공격을 당하더라도 공격자는 패스워드 뿐아니라
어카운트도 추측해 내야하기 때문에 공격은 더 어려워진다.


update user set user="mydbadmin" where user="root";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 

 

히스토리 지우기
실행되는 모든 SQL 커맨드가
#cat /dev/null > ~/.mysql_history


[root@kakasi:12:53:11]#yum install libjpeg-devel libpng-devel freetype-devel gd-devel libxml2-devel -y


#wget http://kr.php.net/get/php-5.3.0.tar.gz/from/this/mirror


#tar xvfz php-5.3.0.tar.gz

#cd php-5.3.0
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/http/bin/apxs --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/http/conf/ --enable-gd-native-ttf --enable-calendar --enable-mbstring --enable-zend-multibyte --enable-sockets --enable-mod-charset=utf8 --disable-debug --with-libxml-dir=/usr --with-libexpat-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --with-xpm-dir=/usr --with-zlib-dir=/usr --with-freetype-dir=/usr --with-iconv=/usr/local && make && make install

 

파일 설치가 끝났다면 설정 파일을 apche 디렉터리로 복사 후 httpd.conf 를 설정을 해주도록 하겠다.

Safe_mode on 일 경우 파일을 이 디렉토리 및 그 하위로부터 include 하는 경우는 UID/GID 의 체크가 스킵된다.
이러한 디렉터리는 nclude_path에 포함되도록 하거나 또는 include 시에 절대 경로를 사용해야 한다.
Ecec관련의 함수를 통해 실행할 수 있는 권한을 safe_mode_include_dir에 있는 실행파일만으로 설정한다.
이 값을 on으로 설정하면 시스템 중요파일(/etc/passwd)접근을 제한 할 수 있으나 이 때문에 웹 프로그램이 정상 작동하지 않을 수 있다.

 

[root@kakasi:14:13:16]#cp php.ini-production /usr/local/http/conf/php.ini
[root@kakasi:14:13:31]#vi php.ini
[root@kakasi:14:13:36]#cd /usr/local/http/conf
[root@kakasi:14:13:40]#vi php.ini
338 safe_mode = On

 

php설치
2.Error page 또는 warning page 노출을 피하기 위한 것이다.
공격자들은 일부러 에러를 발생하여 서버에 대한 정보를 확인한다.
이를 막기 위해 아래와 같이 수정한다.
On으로 했을시 웹사이트의 파일 정보나 데이타베이스 스키마 등의
시큐리티 정보를 접속 사용자에게 표출될 수도 있기 때문이다.

531 display_errors = On --> display_errors = Off
695 register_globals = Off
344 safe_mode_gid = Off
431 expose_php = Off
874 file_uploads = Off
891allow_url_fopen = Off
748 magic_quotes_gpc = On
379 ;open_basedir =
356 safe_mode_exec_dir =
552 log_errors = On
636 ;error_log = php_errors.log
637 error_log = /weblogs/php_error.log


vi /usr/local/http/conf/httpd.conf





#service httpd restart