!!
!! 주의 - mod_ssl을 사용하려면 먼저 openssl이 설치가 되어 있어야 한다.
!! openssl의 설치방법은 생략하기로 하고 여기서는 /usr/local/ssl에 설치되었다고 가정하고 진행한다.
!!
먼저 솔라리스 8의 기본 apache를 제거한다.
# pkgrm SUNWapchr
# pkgrm SUNWapchu
# pkgrm SUNWapchd
http://www.modssl.org/ 이 주소에서 사용하는 아파치 버전에 맞는 mod_ssl을 다운로드 하고 아래와 같이 설치한다.
현재 작업디렉토리 : /tmp/src
현재 작업 디렉토리에 mod_ssl-2.8.18-1.3.31에 mod_ssl을 apache_1.3.31에 apache를 언카이브 해놓았다.
# cd mod_ssl-2.8.18-1.3.31
# ./configure --with-apache=../apache_1.3.31
# cd ..
# cd apache_1.3.31
# SSL_BASE=/usr/local/ssl ./configure --prefix=/usr/local/apache \
> --enable-module=ssl --enable-module=all --enable-shared=max --disable-module=auth_db
# make
# make certificate
# make install
SSL을 사용하려면 apachectl startssl로 기동해야하고(키를 만들때 입력했던 패스워드를 입력해야 한다) 클라이언트에서는
http:// 대신에 https:// 를 사용해서 443 포트로 접속을 해야 한다. 서버의 httpd.conf 파일에는 SSL이 로딩되었을때를 위한
가상호스트 설정 부분이 있다. 사이트 내용중에 보안이 요구되는 구역은 이쪽으로 빼면 된다.
예)
##
## SSL Virtual Host Context
##
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "/usr/local/www/ssl_www/webmail"
ServerName mail.unixedu.org
ServerAdmin admin@unixedu.org
ErrorLog /usr/local/apache/logs/error_log
TransferLog /usr/local/apache/logs/access_log
.. 이하 생략..
위 예에서 클라이언트가 https://mail.unixedu.org로 접속하면 SSL을 사용한 보안 접속을 사용하게 된다. (https에 주의!!)
위에서 configure 옵션들은 apache를 DSO 방식으로 컴파일 하는 것이다. 나중에 모듈을 추가 할 수 있다.
이 방법은 PHP,JSP등과 연동하기 위해 사용하는 방법이다.
참고문서(12.pdf, httpd.conf)를 참조해서 설정파일을 설정 한다.
- ServerAdmin 설정
- ServerName 설정
- Document ROOT의 변경
- Apache를 실행 할 user, group을 nobody로 설정
- cgi-bin 디렉토리의 파일 제거
- htdocs 디렉토리의 파일 제거
- /usr/local/apache 디렉토리에 root와 nobody만 access 할 수 있도록 퍼미션 조정
- 각 유저별로 홈페이지를 구축 할 수 있도록 조정
- LogLevel을 error로 변경
- Nimda웜등 각종 웜의 로그 필터링
- 디폴트 랭귀지 설정
- server-status 설정
등 위와 같은 설정을 한다.
아래의 명령으로 설정 파일의 Syntax에 문제가 없나 살펴 보고,
# /usr/local/apache/bin/apachectl configtest
아파치를 구동 한다.
# /usr/local/apache/bin/apachectl start
아래의 스크립트를 작성해서 부팅때마다 아파치가 실행 될 수 있도록 한다.
# vi /etc/init.d/apache
#!/sbin/sh
#
# made by Ki-Tae, Kim
#
case "$1" in
'start')
/usr/local/apache/bin/apachectl start
;;
'stop')
/usr/local/apache/bin/apachectl stop
;;
*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit 0
~
~
#
# ln /etc/init.d/apache /etc/rc3.d/S50apache
# ln /etc/init.d/apache /etc/rc2.d/K16apache
# ln /etc/init.d/apache /etc/rc1.d/K16apache
# ln /etc/init.d/apache /etc/rcS.d/K16apache
# chown root:sys apache
# chmod 744 apache
* 대역폭과 트래픽을 제어하기 위해 mod_bandwidth와 mod_throttle 모듈을 사용한다. 이를 위해서는 apache가 DSO 방식으로 컴파일되야 한다.
(92.txt 참조)
@ Mysql
!! MySQL 사이트에서 권고하는 방법!!
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
!!주의!!
mysql을 컴파일 하려면 gnu-tar와 gnu-make를 사용해야 한다. 솔라리스의 tar와 make를 쓰면 에러난다.
우선 mysql이라는 유저와 그룹을 등록 한다.
그리고 mysql이라는 유저로 소스를 configure하고 compile까지 한다음에 root권한으로 install한다.
# LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/share/lib:/usr/local/share/lib: /usr/local/include:/usr/lib/libp/
# export LD_LIBRARY_PATH
# ./configure --prefix=/usr/local/mysql --libexecdir=/usr/local/mysql/bin --datadir=/usr/local/mysql/msg --localstatedir=/usr/local/mysql/data --includedir=/usr/local/mysql/include --enable-large-files --with-charset=euckr --with-mysqld-user=mysql
# gnu-make
# gnu-make install (이 부분만 root로..)
# chown -R mysql:mysql /usr/local/mysql
이렇게 오너를 변경 해줘야지만 mysql이 제대로 스타트 된다. 왜냐면 mysql 유저로 구동되기 때문에 각종 임시파일들의 소유주가 mysql인데
디렉토리가 모두 root의 소유이므로 mysql이 구동되지를 못한다. 그룹을 mysql로 바꾸는 것은 중요한 DB(mysql)의 퍼미션이 660으로 되어 있기 때문이다.
# /usr/local/mysql/bin/mysql_install_db
# /usr/local/mysql/bin/safe_mysqld &
# /usr/local/mysql/bin/mysql mysql
(위에서 뒤의 mysql은 관리 데이터베이스를 의미한다. 즉, mysql이라는 데이터베이스로서 패스워드나 유저같은 mysql을 운영하는데 필요한 데이터를 보관하고 있다.
아직은 mysql root패스워드가 지정되지 않아서 위와 같이 접속 할 수 있다.)
!!!!!!!!!!!!!!!!!!!!!!
!! 버전업 하면서 DB 이전 하는 경우만 아래 한 줄 수행 (db_backup.sql은 --all-databases 백업받은 파일)
!!!!!!!!!!!!!!!!!!!!!!
# mysql -p < db_backup.sql
# /usr/local/mysql/bin/mysqladmin -u root password 'Mysql_Root_패스워드'
# /usr/local/mysql/bin/mysqladmin -u root -h ultra password 'Mysql_Root_패스워드'
# /usr/local/mysql/bin/mysql -p mysql
(mysql root 패스워드가 지정 되었으므로 위와 같이 접속해야 한다.
!!!!!!!!
!!주의!!
!!!!!!!!
절대로 -p 다음에 패스워드를 바로 붙여 쓰지 않는다. ps나 w에서 패스워드가 보이게 된다.
나중에 root패스워드를 바꿀때는,
# /usr/local/mysql/bin/mysqladmin -u root -p password 'Mysql_Root_패스워드'
# /usr/local/mysql/bin/mysqladmin -u root -p -h ultra password 'Mysql_Root_패스워드'
위에서 -p 뒤에 password는 패스워드를 넣으라는 것이 아니라 password라는 단어 자체를 써야 한다.
/etc/init.d/에 스크립트를 만들어서 부팅시마다 mysql이 구동되게 한다.
-=- MySQL 메뉴얼 -=-
# /usr/local/mysql/bin/mysql -p mysql
위의 명령으로 관리 데이터베이스에 접속 한다.
mysql> show tables;
위의 명령으로 관리 데이터베이스에 있는 테이블을 확인 한다.
여기서 주의 깊게 봐야 할 것이 user와 db 테이블이다.
mysql> select *from user;
mysql> select *from db;
위의 명령으로 user와 db 테이블에 등록된 컬럼을 확인 할 수 있다. 현재는 추가 한것이 없으므로 mysql root에 관한 컬럼만 있을 것이다.
mysql 데이타베이스를 추가하고 유저를 추가하는 것은 위의 db, user 테이블에 컬럼을 추가하는 것이다.
아래의 명령으로 데이터베이스와 유저를 추가할 수 있다.
1. mysql> create database 데이터베이스_이름;
2. mysql> insert into uservalues('localhost','등록할유저네임',password('유저패스워드'),'n','n','n','n','n','n','n','n','n','n','n','n','n','n');
3. mysql> insert into db values('localhost','데이터베이스_이름','등록된유저네임','y','y','y','y','y','y','y','y','y','y');
4. mysql> flush privileges;
5. mysql> exit;
6. # mysql -u유저네임 -p 데이터베이스_이름
7. mysql> create table kkt(num int(10) auto_increment, name varchar(10), address varchar(10), primary key(num));
설명)
1번에서 새로운 DB를 생성한다.
2번에서 새로운 MySQL 유저를 생성한다. 'n'이 14개가 있는데 이는 다른 DB에 접근 할 수 있는 권한을 설정하는 부분이므로 모두 n으로 설정한다.
3번에서 새로 생성된 DB를 사용 할 수 있는 유저를 등록 한다. 'y'가 10개가 있는데 이는 자기 하부에 테이블에 관한 권한을 설정하는 부분이므로 모두 y로 설정 한다.
4번에서 새로 생성된 DB를 활성화 시킨다.
6번에서 새로 생선된 DB에 새로 생성한 유저를 통해서 접속 한다.
참고)
같은 DB를 사용 할 수 있는 유저가 여럿이 있을 경우 각 유저들은 다른 유저가 생성한 테이블의 컬럼들을 지울 수도 있다. 그러므로 여러 유저에게 DB를 할당하는 경우에는 처음부터 다른 DB를 만들어야 한다.
테이블 만들기
CREATE TABLE test (
name VARCHAR(15),
email VARCHAR(25),
content text,
wdate date,
phome_number INT,
ID NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ID)
)
-----------------------------------------------------------------
칼럼 입력하기
insert into test values ('suhoi', '내용 ??', 221, NULL)
문자열은 ' ' , 숫자는 그냥 씀.
-----------------------------------------------------------------
칼럼 선택하기
select number,content from test
select * from test where number=$number
-----------------------------------------------------------------
레코드 삭제하기
delete from test where number=$number
-----------------------------------------------------------------
칼럼 데이터 수정하기
update test set num2=2+1 where number=2
(게시판에서 조회수 늘릴때 사용 주키 number 가 2일때 2의 조회수인 num2 를 올린다.)
-----------------------------------------------------------------
데이터 정렬하기 ( 오름차순,내림차순 )
select writer,wdate from test order by number desc
select writer from test order by number desc limit 0,5
( 0번째 부터 5번째 까지만 query 하기 )
-----------------------------------------------------------------
데이터 검색하기
select writer like '%아무%'
-----------------------------------------------------------------
테이블 수정하기
alter table test rename guest7
( test 란 테이블 이름을 guest7 으로 바꾸기 )
alter table guest7 add wdate date
( wdate 란 칼럼 추가하기 )
alter table guest7 drop wdate
( wdate 칼럼 지우기 )
-----------------------------------------------------------------
@ PHP
PHP 컴파일시 apache 2.x를 서포트하기 위해서는 --with-apxs2로 옵션을 준다.
imap은 uw-imap을 받아서 아래와 같이 설치하면 된다.
# make PLATFORMNAME (레드햇은 make lnp)
# mv imap/imapd ipop/ipop?d /usr/local/sbin
# pwd
/export/home/ktkim/uw-imap
아래서 PHP를 컴파일 할 때 --with-imap=/export/home/ktkim/uw-imap 와 같이uw-imap이 언아카이브 된 디렉토리를 적어줘야 한다. c-client 디렉토리 안에 있는 헤더 파일들이 필요한데c-client 디렉토리가 심볼릭 링크라서 처음 언아카이브 된 디렉토리에서 다른 곳으로 이동하면 안된다.
# ./configure --with-apxs=/usr/local/apache/bin/apxs \
--enable-magic-quotes \
--enable-mbstring \
--enable-mbregex \
--with-gd \
--with-ttf \
--enable-calendar=shared \
--disable-debug \
--disable-libxml \
--with-config-file-path=/usr/local/apache/conf
--with-zlib \
--with-mysql=/usr/local/mysql \
--with-imap=/export/home/ktkim/uw-imap-2004 \
--with-imap-ssl=/usr/local/ssl \
--enable-ftp \
--enable-sockets
# gnu-make; gnu-make install
# cp php.ini-dist /usr/local/apache/conf/php.ini
(php.ini의 디폴트 경로는 /usr/local/lib이다. 그러나 위의 configure에서 --with-config-file-path에서 경로를 다른곳으로 지정 했기 때문에 그 경로로 복사해야 적용 된다.)
# vi /usr/local/apache/conf/httpd.conf
(AddType 검색해서 밑에 아래의 내용을 추가한다.)
AddType application/x-httpd-php .php .php3 .PHP .html .htm
AddType text/html .shtml
AddHandler Server-parsed .shtml
# /usr/local/apache/bin/apachectl stop
# /usr/local/apache/bin/apachectl start
# vi /usr/local/apache/conf/php.ini
(php.ini에서 register globals를 On으로 설정 한다.)
위의 설정을 해줘야지 POST를 사용해서 값을 다른 파일로 넘겨 줄 수 있다.
# vi /usr/local/www/test.php
<?
echo phpinfo();
?>
브라우저에서 확인해 본다. (http://uez.codns.com/test.php)
공유된 서버상에서 유저들에게 PHP를 제공하기 위해 아래와 같은 보안 조치를 취한다.
아래 내용은 php.ini파일 상에서 변경되어야 할 부분들만 옮겨놓은 것이다.
(유저들이 각자의 디렉토리에서 파일을 생성하고 read할수 있게 하기 위해 safe_mode의 사용은 하지 않았다. 하지만 php.net에서 safe_mode에 대해서 참고해보는것이 좋다.)
open_basedir ="/export/home:/usr/local/www" # 여기에 기재된 디렉토리와 그 하부 디렉토리상에서만 모든 file operation이 가능하다(open 포함).
disable_functions ="phpinfo, system, exec, passthru, popen, escapeshellcmd, escapeshellarg" # 여기에 기재된 함수들의 사용을 금지한다.
그리고 httpd.conf에서,
- DocumentRoot를 /usr/local/www/security_www 로 바꾼다.
- Start 파일네임(index.html)에 start.htm을 추가한다.
- DocumentRoot에 있는 index.html을 start.htm으로 바꾸고 홈페이지 소스중에 홈으로 돌아가는부분에서는 도메인까지만 사용하도록 한다. (ex> sun.codns.com 잘못된 예>sun.codns.com/start.htm)
XX # chmod 700 /usr/local/apache (이렇게 하면 해당 디렉토리에 놔둔 패스워드 파일을 못읽는다.)
OO # chmod 710 /usr/local/apache
# chmod 710 /usr/local/www
# chgrp nobody /usr/local/www /usr/local/apache
XX # chmod 701 /export/home (이렇게 하면 bash 실행시 에러가 나며, man page 실행시 에러 발생 한다.)
OO # chmod 705 /export/home
# chgrp root /export/home
# apachectl restart
위와 같이 하면 유저는 DocumentRoot를 알지 못한다. 그러므로 파일 네임 유추를 통해 PHP로 read해서 크래킹을 시도하는것을 막을 수 있다.
** Zend Optimizer를 설치해서 PHP 속도를 가속할 수 있다. Optimizer 없이 25초 걸리는 소스를 Optimizer 설치 후 10초만에 끝낼수 있다.
http://www.zend.com 에서 solaris-sparc 용 Zend를 구할 수 있다. 아카이브를 해제하면 install파일이 있는데 실행후 따라가면 설치가 끝난다.
phpinfo를 했을때 with Optimizer.... 이런 내용이 보이면 정상적으로 설치가 된것이다.
아래의 소스를 설치 전/후로 비교를 해본다.
<?
$start = time();
for ( $i = 1; $i <= 5000000; $i++ );
$t_time = time() - $start;
echo "Time : $t_time";
?>
썬머신에서 전에는 25초 설치후에는 10초 나왔다.
** 호스팅을 할 때 서버의 collision rate를 유심히 봐야한다. 이 값이 너무 높을 경우에는 홈페이지 그림이 뛰엄뛰엄 로딩이 된다던가 하는
부작용이 나타난다. 또한 아파치 프로세스가 많이 떠있을때 요청을 받으면 빠르게 반응한다. 그러므로 아파치 spare 프로세서의 값을 20 , 40 , 20 으로 잡아주는것이 좋다.
!! 주의 - mod_ssl을 사용하려면 먼저 openssl이 설치가 되어 있어야 한다.
!! openssl의 설치방법은 생략하기로 하고 여기서는 /usr/local/ssl에 설치되었다고 가정하고 진행한다.
!!
먼저 솔라리스 8의 기본 apache를 제거한다.
# pkgrm SUNWapchr
# pkgrm SUNWapchu
# pkgrm SUNWapchd
http://www.modssl.org/ 이 주소에서 사용하는 아파치 버전에 맞는 mod_ssl을 다운로드 하고 아래와 같이 설치한다.
현재 작업디렉토리 : /tmp/src
현재 작업 디렉토리에 mod_ssl-2.8.18-1.3.31에 mod_ssl을 apache_1.3.31에 apache를 언카이브 해놓았다.
# cd mod_ssl-2.8.18-1.3.31
# ./configure --with-apache=../apache_1.3.31
# cd ..
# cd apache_1.3.31
# SSL_BASE=/usr/local/ssl ./configure --prefix=/usr/local/apache \
> --enable-module=ssl --enable-module=all --enable-shared=max --disable-module=auth_db
# make
# make certificate
# make install
SSL을 사용하려면 apachectl startssl로 기동해야하고(키를 만들때 입력했던 패스워드를 입력해야 한다) 클라이언트에서는
http:// 대신에 https:// 를 사용해서 443 포트로 접속을 해야 한다. 서버의 httpd.conf 파일에는 SSL이 로딩되었을때를 위한
가상호스트 설정 부분이 있다. 사이트 내용중에 보안이 요구되는 구역은 이쪽으로 빼면 된다.
예)
##
## SSL Virtual Host Context
##
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "/usr/local/www/ssl_www/webmail"
ServerName mail.unixedu.org
ServerAdmin admin@unixedu.org
ErrorLog /usr/local/apache/logs/error_log
TransferLog /usr/local/apache/logs/access_log
.. 이하 생략..
위 예에서 클라이언트가 https://mail.unixedu.org로 접속하면 SSL을 사용한 보안 접속을 사용하게 된다. (https에 주의!!)
위에서 configure 옵션들은 apache를 DSO 방식으로 컴파일 하는 것이다. 나중에 모듈을 추가 할 수 있다.
이 방법은 PHP,JSP등과 연동하기 위해 사용하는 방법이다.
참고문서(12.pdf, httpd.conf)를 참조해서 설정파일을 설정 한다.
- ServerAdmin 설정
- ServerName 설정
- Document ROOT의 변경
- Apache를 실행 할 user, group을 nobody로 설정
- cgi-bin 디렉토리의 파일 제거
- htdocs 디렉토리의 파일 제거
- /usr/local/apache 디렉토리에 root와 nobody만 access 할 수 있도록 퍼미션 조정
- 각 유저별로 홈페이지를 구축 할 수 있도록 조정
- LogLevel을 error로 변경
- Nimda웜등 각종 웜의 로그 필터링
- 디폴트 랭귀지 설정
- server-status 설정
등 위와 같은 설정을 한다.
아래의 명령으로 설정 파일의 Syntax에 문제가 없나 살펴 보고,
# /usr/local/apache/bin/apachectl configtest
아파치를 구동 한다.
# /usr/local/apache/bin/apachectl start
아래의 스크립트를 작성해서 부팅때마다 아파치가 실행 될 수 있도록 한다.
# vi /etc/init.d/apache
#!/sbin/sh
#
# made by Ki-Tae, Kim
#
case "$1" in
'start')
/usr/local/apache/bin/apachectl start
;;
'stop')
/usr/local/apache/bin/apachectl stop
;;
*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit 0
~
~
#
# ln /etc/init.d/apache /etc/rc3.d/S50apache
# ln /etc/init.d/apache /etc/rc2.d/K16apache
# ln /etc/init.d/apache /etc/rc1.d/K16apache
# ln /etc/init.d/apache /etc/rcS.d/K16apache
# chown root:sys apache
# chmod 744 apache
* 대역폭과 트래픽을 제어하기 위해 mod_bandwidth와 mod_throttle 모듈을 사용한다. 이를 위해서는 apache가 DSO 방식으로 컴파일되야 한다.
(92.txt 참조)
@ Mysql
!! MySQL 사이트에서 권고하는 방법!!
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
!!주의!!
mysql을 컴파일 하려면 gnu-tar와 gnu-make를 사용해야 한다. 솔라리스의 tar와 make를 쓰면 에러난다.
우선 mysql이라는 유저와 그룹을 등록 한다.
그리고 mysql이라는 유저로 소스를 configure하고 compile까지 한다음에 root권한으로 install한다.
# LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/share/lib:/usr/local/share/lib: /usr/local/include:/usr/lib/libp/
# export LD_LIBRARY_PATH
# ./configure --prefix=/usr/local/mysql --libexecdir=/usr/local/mysql/bin --datadir=/usr/local/mysql/msg --localstatedir=/usr/local/mysql/data --includedir=/usr/local/mysql/include --enable-large-files --with-charset=euckr --with-mysqld-user=mysql
# gnu-make
# gnu-make install (이 부분만 root로..)
# chown -R mysql:mysql /usr/local/mysql
이렇게 오너를 변경 해줘야지만 mysql이 제대로 스타트 된다. 왜냐면 mysql 유저로 구동되기 때문에 각종 임시파일들의 소유주가 mysql인데
디렉토리가 모두 root의 소유이므로 mysql이 구동되지를 못한다. 그룹을 mysql로 바꾸는 것은 중요한 DB(mysql)의 퍼미션이 660으로 되어 있기 때문이다.
# /usr/local/mysql/bin/mysql_install_db
# /usr/local/mysql/bin/safe_mysqld &
# /usr/local/mysql/bin/mysql mysql
(위에서 뒤의 mysql은 관리 데이터베이스를 의미한다. 즉, mysql이라는 데이터베이스로서 패스워드나 유저같은 mysql을 운영하는데 필요한 데이터를 보관하고 있다.
아직은 mysql root패스워드가 지정되지 않아서 위와 같이 접속 할 수 있다.)
!!!!!!!!!!!!!!!!!!!!!!
!! 버전업 하면서 DB 이전 하는 경우만 아래 한 줄 수행 (db_backup.sql은 --all-databases 백업받은 파일)
!!!!!!!!!!!!!!!!!!!!!!
# mysql -p < db_backup.sql
# /usr/local/mysql/bin/mysqladmin -u root password 'Mysql_Root_패스워드'
# /usr/local/mysql/bin/mysqladmin -u root -h ultra password 'Mysql_Root_패스워드'
# /usr/local/mysql/bin/mysql -p mysql
(mysql root 패스워드가 지정 되었으므로 위와 같이 접속해야 한다.
!!!!!!!!
!!주의!!
!!!!!!!!
절대로 -p 다음에 패스워드를 바로 붙여 쓰지 않는다. ps나 w에서 패스워드가 보이게 된다.
나중에 root패스워드를 바꿀때는,
# /usr/local/mysql/bin/mysqladmin -u root -p password 'Mysql_Root_패스워드'
# /usr/local/mysql/bin/mysqladmin -u root -p -h ultra password 'Mysql_Root_패스워드'
위에서 -p 뒤에 password는 패스워드를 넣으라는 것이 아니라 password라는 단어 자체를 써야 한다.
/etc/init.d/에 스크립트를 만들어서 부팅시마다 mysql이 구동되게 한다.
-=- MySQL 메뉴얼 -=-
# /usr/local/mysql/bin/mysql -p mysql
위의 명령으로 관리 데이터베이스에 접속 한다.
mysql> show tables;
위의 명령으로 관리 데이터베이스에 있는 테이블을 확인 한다.
여기서 주의 깊게 봐야 할 것이 user와 db 테이블이다.
mysql> select *from user;
mysql> select *from db;
위의 명령으로 user와 db 테이블에 등록된 컬럼을 확인 할 수 있다. 현재는 추가 한것이 없으므로 mysql root에 관한 컬럼만 있을 것이다.
mysql 데이타베이스를 추가하고 유저를 추가하는 것은 위의 db, user 테이블에 컬럼을 추가하는 것이다.
아래의 명령으로 데이터베이스와 유저를 추가할 수 있다.
1. mysql> create database 데이터베이스_이름;
2. mysql> insert into uservalues('localhost','등록할유저네임',password('유저패스워드'),'n','n','n','n','n','n','n','n','n','n','n','n','n','n');
3. mysql> insert into db values('localhost','데이터베이스_이름','등록된유저네임','y','y','y','y','y','y','y','y','y','y');
4. mysql> flush privileges;
5. mysql> exit;
6. # mysql -u유저네임 -p 데이터베이스_이름
7. mysql> create table kkt(num int(10) auto_increment, name varchar(10), address varchar(10), primary key(num));
설명)
1번에서 새로운 DB를 생성한다.
2번에서 새로운 MySQL 유저를 생성한다. 'n'이 14개가 있는데 이는 다른 DB에 접근 할 수 있는 권한을 설정하는 부분이므로 모두 n으로 설정한다.
3번에서 새로 생성된 DB를 사용 할 수 있는 유저를 등록 한다. 'y'가 10개가 있는데 이는 자기 하부에 테이블에 관한 권한을 설정하는 부분이므로 모두 y로 설정 한다.
4번에서 새로 생성된 DB를 활성화 시킨다.
6번에서 새로 생선된 DB에 새로 생성한 유저를 통해서 접속 한다.
참고)
같은 DB를 사용 할 수 있는 유저가 여럿이 있을 경우 각 유저들은 다른 유저가 생성한 테이블의 컬럼들을 지울 수도 있다. 그러므로 여러 유저에게 DB를 할당하는 경우에는 처음부터 다른 DB를 만들어야 한다.
테이블 만들기
CREATE TABLE test (
name VARCHAR(15),
email VARCHAR(25),
content text,
wdate date,
phome_number INT,
ID NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ID)
)
-----------------------------------------------------------------
칼럼 입력하기
insert into test values ('suhoi', '내용 ??', 221, NULL)
문자열은 ' ' , 숫자는 그냥 씀.
-----------------------------------------------------------------
칼럼 선택하기
select number,content from test
select * from test where number=$number
-----------------------------------------------------------------
레코드 삭제하기
delete from test where number=$number
-----------------------------------------------------------------
칼럼 데이터 수정하기
update test set num2=2+1 where number=2
(게시판에서 조회수 늘릴때 사용 주키 number 가 2일때 2의 조회수인 num2 를 올린다.)
-----------------------------------------------------------------
데이터 정렬하기 ( 오름차순,내림차순 )
select writer,wdate from test order by number desc
select writer from test order by number desc limit 0,5
( 0번째 부터 5번째 까지만 query 하기 )
-----------------------------------------------------------------
데이터 검색하기
select writer like '%아무%'
-----------------------------------------------------------------
테이블 수정하기
alter table test rename guest7
( test 란 테이블 이름을 guest7 으로 바꾸기 )
alter table guest7 add wdate date
( wdate 란 칼럼 추가하기 )
alter table guest7 drop wdate
( wdate 칼럼 지우기 )
-----------------------------------------------------------------
@ PHP
PHP 컴파일시 apache 2.x를 서포트하기 위해서는 --with-apxs2로 옵션을 준다.
imap은 uw-imap을 받아서 아래와 같이 설치하면 된다.
# make PLATFORMNAME (레드햇은 make lnp)
# mv imap/imapd ipop/ipop?d /usr/local/sbin
# pwd
/export/home/ktkim/uw-imap
아래서 PHP를 컴파일 할 때 --with-imap=/export/home/ktkim/uw-imap 와 같이uw-imap이 언아카이브 된 디렉토리를 적어줘야 한다. c-client 디렉토리 안에 있는 헤더 파일들이 필요한데c-client 디렉토리가 심볼릭 링크라서 처음 언아카이브 된 디렉토리에서 다른 곳으로 이동하면 안된다.
# ./configure --with-apxs=/usr/local/apache/bin/apxs \
--enable-magic-quotes \
--enable-mbstring \
--enable-mbregex \
--with-gd \
--with-ttf \
--enable-calendar=shared \
--disable-debug \
--disable-libxml \
--with-config-file-path=/usr/local/apache/conf
--with-zlib \
--with-mysql=/usr/local/mysql \
--with-imap=/export/home/ktkim/uw-imap-2004 \
--with-imap-ssl=/usr/local/ssl \
--enable-ftp \
--enable-sockets
# gnu-make; gnu-make install
# cp php.ini-dist /usr/local/apache/conf/php.ini
(php.ini의 디폴트 경로는 /usr/local/lib이다. 그러나 위의 configure에서 --with-config-file-path에서 경로를 다른곳으로 지정 했기 때문에 그 경로로 복사해야 적용 된다.)
# vi /usr/local/apache/conf/httpd.conf
(AddType 검색해서 밑에 아래의 내용을 추가한다.)
AddType application/x-httpd-php .php .php3 .PHP .html .htm
AddType text/html .shtml
AddHandler Server-parsed .shtml
# /usr/local/apache/bin/apachectl stop
# /usr/local/apache/bin/apachectl start
# vi /usr/local/apache/conf/php.ini
(php.ini에서 register globals를 On으로 설정 한다.)
위의 설정을 해줘야지 POST를 사용해서 값을 다른 파일로 넘겨 줄 수 있다.
# vi /usr/local/www/test.php
<?
echo phpinfo();
?>
브라우저에서 확인해 본다. (http://uez.codns.com/test.php)
공유된 서버상에서 유저들에게 PHP를 제공하기 위해 아래와 같은 보안 조치를 취한다.
아래 내용은 php.ini파일 상에서 변경되어야 할 부분들만 옮겨놓은 것이다.
(유저들이 각자의 디렉토리에서 파일을 생성하고 read할수 있게 하기 위해 safe_mode의 사용은 하지 않았다. 하지만 php.net에서 safe_mode에 대해서 참고해보는것이 좋다.)
open_basedir ="/export/home:/usr/local/www" # 여기에 기재된 디렉토리와 그 하부 디렉토리상에서만 모든 file operation이 가능하다(open 포함).
disable_functions ="phpinfo, system, exec, passthru, popen, escapeshellcmd, escapeshellarg" # 여기에 기재된 함수들의 사용을 금지한다.
그리고 httpd.conf에서,
- DocumentRoot를 /usr/local/www/security_www 로 바꾼다.
- Start 파일네임(index.html)에 start.htm을 추가한다.
- DocumentRoot에 있는 index.html을 start.htm으로 바꾸고 홈페이지 소스중에 홈으로 돌아가는부분에서는 도메인까지만 사용하도록 한다. (ex> sun.codns.com 잘못된 예>sun.codns.com/start.htm)
XX # chmod 700 /usr/local/apache (이렇게 하면 해당 디렉토리에 놔둔 패스워드 파일을 못읽는다.)
OO # chmod 710 /usr/local/apache
# chmod 710 /usr/local/www
# chgrp nobody /usr/local/www /usr/local/apache
XX # chmod 701 /export/home (이렇게 하면 bash 실행시 에러가 나며, man page 실행시 에러 발생 한다.)
OO # chmod 705 /export/home
# chgrp root /export/home
# apachectl restart
위와 같이 하면 유저는 DocumentRoot를 알지 못한다. 그러므로 파일 네임 유추를 통해 PHP로 read해서 크래킹을 시도하는것을 막을 수 있다.
** Zend Optimizer를 설치해서 PHP 속도를 가속할 수 있다. Optimizer 없이 25초 걸리는 소스를 Optimizer 설치 후 10초만에 끝낼수 있다.
http://www.zend.com 에서 solaris-sparc 용 Zend를 구할 수 있다. 아카이브를 해제하면 install파일이 있는데 실행후 따라가면 설치가 끝난다.
phpinfo를 했을때 with Optimizer.... 이런 내용이 보이면 정상적으로 설치가 된것이다.
아래의 소스를 설치 전/후로 비교를 해본다.
<?
$start = time();
for ( $i = 1; $i <= 5000000; $i++ );
$t_time = time() - $start;
echo "Time : $t_time";
?>
썬머신에서 전에는 25초 설치후에는 10초 나왔다.
** 호스팅을 할 때 서버의 collision rate를 유심히 봐야한다. 이 값이 너무 높을 경우에는 홈페이지 그림이 뛰엄뛰엄 로딩이 된다던가 하는
부작용이 나타난다. 또한 아파치 프로세스가 많이 떠있을때 요청을 받으면 빠르게 반응한다. 그러므로 아파치 spare 프로세서의 값을 20 , 40 , 20 으로 잡아주는것이 좋다.

comments
comments rss (+댓글 쓰러가기)