2012-10-07
DBMS/오라클]Linux Oracle 10g 자동 시작 하기
Linux Oracle 10g 자동 시작 하기
자신이 설치한 DB 타겟으로 걸면 된다.
수동으로 하는게 일단 좋을듯 합니다. 다만 급해서 리부팅 후에 자동으로 하는게 필요하다면 이방법을 사용하시면 될겁니다.
1. 그냥 하는 방법
step1. root 계정에서 /etc/rc.d 로 이동하여 rc.local 파일을 vi 편집기로 열어 줍니다.
(rc.local 파일은 리눅스의 초기부팅설정화일로서 DOS의 Autoexec.bat 같은 것이라 보시면 됩니다)
step2. 파일의 마지막 부분에 실행하고 싶은 명령어(경로포함) 를 기록합니다
/etc/rc.d/rc.local
rdate -s time.bora.net
su - oracle -c '/home/oracle/product/10.2.0/db_1/bin/lsnrctl start'
sleep 10
su - oracle -c '/home/oracle/product/10.2.0/db_1/bin/dbstart'
sleep 30
su - oracle -c '/home/oracle/product/10.2.0/db_1/bin/emctl start dbconsole'
==========================================================================
리눅스에서 재부팅시 오라클을 자동으로 시작하고 종료하는 방법
/etc/oratab의 내용 중 다음을 변경
/etc/oratab
ORCL:/home/oracle/product/10.2.0/db_1:Y
==================================================================
2. 스크립트 실행 방법
(1) 스크립트 하나 만든다.
#!/bin/bash
source /etc/profile
# oracle start
su - oracle -c '/home/oracle/product/10.2.0/db_1/bin/lsnrctl start'
sleep 5
su - oracle -c 'sqlplus "/as sysdba"' << EOF
startup
exit
EOF
sleep 60
su - oracle -c '/home/oracle/product/10.2.0/db_1/bin/emctl start dbconsole'
=================================================================================
(2) 리눅스 start 하면 스크립트 돌아게 만든다.
/etc/rc.d/rc.local
#oracle start
/root/bin/oracle_start.sh
==============================================================
2012-10-06
DBMS/MySQL]권한설정
이글은 proftp DB생성과 유저등에 관한 것을 예로 설명하는 것입니다.
1.mysql설정을 한뒤 'proftp'데이터베이스 생성합니다.
#/usr/local/bin/mysqladmin -u proftp -p create proftp
==> 왠일인지 mysqladmin 이 mysql서버에 접근을 못하게 되어있다. 그래서 직접 mysql로 서버에 접속을 한다음 쿼리문장으로 처리
1.1 db유저 생성
1.1.1 db테이블에 proftp사용자 등록
db 테이블 구조
+-----------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host | char(60) | | PRI | | |
| Db | char(64) | | PRI | | |
| User | char(16) | | PRI | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
+-----------------------+---------------+------+-----+---------+-------+
mysql> insert into db values('%', 'proftp', 'proftp', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
1.1.2 user테이블에 proftp사용자의 권한 추가
user 테이블 구조
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host | varchar(60) | | PRI | | |
| User | varchar(16) | | PRI | | |
| Password | varchar(41) | | | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Reload_priv | enum('N','Y') | | | N | |
| Shutdown_priv | enum('N','Y') | | | N | |
| Process_priv | enum('N','Y') | | | N | |
| File_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Show_db_priv | enum('N','Y') | | | N | |
| Super_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
| Execute_priv | enum('N','Y') | | | N | |
| Repl_slave_priv | enum('N','Y') | | | N | |
| Repl_client_priv | enum('N','Y') | | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | | | | |
| ssl_cipher | blob | | | | |
| x509_issuer | blob | | | | |
| x509_subject | blob | | | | |
| max_questions | int(11) unsigned | | | 0 | |
| max_updates | int(11) unsigned | | | 0 | |
| max_connections | int(11) unsigned | | | 0 | |
+-----------------------+-----------------------------------+------+-----+---------+-------+
mysql>INSERT INTO user VALUES('localhost','proftp',PASSWORD('비밀번호 '),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
mysql>INSERT INTO user VALUES('lnx68.thesoft.co.kr','proftp',PASSWORD(비밀번호 '),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
mysql>INSERT INTO user VALUES('%','proftp',PASSWORD('비밀번호 '),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
host 테이블 구조
+-----------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host | char(60) | | PRI | | |
| Db | char(64) | | PRI | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
+-----------------------+---------------+------+-----+---------+-------+
mysql>INSERT INTO host VALUES('localhost','proftp','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql>INSERT INTO host VALUES('lnx68.thesoft.co.kr','proftp','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
1.1.3 proftp DB생성
mysql> create database proftp;
mysql> flush privileges;
1.mysql설정을 한뒤 'proftp'데이터베이스 생성합니다.
#/usr/local/bin/mysqladmin -u proftp -p create proftp
==> 왠일인지 mysqladmin 이 mysql서버에 접근을 못하게 되어있다. 그래서 직접 mysql로 서버에 접속을 한다음 쿼리문장으로 처리
1.1 db유저 생성
1.1.1 db테이블에 proftp사용자 등록
db 테이블 구조
+-----------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host | char(60) | | PRI | | |
| Db | char(64) | | PRI | | |
| User | char(16) | | PRI | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
+-----------------------+---------------+------+-----+---------+-------+
mysql> insert into db values('%', 'proftp', 'proftp', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
1.1.2 user테이블에 proftp사용자의 권한 추가
user 테이블 구조
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host | varchar(60) | | PRI | | |
| User | varchar(16) | | PRI | | |
| Password | varchar(41) | | | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Reload_priv | enum('N','Y') | | | N | |
| Shutdown_priv | enum('N','Y') | | | N | |
| Process_priv | enum('N','Y') | | | N | |
| File_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Show_db_priv | enum('N','Y') | | | N | |
| Super_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
| Execute_priv | enum('N','Y') | | | N | |
| Repl_slave_priv | enum('N','Y') | | | N | |
| Repl_client_priv | enum('N','Y') | | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | | | | |
| ssl_cipher | blob | | | | |
| x509_issuer | blob | | | | |
| x509_subject | blob | | | | |
| max_questions | int(11) unsigned | | | 0 | |
| max_updates | int(11) unsigned | | | 0 | |
| max_connections | int(11) unsigned | | | 0 | |
+-----------------------+-----------------------------------+------+-----+---------+-------+
mysql>INSERT INTO user VALUES('localhost','proftp',PASSWORD('비밀번호 '),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
mysql>INSERT INTO user VALUES('lnx68.thesoft.co.kr','proftp',PASSWORD(비밀번호 '),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
mysql>INSERT INTO user VALUES('%','proftp',PASSWORD('비밀번호 '),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
host 테이블 구조
+-----------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host | char(60) | | PRI | | |
| Db | char(64) | | PRI | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
+-----------------------+---------------+------+-----+---------+-------+
mysql>INSERT INTO host VALUES('localhost','proftp','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql>INSERT INTO host VALUES('lnx68.thesoft.co.kr','proftp','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
1.1.3 proftp DB생성
mysql> create database proftp;
mysql> flush privileges;
DBMS/MySQL]var_디렉토리_용량_부족시에_데이터_디렉토리_이전
1. mysql을 잠시 내리고 db 파일(/var/db/mysql 디렉토리)을 여유공간으로 이동을 하고 예전 경로에 심볼릭
링크를 걸어준다.
예시 )
새로운 하드 마운팅 네임 : /usr/local/db
기존 mysql 설치 디렉토리 : 프비에서 포트로 설치시 디폴트. 아님 /usr/local/mysql
mysql 데이터 디렉토리 : /var/db/mysql
# /usr/local/etc/rc.d/mysql-server.sh stop <-- mysql 데몬 shutdown
# mv /var/db/mysql /usr/local/db/ <-- /var/db/mysql 디렉토리를 /usr/local/db/
밑으로 이동
# chown -R mysql:mysql /usr/local/db <-- 소유권을 mysql:mysql로 수정
(리눅스에서는 chown -R mysql.mysql /usr/local/db 이렇게(???) 할 것임)
# ln -s /usr/local/db/mysql /var/db/mysql <-- 심볼릭 링크 검
# /usr/local/etc/rc.d/mysql-server.sh start <-- 재기동
DBMS/MySQL]mysql_5.0.41_소스_컴파일_해서_설치하기
The basic commands that you must execute to install a MySQL source
distribution are:
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
To change both the character set and the collation, use both the
`--with-charset' and `--with-collation' options. The collation
must be a legal collation for the character set. (Use the `SHOW
COLLATION' statement to determine which collations are available
for each character set.)
shell> ./configure --prefix=/usr/local/mysql --with-charset=utf8
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> bin/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> bin/mysqld_safe --user=mysql &
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 test.nchannel.net password 'new-password'
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 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 on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
[DBMS/MySQL]가입자에게_mysql을_사용할_수_있도록_path_설정하기
1. 가입자에게 mysql을 사용할 수 있도록 PATH설정하기
/etc/skel 의 .bash_profile에 mysql을 실행시킬수 있도록 다음과 같이 설정한다.
# .bash_profile
# Get the aliases and functions
# 사용자 정의 앨리어스와 함수 정의 포함
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
# 사용자별 환경 변수, 시작 프로그램 설정
PATH1=$PATH:$HOME/bin <- 설정부분
PATH=$PATH1:/usr/local/mysql/bin <- 설정부분
BASH_ENV=$HOME/.bashrc
USERNAME=""
export USERNAME BASH_ENV PATH1 PATH <- 설정부분
[DBMS/MySQL/FreeBSD]proftp와_mysql연동하기
이글은 www.godisgreen.com/wikix/index.php 에서 인용한 글을 기초로 작성된것입니다.
OS : FreeBSD 5.3R
System : intel P3-850 dual
Memory : 512M
HDD : Ultra SCSI 9G*2
FreeBSD(이 하 프비)5.3R의 설치가 되었다고 가정하고 시작합니다.
데몬이나 어플리케이션의 설치는 PORTS 설치를 기본으로 합니다.
Proftp설치
1.proftp를 설치합니다.
# cd /usr/ports/ftp/proftpd-mysql
=> 포트 디렉토리에 보면 proftp와 proftp-mysql이 있습니다. 저는 proftp-mysql을 기준으로 설명합니다.
# make install
(만 약 proftpd에서 설치시
make install clean WITH_MYSQL
과 같이 WITH_MYSQL 옵션을 줘야 한답니다.)
MYSQL설치
2. mysql을 설치합니다.
# cd /usr/ports/databases/mysql40-server
--> mysql 버전이 5.x 가 있지만 proftpd포트 설치시 mysql4.x 클라이언트
를 설치하므로 버전을 맞추기 위해 4.x 를 설치하기로 합니다.
# make install clean WITH_CHARSET=euc_kr BUILD_OPTIMIZED=yes
(
mysql41-server 의 경우 WITH_CHARSET옵션의 값이 euckr로 변경됨.
mysql 4.1버전의 경우
# make install clean WITH_CHARSET=euckr BUILD_OPTIMIZED=yes
)
# /usr/local/bin/mysql_install_db
==> 처음으로 mysql을 사용하기 전에 시스템 DB를 만들기 위한 스크립트를
실행합니다.
위 명령은 mysql을 설치한 후 반드시 한번만 하시기 바랍니다.
3. 설치 확인 작업
# /usr/local/bin : mysql바이너리 파일들이 있나 확인
# /usr/local/etc/rc.d/mysql-server.sh : mysql 기동 스크립트
# /var/db/mysql : mysql 데이터베이스 파일
4. 데몬 시작및 중지하기
4.1. 시작하기
# /usr/local/etc/rc.d/mysql-server.sh start 혹은
/usr/local/bin/mysqld_safe -user=mysql &
4.2 중지하기
# /usr/local/etc/rc.d/mysql-server.sh stop 혹은
/usr/local/bin/mysqladmin -u root shutdown
5. mysql 데이터베이스를 사용하기 전에
반드시 루트 암호를 생성하고 사용하시기 바랍니다.
#/usr/local/bin/mysqladmin -u root password '새로운 비밀번호'
#/usr/local/bin/mysqladmin -u root -h 호스트명 password '새로운 비밀번호'
6. 데이터베이스 사용하기
#/usr/local/bin/mysql -u root -p
password :
** 만약 위와같이 작업시 에러발생하는 경우
5번 작업시 에러발생시에는
1. 우선 mysql서버 데몬을 죽인다.
# kill mysql_pid 혹은
/usr/local/etc/rc.d/mysql-server.sh stop
2. /usr/local/etc/rc.d/mysql-server.sh 파일을 편집해서
========================
편 집내용.
/usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} --language=korean > /dev/null &
를 다음과 같이 수정합니다 .
/usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} --language=korean --skip-grant > /dev/null &
========================
3. mysql서버 데몬을 다시 시작한다.
# /usr/local/etc/rc.d/mysql-server.sh start
4. 위와같이 하면 권한 테이블을 사용하고 데몬을 띄우게 됩니다.
5. mysql에 접속하여
# /usr/local/bin/mysql -u root -p
6. root의 암호를 변경합니다.
mysql> use mysql;
mysql> select * from user where user = 'root';
mysql> update user SET password = PASSWORD('newpassword');
7. 권한 테이블을 다시 읽는다.
mysql> flush privileges;
8. mysql을 종료
mysql> \q
9. mysql 서버 데몬 죽입니다.
#/usr/local/etc/rc.d/mysql-server.sh stop
10./usr/local/etc/rc.d/mysql-server.sh 파일을 편집해서
========================
편집내용.
/usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} -language=korean --skip-grant > /dev/null &
를 다음과 같이 수정합니다 .
/usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} -language=korean > /dev/null &
========================
다 시 원상복귀 합니다.
11. mysql 서버를 다시 시작합니다.
#/usr/local/etc/rc.d/mysql-server.sh start
12. 정상적으로 mysql을 사용가능합니다.
proftpd 를 위한 mysql설정하기
1.mysql설정을 한뒤 'proftp'데이터베이스 생성합니다.
#/usr/local/bin/mysqladmin -u proftp -p create proftp
==> 왠일인지 mysqladmin 이 mysql서버에 접근을 못하게 되어있다. 그래서 직접 mysql로 서버에 접속을 한다음 쿼리문장으로 처리
1.1 db유저 생성
1.1.1 db테이블에 proftp사용자 등록
mysql> insert into db values('%', 'proftp', 'proftp', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
1.1.2 user테이블에 proftp사용자의 권한 추가
mysql>INSERT INTO user VALUES('localhost','proftp',PASSWORD('proftpdeamon'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
mysql>INSERT INTO user VALUES('lnx68.thesoft.co.kr','proftp',PASSWORD('proftpdeamon'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
mysql>INSERT INTO user VALUES('%','proftp',PASSWORD('proftpdeamon'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
mysql>INSERT INTO host VALUES('localhost','proftp','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql>INSERT INTO host VALUES('lnx68.thesoft.co.kr','proftp','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
1.1.3 proftp DB생성
mysql> create database proftp;
mysql> flush privileges;
2. DB생성 후에 테이블 구조를 해당 DB(proftp DB)에 만들어 줍니다.
##테이블 groups
##################
# 테이블 groups
##################
Create Table groups(
gname varchar(12) NOT NULL default ''
, gid int(10) unsigned default NULL
, members text
, primary key (gname)
) TYPE=MyISAM;
##################
# 테이블 users
##################
Create Table users(
userid varchar(12) NOT NULL default ''
, uid int(10) unsigned NOT NULL auto_increment
, gid int(10) unsigned default '1000'
, passwd varchar(63) default NULL
, shell varchar(255) default '/bin/sh'
, homedir varcahr(255) default '/home/data'
, count int(10) unsigned NOT NULL default '1'
, valid int(10) unsigned default '0'
, email varchar(50) default NULL
, name varchar(30) binary NOT NULL default ''
, reg_date datetime default NULL
, ip varchar(17) default NULL
, primary key(userid)
, key uid_primary(uid)
, key index_name(name)
) TYPE=MyISAM;
** mysql은 탭을 구분하지 못하므로 스페이스로 구분하여 입력하기 바랍니다.
2012-09-14
2012-09-12
FreeBSD]사용자 로그인 컨트롤
사용자 로그인 컨트롤
Michael Lucas 저.
OpenBIRD, Inc. mailto:editors@openbird.com 역.
어떤 서버들은 각기 다른 목적으로 수백명이 사용하기도 합니다. 이들 각자에게 서로 다른 권한을 부여하고 싶을 땐 어떻게 할까요? FreeBSD는 몇가지 방법으로 사용자의 접근을 컨트롤 할 수 있습니다. /sbin/nologin은 어카운트 제한에 유용한 프로그램입니다. 더욱 일반적인 컨트롤은 /etc/login.access로 가능합니다.
여러분이 접하는 일반적인 경우중 하나는 사용자 ftp 억세스는 가능하게 하고 telnet 억세스는 못하게 하고자 할 경우입니다. 이것은 /sbin/nologin을 이용하여 간단히 해결할 수 있습니다. /sbin/nologin이 login shell로 지정된 사용자는 telnet과 SSH 접속이 불가능 한 반면 /etc/shells에 /sbin/nologin를 추가하면 ftpd를 통한 접속은 가능하게 됩니다.
사용자의 login shell이 /sbin/nologin로 지정 되었을때 telent과 SSH의 요구에 대해 아래와 같은 결과가 나오게 됩니다. :
login: loserusername
Password:
Last login: Tue Mar 27 20:33:59 from localhost
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 5.0-CURRENT (TURTLEDAWN) #3: Wed Mar 28 14:24:46 EST 2001
This account is currently not available.
Connection closed by foreign host.
이런 방식이 가진 문제점은 이미 시스템이 커넥션을 수행하고 해당 사용자에 대한 환경을 구축한다는 것입니다. shell을 셋팅하는 것은 이미 어느 정도의 프로세서 타임을 사용한 후에 행해지며, 사용자가 shell을 사용할 수 없다라는 것을 인식했을 때는 이미 많은 작업을 수행한 후 입니다.
CPU time이 문제되지 않는다면 /sbin/nologin만으로도 충분합니다. 이것은 유닉스 세계에선 이미 인정받은 보편적인 방법이며 거절당한 커넥션을 /usr/ports/sysutils/no-login에 로그로 남길수 있는 한층 진보된 버젼까지 나왔습니다.
그래도 덩치가 큰 설치작업에선 /sbin/nologin을 사용하는 것은 부담스러울수 밖에 없습니다. 사용자의 shell이 잘못 셋팅되는 경우는 관리자가 경험이 별로 없거나 일반적인 실수가 대부분입니다. FreeBSD는 /etc/login.acess 파일을 사용하여 훨씬 더 쉽게 할수 있습니다. 여러분이 FreeBSD 시스템에 연결을 시도할때 마다 login.access 파일을 체크됩니다. login.access를 적절하게 구성해 놓았다면 여러분이 필요한 모든 기능을 좀더 쉬운 방법으로 얻을수 있습니다.
/etc/login.access을 한번 보시기 바랍니다. 콜론으로 구별되는 세개의 필드가 있습니다. 첫번째 부분은 로그온을 할 수 있는 권한을 주거나(+) 안주거나 (-)를 결정합니다. 두번째 부분은 사용자나 그룹의 리스트입니다. 세번째 부분은 커넥션 소스의 리스트입니다. 이 파일은 "all"과 "all except" 구문을 사용하여 관리자가 기본적인 규칙을 만들수 있습니다.
시스템이 그룹과 커넥션 소스 둘 모두에 해당되는 첫번째 규칙을 찾으면 즉시 커넥션을 허락 또는 거절합니다. 따라서 규칙의 순서가 매우 중요합니다.
예를 들어 "wheel" 그룹의 멤버들과 root에게 console로 로그온 할수 있게 하려면 다음과 같이 사용하면 됩니다:
+:wheel root:console
이 규칙의 재미있는 점은 다른 규칙들 또한 계속 진행된다는 것입니다. 다른 것들은 거절한다고 하는게 아니라 단지 이것들은 허락한다고 말하는 것입니다. 결국, console로 로그인을 시도하는 Joe Average는 이 규칙에 해당되지 않습니다. 이와 반대로 사용한다면 여러분은 좀 더 빨리, 관리자의 에러 위험을 덜면서 커넥션을 거절할 수 있습니다.
-:ALL EXCEPT wheel root:console
Joe Average는 이 규칙에 해당되므로 그가 접속하면 바로 거절당합니다. 이런 규칙은 의도하지 않은 접속을 막아주며 뒤에 해당되는 규칙이 있는지 생각할 여지를 주지 않습니다. 허용하는 계정보다 거절해야 하는 계정을 리스트에 사용하는 게 더 좋습니다.
마지막 필드인 커넥션 소스는 상당히 다양하게 사용할 수 있습니다. 여기에는 여러가지 다른 타입을 사용할 수 있습니다: 호스트 네임, 호스트 어드레스, 네트워크 번호, 도메인 네임, LOCAL, 그리고 ALL 등.
먼저, ALL은 항상 해당되며 아래에 보는 것 처럼 EXCEPT와 함께 사용하여 특별한 의미를 나타냅니다.
호스트 네임은 DNS 와 hosts 파일에 따릅니다.
-:ALL EXCEPT wheel:fileserver.mycompany.com
wheel 그룹은 파일 서버를 통해 로그인 가능하지만 그 외는 아무도 안됩니다.
DNS에 상관없다는 것 빼고는 호스트 어드레스도 비슷합니다. 만약 네임서버가 언제 해킹당할 지 걱정된다면 아마도 네임서버를 사용하길 원치 않을 것입니다.
-:ALL EXCEPT wheel:169.254.8.3
아래의 경우는 .로 끝나는 모든 네트워크 번호가 해당됩니다.:
-:ALL EXCEPT wheel:169.254.8.
만일 여러분의 방화벽에 관리 워크스테이션에서 들어오는 것을 제외한 모두를 접근금지시키고 싶다면 이렇게 할수도 있습니다.
-:ALL EXCEPT wheel:ALL EXCEPT 192.168.89.128 192.168.170.33
가장 복잡한 것은 LOCAL입니다. 이것은 '.' 없는 호스트 네임은 모두 해당되며 일반적으로 로칼 도메인의 호스트들만을 의미합니다. 예를 들어 서버 www.blackhelicopters.org에서의 LOCAL의 의미는 "blackhelicopters.org"에 있는 모든(any) 호스트를 나타냅니다. 반면 접속하는 호스트가 "pedicular.blackhelicopters.org"이라는 호스트 네임을 갖더라도 그것의 IP address(reverse DNS된 IP)가 pedicular.home.net과 같이 blackhelicopters.org 이외의 호스트명으로 변환(reverse DNS) 된다면 그 호스트는 LOCAL에 포함되지 않게 됩니다. 이것은 reverse DNS를 이용하기 때문입니다.
그러면 우리는 어떻게 이 모두를 한번에 할 수 있을까요? login.access에 다음 한줄로 다른 모든 리모트 커넥션을 거절하면서 관리자들이 서버에 로그온 할 수 있습니다.
-:ALL EXCEPT wheel:ALL
이런 것은 각자의 환경에 따라 다릅니다: 많은 회사들은 스태프 그룹을 가지고 있습니다. 저의 경우는 미리 "dns" 그룹(도메인 존 파일을 수정할 수 있는 사람들)과 "www" 그룹(웹 서버 구성들을 수정할수 있는 사람들)으로 미리 환경 셋팅을 해 놓습니다. 우리 login.access은 아래와 같습니다.
-:ALL EXCEPT wheel dns www:ALL
제 시스템의 login.access 파일은 아래와 같습니다.:
-:ALL EXCEPT wheel:console
-:ALL EXCEPT wheel dns www:ALL
여러분이 허용된 그룹에 사용자를 추가하지 않는 한 사용자들은 로그인 할수 없게 됩니다. 사용자의 login shell을 /sbin/nologin로 설정하는 것도 가능하지만 더 이상 필요치 않습니다. 천명의 사용자 계정을 수정하는 대신 하나의 파일을 건드리는 것으로 쉽게 해결되기 때문입니다.
FreeBSD]보안확인및 대처방법
퍼온글입니다.
Posted: 2002-03-24 00:25
시스템을 관리하다 보면 많은 위험으로부터 공격을 받습니다.
이중에서 제일 관리자를 기분 나쁘게 하는 것이 바로 크래킹이죠.
지금 부터 서버에 백도어를 숨겨놓았나 확인하는 방법과 보안에 결함이 있나 확인하는 방법을 설명하겠습니다.
글은 모두 확인을해야 함으로 일정한 순서없이 진행하겠습니다.
물론 프비도 같은 방법으로 체크를합니다.
1. # grep -v "^#" /etc/inetd.conf --> 레드햇 7.1이전 버젼이 대부분이다.
하여 필요없는 서비스를 #로 주석처리하고 # killall -HUP inetd하여 데몬을 다시 실행한다.
2. #chattr +i /etc/inetd.conf
이것은 super-user만이 이 파일에대해 접근할 수 있도록 inetd.conf파일을 셋팅하는 것입니다. 셋팅이되면 수정,삭제 또는 리네임을 할 수 없습니다. 셋팅은 오직 super-suer만이 가능합니다.
이것을 풀기위하여는 -i 옵션을 주면 원상태로 됩니다.
3. 얼마나 많은 서비스들이 실행되는지 확인합니다.
#ps aux | wc -l
이것으로 서비스들을 확인하여 기록합니다.
이것을 다음에 예전 기록과 비교하여 이상한 서비스를 검출하기 위함입니다.
4. 스크립트 변경 후 확인
#netstat -na --ip
5. TCP Wrapper 사용
이것은 암호화는 지원하지 않지만 로그와 서버로의 접근을 제한 합니다.
이것은 telnet 또는 ftp와 같은 inetd서비스를 둘러싸는 실행화일입니다.
시스템 이름이나 도메인 이름을 사용하지말고 IP주소를 사용합니다.
/etc/hosts.deny 을 deny ALL로 설정한 후 접속을 허용할 주소만 /etc/hosts.allow파일에 기록합니다.
우선 순위는 allow가 먼저 입니다.
다음은 사용 예입니다.
/etc/hosts.allow
in.ftpd:192.168.0.1:ALLOW -->192.168.0.1으로 부터의 FTP만 허용
/etc/hosts.deny
ALL:ALL DENY -->모든 접근 불허
구성 후 #tcpdchk를 실행합니다.
6. 관리자의 history를 없앤다.
.bash_history에서 HISTFILESIZE=0으로한다.
그래도 HISTSIZE환경변수에 저장이됨으로 확인이 가능하다.
7. /etc/lilo.conf파일에 password=123 와 같이 암호부분을 넣어준다.
설정을한다음에 lilo -v한다.
그럼 재시동시 lilo에서 암호를 물어본다.
8. ipchains 나 iptables를 사용한다.
이것을 설정은 맨페이지나 관련 홈피를 참조하라..
9. /var/log및의 파일을 점검한다.
acct 또는 pacct --> 사용자별로 실행되는 모든 명령어를 기록
actlog --> 다이얼 -아웃 모뎀 관련 기록(자동 호출 장치)
lastlog --> 각 사용자의 가장 최근 로그인 시간을 기록
loginlog --> 실패한 로그인 시도를 기록
messages --> 부트 메세지 등 시스템의 콘솔에서 출력된 결과를 기록하고
syslog에 의하여 생성된 메시지도 기록
sulog --> su 명령 사용 내역 기록
utmp --> 현재 로그인한 각 사용자 기록
utmpx --> utmp 기능을 확장, 원격 호스트 관련 정보 등 자료구조 확장
wtmp --> 사용자의 로그인, 로그아웃 시간과 시스템의 종료 시간, 시스템 시작 시간 등을 기록
wtmpx --> wtmp기능 확장
vold.log --> 플로피 디스크나 cd - drom과 같은 외부 매체의 사용에서 발생하는 에러를 기록
xferlog --> ftp 접근을 기록
secure -->보안에 관련된 로그
위의 파일들을 확인하여 이상한 접근이나 사용자가 있는가를 점검한다.
이것은 시스템에 문제가 있을적에 제일 먼저 확인을 해야하는 로그들이다.
10. # w 명령으로 현재 로그인한 사용자를 확인한다.
이상한 유저가 로그인시 접속을 끊거나 활동상황을 감시한다.
11. # last 명령으로 기존 로그인한 사용자를 확인한다.
수상한 사용자가 있음 의심을 하자
특정한 ip를 제외하고 검색을 할려면
# last | grep -v 192.168.0.1 | grep -v www.linuxfreebsd.com
이것은 내부 ip가 192.168.0.1 이고 도메인이 www.linuxfreebsd.com 이란 말이다.
이런식으로 검출을 하면 많은부분을 쉽게 찾을수 있다.
12. secure를 확인하여 사용자 인증 관련 로그등을 확인한다.
13. access_log, error_log
파일에도 어느 사이트에서 어느 파일에 접근을 했는지를 확인한다.
14. 가장 상위 / 디렉토리에 .profile .history 파일들이 있나 확인을한다.
이런것들이 있으면 침입을 당한것이다.
# ls -al 으로 확인한다.
15. crontab -l 로 cron에 관리자가 이외의 사용자가 설정한 파일이있나 확인한다.
16. # find / -ctime -ndays -ls 로 ndays 이전 시점부터 현재까지 ctime 이 변경된
모든 파일을 찾아준다. 하지만 이는 파일의 접근시간(atime)을 변경시킨다.
따라서 침입자가 어떠한 파일에 접근했는지 알고 싶은 경우에는 사용하지 말자.
17.
nmap -sT -p 1-65535 www.linuxfreebsd.com
nmap -sU -p 1-65535 www.linuxfreebsd.com
이것으로 어떤 포트가 열려있는지를 확인한다.
nmap프로그램은 www.nmap.org에서 다운받아 설치한다.
18.
# find / -type -f -perm -04000 -ls --> SUID 파일을 찾기
# find / -type -f -perm -02000 -ls --> SGID 파일을 찾기
19.
# rpm -V -a --> 모든 설치된 패키지의 변화에 대하여 검사
# rpm -V 패키지 이름 --> 특정 패키지에 대해서만 변화여부 검사
# rpm -V fileutils --> 트로이잔 ls 프로그램을 확인한다.
예) S.5....T /bin/ls
S - 프로그램의 사이즈가 변경
5 - md5 cheksum 값이 변경
T - 파일의 mtime 값이 변경
20.
ps - sniffer 또는 취약점 스캔 프로그램등 공격 프로그램이 실행되고 있는지 살펴본다.
주로 평소에 보지 못했던 프로세스를 확인한다.
lsof - 시스템상의 모든 프로세스가 이용하는 열려진 파일 정보를 보여준다. 이는 ps 명령을 이용한 정보를 대체할 수 있다.
netstat - 서비스하지 않는 포트가 열려 있는지 또는 이상한 사이트에서 접속이 있는지 확인한다.
who - 누가 접속해 있는지 확인한다.
21.
/etc/passwd 파일에서 이상한 사용자를 검사한다.
22.
# find / -name "..*" -print 또는
# find / -name ".*" -print
이것으로 숨겨진 디렉토리를 찾아낸다.
# find /dev -type f -print
이것을 이용하여 /dev및에의 루트킷, 백도어 설정 파일을 찾아낸다.
23.
사용자 홈디렉토리의 ".rhosts", ".forward" 파일 내용을 점검한다.
무엇보다 중요한것은 초기 O/S인스톨이 끝난다음에나 설정이 완료된시점에서 모든 디렉토리를 백업하는것이다.
그래서 침입이 확인되었을적에 기존 파일을 지우고 백업파일을 올리는것이다.
이상으로 보안확인 및 대처 방법을 끝낸다.
리눅스 뿐만 아니라 프비도 위와 거의 같은 체크를한다.
그럼 본인의 시스템을 한번 확인해보자.
2012-09-11
FreeBSD]FreeBSD에서 MS 파티션 읽기
이 글은 www.openphp.com에서 인용한 것입니다.
// 윈도우 파티션 마운트하기
파티션 타입 msdos가 fat16/fat32/vfat모두 커버가 된다고 하네요
ad0 - 첫번째 하드디스크
s10 - 10번째 슬라이스 - 해당되는 것을 선택하시면 됩니다.
/mnt/win - 마운트 되는 위치
#mount -t msdos /dev/ad0s10 /mnt/win // 리눅스 파티션(ex2fs) 마운트하기 커널 설정 옵션에서 아래의 내용이 추가된 상태에서 컴파일 하셔야 합니다. 윈도우/시디롬 파티션관련 옵션은 처음 설치시 기본으로 설정되어 있죠. option ex2fs #mount -t ex2fs /dev/ad0s5 /mnt/redhat // 참고로 리눅스에서 프비파티션 마운트 가능하게 하려면 // 커널 설정부분에서 UFS(프비파티션)파티션 관련 부분이 설정된 상태에서 컴파일을 해야 합니다.
2012-09-10
FreeBSD ]FreeBSD 커널 컴파일 하기
이글은 커널컴파일에 대해 간략히 기술한 문서이다.
1. GENERIC kernel config 파일을 복사해서 사용. 바뀐 내용을 잃어버렸을 때에는 GENERIC kernel config
파일로 복원을 해야 하기 때문이죠.
# cd /usr/src/sys/i386/conf
# cp GENERIC MyKernel
2. 새로 추가된 하드웨어가 있으면 MyKernel 을 수정합니다
참고로 FreeBSD 5.x는 SMP(CPU2개 이상을 자동으로 인식한다고 하는데 제 경험상 커널컴파일을 해야만 2개로 인식을 하더군요.)
*아래의 예는 사운드카드 인식하기 위한것(Vibra128(ES1370/ES1371))
device pcm #pcm0(ES1370/ES1371)
**CPU를 2개이상 인식시킬경우
options SMP
3. 두가지 방법으로 컴파일이 가능합니다.
3.1
# cd /usr/src/sys/i386/conf
# /usr/sbin/config MyKernel
# cd ../../compile/MyKernel
# make clean
# make depend
# make
# make install
3.2
# cd /usr/src
# make buildkernel KERNCONF = MyKernel
# make installkernel KERNCONF = MyKernel
3.2 방법으로 커널컴파일 권장
4. 이렇게하면 root디렉토리에 처음의 커널은 kernel.GENERIC으로 백업이 되며, 방금 컴파일된 MyKernel kernel Configure 파일로 컴파일된것이 Kernel 로 됩니다.
5. 시스템 리부팅
# sync
# shutdown -r now
FreeBSD]FreeBSD 무장하기
FreeBSD 무장하기
Markus Fluid Delves mailto:markus@fluidenterprises.net 저.
OpenBIRD, Inc. mailto:editors@openbird.com 역.
새로운 script가 계속 생겨남에 따라 우리는 자신을 보호할수 있는 몇가지 기본적인 법칙을 배울 필요가 있습니다. 이 가이드는 FreeBSD 보안의 기본에 대해 개략적으로 알려줄 것이며 FreeBSD 4.x에서 가장 잘 동작할 것입니다.
1. 일반적 인 보안 지식
1.1 Superuser
1.2 su
1.3 SSH2 키 인증 사용하기
2. 소스를 최신버젼으로 유지하기
2.1 최 신으로 유지하기
2.2 CVSUP
2.3 컴파일과 인스톨
3. Firewall 사용하기
3.1 IPFW 소개
3.2 Kernel 고치기
3.3 Firewall 셋팅하기
3.4 IPFW 사용하기
4. Services
4.1 INETD
4.2 Standalone 데몬
5. DES vs MD5
5.1 비 밀번호 암호화
6. 결론
6.1 기 억해야 할 규칙들
6.2 참고자료
Chapter 1. 일반적인 보안 지식
1.1 Superuser
기본적으로 FreeBSD에서 superuser 계정은 root입니다. root 계정은 생성, 삭제, 편집, 중지, 조정등 모든 것이 가능하며 컴퓨터를 완벽하게 조정할수 있습니다. 여러분의 보안을 증진시킬 수 있는 가장 좋은 방법 중의 하나는 정말 필요할 때만 root를 사용하는 것입니다. 일상적인 작업을 할 때는 자신이 가지고 있는 특권이 없는 계정을 사용해야 합니다. root로 작업할 때는 안전하다고 확신하지 않는 한 소스코드로 만들지 않은 실행화일은 절대로 실행시키지 말아야 하며 root로 실행해야만 하는 프로그램들만 실행하십시요. ; 다른 프로그램들은 root가 아닌 여러분 계정을 사용해 실행시켜야 합니다.
1.2 su
여러분은 SSH 같은 보안 프로토콜을 통하지 않으면 root로 절대 로그인해선 안되며 보안 프로토콜을 통해 들어가더라도 그건 좋은 생각이 아닙니다. 대신 여러분은 자신의 일반 개인 계정으로 로그인한 후 su를 이용하여 root로 들어가야 합니다.
뜻밖의 root 로그인 공격을 당했다 할지라도, 이렇게 하여야 문제를 추적할 수 있습니다. 익명 사용자로 부터의 root 로그인 메시지 대신, 누가 로그인 하였는지 그리고 누가 su를 시도하였는지 알 수 있을 것입니다.
주요 그룹에 속한 username 만이 root로 su가 가능하기 때문에 진행하기 전에 username이 그룹에 등록되어 있는지 확인합니다. /etc/group을 수정하여 여러분의 username을 추가하면 되는데 그 첫번째 문장을 다음과 같습니다.:
wheel:*:0:root,your_username
위의 문장에 space를 사용하면 안되며 username을 여럿 열거할때는 콤마로 구분합니다.
root로 직접 로그인 못하게 하려면 /etc/ttys 아래 있는 문장을 고쳐주어야 합니다.:
console none unknown off secure
#
ttyv0 "/usr/libexec/getty PC" cons25 on secure
ttyv1 "/usr/libexec/getty PC" cons25 on secure
[...]
root로 직접 로그인 못하게 하려면, 문장안의 모든 secure를 insecure로 고치면 됩니다. 여러분은 가상 터미날에서 root로 바로 로그인이 불가능 합니다. 모든 가상 터미날로 들어오는 것은 secure로 되어 잇기 때문에 이런 터미날에서의 root 로그인은 불가능합니다. 실재로 이 말은 여러분이 telnet 세션을 통해 root로 로그인 하는것은 불가능하다는 이야기입니다.
1.3 SSH2 키 인증 사용하기
SSH2를 사용하는 것이 telnet 상으로 개인 프라이버시를 더욱 더 보호할 수 있지만 이론적으로 그것은 해독될 수도 있습니다. 만일 네트워트를 타고 보내지는 데이타를 상대편 머신에서 public key로 받아들이도록 암호화 할수 있다면 우리의 프라이버시는 훨씬 보호될 수 있습니다. 여기 unix에서 ssh2 key authentication을 셋팅한 예를 보십시요.
일단 로칼 머신에 ssh2를 인스톨하면 http://www.bsdnet.co.kr/articles/ftp.cis.fed.gov/pub/ssh/ssh-2.4.0.tar.gz에 서 아래 사항을 찾아 볼수 있습니다. 아니면 간단히 /usr/ports/security/ssh2에 있는 포트를 사용해도 됩니다.
ssh-keygen2을 실행시키세요.
markus@fluidenterprises:~$ ssh-keygen2
Generating 1024-bit dsa key pair
1 oOo.oOo.oKey generated.
1024-bit dsa, markus@fluidenterprises, Mon Dec 25 2000 00:13:43 +0200
Passphrase : ***********
Again : **********
Private key saved to /home/markus/.ssh2/id_dsa_1024_a
Public key saved to /home/markus/.ssh2/id_dsa_1024_a.pub
자신만의 identification file을 만드세요.
markus@fluidenterprises:~$ echo "IdKey id_dsa_1024_a" > ~/.ssh2/identification
자신의 public key를 리모트 호스트에 복사하고 자신의 .ssh2 디렉토리에 놓습니다.
authorization file을 리모트 호스트에 만듭니다.
fluid@watchtower:~/.ssh2$ echo "Key id_dsa_1024_a.pub" >> authorization
로칼 머신으로 되돌아가 로그인 해보세요. 그러면 다음과 같이 나옵니다.:
markus@fluidenterprises:~$ ssh2 -l fluid remote_host
Passphrase for key "/home/markus/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa, markus@fluidenterprises.net, Sat Dec 16 2000 02:56:47":
pass 문을 입력하시고, 자, 어때요.
secure ftp 2 사용법.
markus@fluidenterprises:~$ sftp2 fluid@remote_host
Passphrase for key "/home/markus/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa, markus@fluidenterprises.net, Sat Dec 16 2000 02:56:47":
sftp>
sftp2의 명령들은 ftp와 굉장히 유사합니다.
이제 우리는 안전한 public key authorization 시스템을 어떻게 사용하는 건지 알았으니 여러번 테스트 해 보시기 바랍니다. 익숙해지면 passwd 화일에서 여러분의 패스워드를 *로 고치세요. 모든 사람들이 public key authorization으로 권한 check를 한다면 우리의 보안성은 아주 높아질 겁니다. id_dsa_1024_a는 업로드 해선 안됩니다. 이것은 여러분의 개인적인 key이며 여러분은 어느 누구도 그것에 접근하는 것을 원하지 않을테니까요.
Chapter 2. 소스를 최신 버젼으로 유지하기
2.1 최신버젼 유지하기
보안을 유지하는 가장 좋은 방법은 소스를 항상 최신버젼으로 유지하는 것입니다. 저는 freebsd-security@freebsd.org를 받아보라고 강력하게 권하고 싶습니다. 그곳에서 뭔가 취약점이 발견되어 수정사항이 생길 때마다 여러분은 cvsup을 실행하여 소스를 업데이트 하고 make buildworld와 make installworld을 사용할수 있습니다. 이 과정을 이번 단원에서 설명하겠습니다.
2.2 CVSup
"CVSup은 네트워크를 통해 여러 화일들을 배포하고 업데이트하는 소프트웨어 패키지입니다. 이것은 소스, 바이너리, 하드 링크, 심볼릭 링크, 심지어 디바이스 노드 등 모든 종류의 화일들을 효율적이고 정확하게 미러링 합니다. CVSup은 지속적인 통신 프로토콜과 멀티스래드 구조로 요즘 나온 tool 중 아마도 가장 빠는 미러링 tool일 겁니다. 또한 일반적 의미의 미러링 tool 이기도 하지만 CVSup은 특히 CVS repositories에 잘 맞도록 짜여졌고 최적화되어 있습니다." (/usr/ports/net/cvsup/pkg-descr 인용) 다시 말하면 CVSup은 메인 FreeBSD 소스코드 데이타베이스에 연결하여 여러분의 소스화일들을 업데이트합니다. 만일 포트 콜렉션이 설치되어 있다면 cd /usr/ports/net/cvsup;make install 라고 치면 CVSup을 설치할수 있습니다. 이렇게 하면 CVSup을 download, patch, compile, install 할 수 있습니다. (필자 주석: CVSup의 설치는 디스크 공간과 리소스를 많이 필요로 합니다. - 여러분이 cvsup을 단지 소스와 포트트리 업데이트를 위해서만 사용한다면 cvsup-bin port인, /usr/ports/net/cvsup-bin을 사용하는 편이 더 쉽습니다.) 여러분은 이제 "supfile"을 만들어야 하는데 그래야 cvsup이 어떤 화일들을 다운로드하고 어디에 그것들을 가져다 놓을지 알수 있습니다. 여기 cvsup supfile의 예가 있습니다.:
*default host=cvsup2.ca.freebsd.org
*default base=/usr
*default prefix=/usr
*default release=cvs
*default delete use-rel-suffix
*default compress
*default tag=RELENG_4
src-all
ports-all tag=.
위의 코드는 /usr/ports 와 /usr/src을 FreeBSD 4.x의 가장 최신 버젼 소스 화일로 업데이트 할 것입니다. 이 화일을 "supfile"이라 한다면 root 자격으로 cvsup supfile이라는 명령을 수행시키면 소스를 업그레이드 할수 있습니다. 이미 cvsup이 설치되어 있다면 /usr/share/examples/cvsup 에서 supfile의 예제를 찾아 볼수 있습니다. FressBSD 업데이트를 위해 cvsup의 완벽한 셋팅 가이드를 원한다면 FreeBSD 핸드북의 CVSUP 섹션을 찾아 보시기 바랍니다. (http//www.freebsd.org/handbook/cvsup.html).
2.3 컴파일과 인스톨
일단 새 소스코드를 얻었다면 여러분은 그것으로 무언가를 해 보려고 할 것입니다. 여기서는 make buildworld 와 make installworld이 동작하는 것을 알아볼것 입니다. make buildworld은 모든 소스를 조립하도록 하고 make installworld은 새롭게 컴파일된 운영시스템을 인스톨합니다. 두가지 명령 모두 /usr/src에 있습니다.(아니면 여러분이 지정한 소스파일 위치에) 여러분은 시스템을 업데이트 하기 전에 시스템 혹은 적어도 중요한 화일들은 백업해 놓는 것이 좋습니다. 뭔가 잘못되진 않겠지만 그래도 걱정하느니 안전한 게 더 낫습니다. 또한 싱글 유저 모드로 인스톨하는 것이 더 안전하고 빠릅니다. 싱글 유저 모드로 나오려면 root 권한으로 shutdown now 라고 치면 됩니다. 싱글 유저 모드에선 네트워킹이 불가능하므로 싱글 유저 모드를 사용하려면 자신의 콘솔을 사용해야 합니다.
컴파일 전에 여러분은 기존의 오브젝트 화일들을 삭제해야 합니다. 루트 권한으로 cd /usr/obj;chflags -R noschg *;rm -rf *라고 치면 삭제되는데 이 명령은 /usr/obj 밑의 모든 것을 삭제합니다. 이제 여러분은 여러분의 운영시스템을 재 컴파일 할 준비가 다 되었습니다. 컴파일 하려면 root 권한으로 cd /usr/src;make buildworld라는 명령을 실행시킵니다. 일단 에러 없이 완료되면 역시 root 권한으로 cd /usr/src;make installworld라는 명령을 실행시킵니다. 이것 역시 성공적으로 끝나면 여러분의 운영시스템은 업데이트 된 것입니다. 더욱 자세한 것은 FreeBSD 핸드북을 찾아 보시기 바랍니다. (http://www.freebsd.org/handbook/makeworld.html).
make installworld를 실행한 후에 kernel을 다시 컴파일 해 주는 것이 좋습니다. 그렇게 하지 않으면 어떤 tool들은(ps 와 top 같은) 제대로 동작하지 않을 수 있습니다. 여러분이 GENERIC kernel을 사용한다면(무얼 사용하는지 모른다면 아마도 GENERIC kernel 일 겁니다.) root 권한으로 cd /usr/src; make buildkernel KERNEL=GENERIC; make installkernel KERNEL=GENERIC 을 실행시키면 kernel은 재 컴파일 됩니다. 이제 리부팅하세요; 이제 여러분의 운영시스템은 업데이트 되었습니다.!
Chapter 3. Firewall 사용하기
3.1 IPFW 소개
FreeBSD은 kernel firewall인 IPFW에 적합합니다. IPFW은 kernel을 구성하는 패킷 필터링과 어카운팅 시스템입니다. IPFW는 두 부분으로 나뉘는데 패킷 필터링부분과 라우터의 사용처를 추적 가능하게 하는 어카운팅 시스템 부분입니다. 우리는 패킷 필터링 부분만 보도록 합시다.
IPFW을 사용하기 위해 우리는 두가지 새로운 옵션으로 kernel을 재 컴파일 해야 합니다. 아직 custom kernel을 만들어 보지 않았다면 다음 섹션을 읽어 보시고 이미 custom kernel을 만들어 사용한다면 다음 섹션은 그냥 지나쳐도 좋습니다.
3.2 Kernel 고치기
전에 한번도 kernel을 고치지 않았다면 지금 GENERIC이 실행되고 있을 것입니다. GENERIC은 FreeBSD의 기본 config 화일입니다. 모든 kernel config 화일들은 /sys/i386/conf에 있습니다. GENERIC을 여러분이 만들 kernel 이름으로 복사한 후 편집합니다.
여기 ipfw를 지원하도록 수정된 kernel을 생성시키는 빠른 방법을 소개합니다.
# cd /usr/src/sys/i386/conf
# cp GENERIC KERNEL_NAME
# echo "options IPFIREWALL" >> KERNEL_NAME
# echo "options IPFIREWALL_VERBOSE" >> KERNEL_NAME
# echo "options IPFIREWALL_VERBOSE_LIMIT=200" >> KERNEL_NAME
# echo "options IPFIREWALL_DEFAULT_TO_ACCEPT" >> KERNEL_NAME(주의 : 기본적으로 모든 패킷을 받길 원한다면 위의 문장을 포함시켜야 합니다.)
# cd /usr/src
# make buildkernel KERNEL=KERNEL_NAME
# make installkernel KERNEL=KERNEL_NAME
위의 명령들은 GENERIC을 여러분이 만들 kernel 이름으로 복사하고 firewall 옵션들을 추가하고 컴파일해서 새 kernel을 인스톨합니다. 새로운 kernel의 config 화일을 주의깊게 읽어 보시기 바랍니다. 커널 수정에 관한 자세한 사항은 FreeBSD 핸드북을 보시기 바랍니다. (http://www.freebsd.org/handbook/kernelconfig.html).
3.3 Firewall 셋팅하기
여러분이 일단 firewall의 규칙과 동작에 관하여 익숙해지고 나면 아마도 여러분은 IPFIREWALL_DEFAULT_TO_ACCEPT 옵션을 사용하지 않을 것입니다. 모든 걸 여러분 방식대로 하고 싶어 할테니까요.
3.4 IPFW 사용하기
IPFW은 처음에는 아주 복잡해 보이지만 점점 더 쉬워집니다. 컴퓨터가 부팅될 때 /etc/rc.firewall에 있는 firewall 규칙들이 동작하게 하려면 /etc/rc.conf에 firewall_enable=YES을 추가하면 됩니다. 또한 logging이 가능하게 하려면 firewall_logging_enable="YES"를 추가하고 부팅시 규칙들이 세팅되고 있는 동안 firewall을 그대로 두려면 firewall_quiet="YES"을 추가합니다. 이제 /etc/rc.firewall을 열어 이런 문장이 있는 곳을 찾습니다.:
# Everything else is denied by default, unless the
# IPFIREWALL_DEFAULT_TO_ACCEPT option is set in your kernel
# config file.
여러분은 바로 위의 예제처럼 rc.firewall에 규칙들을 추가하면 됩니다. IPFW를 위한 구문은 ipfw [-N] command [index] action [log] protocol addresses [options] 입니다.
규칙을 추가하려면 {$fwcmd}로 시작해야 하는데 이것은 ipfw와 같은 말로 rc.firewall에서 사용됩니다. command에는 만일 우리가 규칙을 추가한다면 add 라고 칩니다. action에는 패킷을 드롭시키고 패킷이 드롭된 소스 주소를 icmp로 알려주려면 reject를 사용하고 패킷 전달을 허용하려면 allow를, 패킷을 거부하고 소스 주소를 알리지 않으려면 deny를 사용합니다. protocol에는 tcp, udp, icmp 또는 모두 를 사용할수 있습니다. address의 문법은 from source_address [port,[port-port]] to destination_address [port,[port-port]] 입니다. 어드레스에 호스트네임이나 ip 를 쓰지 않고 any을 사용해도 됩니다. 아래의 예제는 보안을 염려하는 사람이나 서버를 운영하지 않는 사람에게 추천할 만 합니다.
# ipfw add deny tcp from any to localhost 1-1024 setup
(위 의 문장은 1-1024 포트로 들어오는 모든 트래픽을 차단할수 있는데 여러분이 제공하는 서비스를 누군가 사용하는 걸 원하지 않는다면 이렇게 하는 것이 좋습니다. 단 이렇게 되면 현 시스템이 외부세계와 접속이 불가능하다는 것을 알아야 합니다.)
# ipfw add deny tcp from any to localhost 6000-6063
(위의 문장은 X 윈도우를 이용하여 외부로 나가는 트래픽을 차단합니다.)
위의 예제들은 기초적인 몇가지 일 뿐입니다. 적절한 firewall 셋업은 여러분의 보안성을 높여주지만 그렇다고 결코 뚫을 수 없는 무적은 아닙니다. IPFW에 대해서 더 많은 정보를 원한다면 FreeBSD 핸드북을 보시기 바랍니다.(http://www.freebsd.org/handbook/firewalls.html).
Chapter 4. Services
4.1 INETD
Inetd는 telnet, ftp, sendmail 등을 포함하여 여러가지 시스템 서비스를 구동시키는 데몬입니다. inetd의 configuration 화일은 /etc/inetd.conf 인데 이 화일안에는 아래와 같이 엔트리를 가지고 있습니다.:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
telnet stream tcp nowait root /usr/libexec/telnetd telnetd
#shell stream tcp nowait root /usr/libexec/rshd rshd
가장 중요한 규칙은 원하지 않는 문장 앞에는 '#' 표시가 있다는 겁니다. 만일 어떠한 서비스도 원하지 않을 경우에는 보안성을 높이기 위해 inetd_enable="YES"을 inetd_enable="NO"로 바꾸어 줍니다. 컴퓨터에서 단지 shell 만을 원할 때는 inetd를 오프시키고 /usr/ports/security에서 ssh2를 설치하는 편이 낫습니다.
여러분이 telnetd만 사용하기로 했다면 몇가지 flag를 추가시켜야 하는데 그 중 두가지는 -h와 -U입 니다. -h는 사용자들이 완전히 로그인할때 까지 호스트의 특정 인폼을 보지 못하도록 하는 것이고 -U는 호스트네임으로 전환되지 않는 ip들을 막아줍니다.
telnet stream tcp nowait root /usr/libexec/telnetd telnetd -h -U
ftp 문장을 보면 -l 옵션이 붙은것을 알수 있습니다. 이 옵션은 logging이 가능토록 하는 것인데 ftp가 syslogd에 로그인 가능해야만 합니다. 이렇게 하려면 아래의 문장을 /etc/syslog.conf 에 추가해야 합니다. :
ftp.* /var/log/ftpd
ftpd의 추가적인 logging을 위해 -l을 추가 할수도 있습니다.
4.2 Standalone 데몬
여러분은 INETD를 사용하는 것 보다 대신 standalone daemon을 실행하는 것이 낫습니다.
/etc/rc.conf의 아래 문장을 수정해서 INETD를 사용하지 않도록 할 수 있습니다.
inetd_enable="YES"
이렇게 바꾸세요.
inetd_enable="NO"
INETD 는 다음 리부팅 할때 부터는 동작하지 않을 것입니다. 지금 바로 동작하지 않게 하려면 이렇게 하면 됩니다.:
killall inetd
이제 rc.network의 아랫부분에 daemons을 추가해 보기로 하겠습니다. 제가 INETD 대신 standalone daemon을 실행시키라고 강조했던 프로그램이 바로 ssh2 입니다. standalone을 실행시키면 훨씬 빨라집니다.
Chapter 5. DES와 MD5
5.1 비밀번호 암호화
4.2-RELEASE 이전에 FreeBSD는 기본 시스템 패스워드 암호화 기법으로 DES를 사용했습니다. 현재는 MD5가 기본입니다. FreeBSD는 DES에 대한 US 수출법의 규제 때문에 MD5로 바꾸게 되었습니다. MD5는 DES 보다 더욱 보안성이 좋다고 여겨졌기 때문에 MD5로 바꿔 사용하는 것에 별 손해는 없습니다. DES is there strictly for backward compatibility.
여러분이 사용하고 있는 패스워드 형태는 쉽게 알수 있습니다. 한 예로 /etc/master.passwd file을 보면 MD5 패스워드는 $1$로 시작하고 그 문장이 DES보다 길다는 것을 알수 있습니다.
여러분의 시스템이 사용하는 패스워드 형태를 알려면 아래와 같이 해서 libcrypt*가 가리키는 곳을 보십시요.
ls -l /usr/lib/libcrypt*
심볼릭 링크가 libdescrypt*을 가리킨다면 여러분은 DES를 사용하는 것이고 libmd5crypt*를 가리킨다면 MD5를 사용하는 것입니다.
DES를 사용하는 시스템 예제
bash# ls -l /usr/lib/libcrypt*
lrwxr-xr-x 1 root wheel 13 Dec 6 22:18 /usr/lib/libcrypt.a -> libdescrypt.a
lrwxr-xr-x 1 root wheel 14 Dec 6 22:18 /usr/lib/libcrypt.so -> libdescrypt.so
lrwxr-xr-x 1 root wheel 16 Dec 6 22:18 /usr/lib/libcrypt.so.2 -> libdescrypt.so.2
lrwxr-xr-x 1 root wheel 15 Dec 6 22:18 /usr/lib/libcrypt_p.a -> libdescrypt_p.a
-r--r--r-- 1 root wheel 1259976 Dec 6 22:38 /usr/lib/libcrypto.a
lrwxr-xr-x 1 root wheel 14 Dec 6 22:38 /usr/lib/libcrypto.so -> libcrypto.so.1
-r--r--r-- 1 root wheel 782240 Dec 6 22:38 /usr/lib/libcrypto.so.1
-r--r--r-- 1 root wheel 1341942 Dec 6 22:38 /usr/lib/libcrypto_p.a
bash#
Chapter 6. 결론
6.1 기억해야 할 규칙들
위의 방법을 따라하면 안전한 FreeBSD를 구축할 수 있습니다. 잊지말아야 할 중요한 사항은 새로운 취약점들이 지속적으로 대두되고 있다는 것입니다. 이 말은 여러분은 항상 최신 소스 코드를 유지해야한다는 말이며 freebsd-security@freebsd.org을 받아보길 진심으로 바랍니다.
기억해야 할 것은 :
소스를 최신 버젼으로 유지하기
불필요한 suid-root 프로그램은 설치하지 않기
firewall 규칙들을 최신으로 유지하기
범용적인 것을 사용하기 - 소스 없는 프로그램은 실행시키지 않기
6.2 참고자료
FreeBSD Handbook
FreeBSD]FreeBSD 5.3의 기본 필터링 PF사용법 by 조성준
출처 ::: http://www.kr.freebsd.org/
관련 주소 1 :
관 련 주소 2 :
관련 주소 3 :
안녕 하세요? 조성준 입니다.
PF는 보안에 철저한 OPENBSD에서 ipfilter 의 라이센스문제가 발생할때 개발된 네트웍 필터링 입니다.
기존의 FreeBSD에서는 거의 기본이다 시피안 ipfw 를 쓰기위해서는 커널 재업도 해야하고 성능역시 별로여서 저역시 ip_f 를 따로 셋팅하거나하였는데 요즘 5.3 설치할장비 가 있어 기본 모듈로 로딩되어 있는 pf를 있는데 전혀 딜레이가 보이지 않고 셋팅역시 간단해서 뭐 아직 이렇타하고 애기할만 한 경험수치가 아니지만 문서내용이나 고수들의 애기들로 보면 상용 방화벽 ?지않는 성능을 내고 상용 방화벽에서 지원하 지 않는 기능도 지원되고 무엇보다 좋은건 FreeBSD 5.3R을 깔면 기본 탑재가 되어 바로 적용가능 하다는것입니다.
- 설정 -[b]
기본적으로 기동이 되지 않은 상태라 기동할수 있게 해주어야 합니다.
[b]vi /etc/rc.con[b]
인용 또는 결과 :
pf_enable="YES" # PF를 기동시킨당
pf_rules="/etc /pf.conf" # PF의 필터링 설정파일 위치
pflog_enable="YES" # 필터링 로그를 남기기 위해 기동설 정
pflog_logfile="/var/log/pflog" # 필터링 되는 로그 파일
[root@good /root]$ _
자 그리구요 셋팅을 해야 하는데 기본적으 로 /etc/pf.conf 라는 예제 파일이 들어 있습니다.
모두 주석처리 되어 있고 자신이 쓸것만 뽑아 서 사용하면 됩니다.
초기 셋팅을 위해 사용한 옵션을 다음과 같습니다.
[b]vi /etc/pf.conf
인용 또는 결과 :
ext_if = 'fxp0' # 네 트웍 디바이스 이름 기본이죵
# states는 상태 테이블 엔트리가 사용할 메모리 엔트리 최대수 디폴트는 10000
# frags는 패킷재구성을 위한 메모리 엔트리 최대수 디폴트 5000
set limit {states 10000, frags 2000}
# in/out 패킷에 대한 로그 정보 수집대상 네트웍 디바이스
set loginterface $ext_if
# 이부분은 좀 고려를 하셔야 하는데 전체적인 pf의 설능 최적화에 관한 부분인데 설정 옵션은 다음과 같습니다.
# normal : 디 폴트로 무난한정도
# high-latency : 만그대로 하이~ 엄청난 규모의 트래픽이 왔다 갔다 할때
# aggressive : 약 간 위험성있는 옵션이지만 소통량이 많은 경우 메모리의 사용량을 최소로 할때는 이 옵션
# conservative : 메모 리 많이 사용하고 , CPU많이 잡아 먹오도 안정적이고 보수적으로다가. 비추?
set optimization aggressive
# 각 프로토콜관련해서 각 상태에 따라 timeout을 줄수 있습니다.
#set timeout { tcp.first 120, tcp.opening 30, tcp.established 86400 }
#set timeout { tcp.closing 900, tcp.finwait 45, tcp.closed 90 }
#set timeout { udp.first 60, udp.single 30, udp.multiple 60 }
#set timeout { icmp.first 20, icmp.error 10 }
#set timeout { other.first 60, other.single 30, other.multiple 60 }
#set timeout { adaptive.start 0, adaptive.end 0 }
# 블럭된 패킷 에 대한 응대 방법인데 drop은 쌩~ 배째 니 누꼬고 , return은 온그대로 다시 반사~
set block-policy drop
# PF는 먼저 모든걸 막고 시작한다. 아래는 in/out을 일단 모두 막아 버리고 시작
block in log all
block out log all
# pass즉 넌 통과 즉 로칼에서 나가고 들어오는적 즉 내부에서 놀이하는 건 모두 허용
# 맨아래 는 외부랑 연결된 fxp0에 대해서는 서버에서 밖으로 나가는 연결세션에 대해서는 모두허용
# 차 후는 막는게 좋치만 저는 처음 셋팅을 위해 일단 개발.
pass in quick on lo0 all keep state
pass out quick on lo0 all keep state
pass out quick on $ext_if keep state
# 역시 여는 옵션이데 눈으로보셔도 아시 다 싶피 UDP는 domain 포트만 즉 DNS서버를 돌린다 이거죠
pass in quick on $ext_if proto udp from any to $ext_if port { domain }
# tcp프토토콜에어 대해서는 아래 포트는 오픈하겠다는거죠
pass in quick on $ext_if proto tcp from any to $ext_if port { ssh, http , https , ftp ,smtp } flags S/SAFR keep state
[root@good /root]$ _
- 적용 -
처 음에는 적용은 일단 리부팅...... 그리고 음료수 한잔 ,
자 그 다음은 뭘해야 할깡?
자 이제 컨트롤을 위한 툴 로 pfctl 이라는 툴프로그램을 제공하면 간단하게 다음의 옵션을 이용해서 pf를 컨트롤 하시면 됩니다.
- 관리 하기-
# 변경된 설정파일 적용
pfctl -f /etc/pf.conf
# 문법 검사
pfctl -nf /etc/pf.conf
# 필터링 셋팅 룰 보기
pfctl -sr
# 상태 테이블 정보괴
pfctl -ss
# 필터링 상태와 카 운팅 보기
pfctl -si
# 추천 : ALL ^^ 보두 보기 한방에
pfctl -sa
- 로그 관찰 -
이제 로그를 봐야 한다. 왜 관리자니깐 자 그럼 tail /var/log/pflog
역시 깨진 글자만 보일겁니다.일반적인 TEXT View프 로그램으로는 볼수 없습니다.
자 여기서 쌩뚱 맞게 ifconfig -a 명령을 해보세요
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33208
라는 네트웍 카드가 꼽힌거 마냥 나탈날텐데 가상의 log용 어뎁터입니다.
자 그럼 잡설은 그만하고 로그 보 는 방법은
# 로그보기
tcpdump -n -e -ttt -r /var/log/pflog
자 위 방 법은 실시간이 아니라 이벤트 발생에 의해 파일에 Write된걸 보는지라 실시간으로 볼수 없습니다
실시간으로 볼려 면 tcpdump로 위에본 가상 어뎁터를 감시해야 합니다.
# 실시간 보기
tcpdump -n -e -ttt -i pflog0
실행하고 나면 뭔가 열심히 나옵니다 ^^
필터링을 원할경우는 | grep 은 하지마시구요 다음과 같 이 해보세요
# 실시간 보기 80port만
tcpdump -n -e -ttt -i pflog0 port 80
# 실시간보기 특정 IP
tcpdump -n -e -ttt -i pflog0 host XXXX.XXX.XXX
서로 연결해서 다중으로 할때는 and 를 붙이면 됩니다.
tcpdump -n -e -ttt -i pflog0 port 80 and host 127.0.0.1
오늘은 여기까징. OPENBSD쪽 자료를 보시거나 man pf.conf를 통한 man page를 보시면
더 쉬 우실겁니다.
pf의 성능도 성능이거니와 기능역시 대단합니다.
앞으로 계속 보고 있으니 좀더 되면 study란 쪽에 작성해보겠습니다.
pf가 현재의 *BSD 계열에는 이제 모두 기본지원이 되는지라 pf만 잘 연마하고 있으니 다른 BSD로 넘어 가도 필터링 문제는 이제 큰게 상관없이고 고가의 상용 방화벽 못지 않은 구축이 가능할것 같습니다.
이렇게 간단하게나마 쓰는것이 pf의 대단함을 깔보는것 처럼 느껴져서 않올릴려고 했었는데. 얼마전에 위글을 만들어 둔거지만. 하두 썰렁하고 잠이 아직 않와서 올립니다.
다들 도움이나 되실런지 모르겠습니다.
라벨:
BSD,
FreeBSD,
os,
packet filter,
PF
FreeBSD]FreeBSD + rdesktop + windows 2003 사용하기
rdesktop 을 사용해보겠사옵니다.
어쩔수없이 윈도를 사용해야할 경우 윈도서버에 접속해서 사용하는 방법이며 윈도서버 한대가 여유있는 분만 해당되겠사오나, wine 등의 에뮬보다는 훨빠른 것으로 알고 있기에 초강추이옵나이다.
1. Windows 2003 서버쪽 세팅
사운드를 듣기위해서 2003 서버쪽에서 해주어야 할일이 있나이다.
시작->관리도구->터미널서비스구성->연결에서 rdp-tcp 연결되있는 클라이언트를 우측마우스키로 누르시면 속성->클라이언트설정->오디오매핑의 체크를 해제해주면 되옵니다.
2. rdesktop 설치
/usr/ports/net/rdesktop 에서 make install clean 하시면 되오며,,
rdesktop -r sound -K -a 16 -g 1350x950 -u administrator -p xxxxx ip.ip.ip.ip
이렇게 사용하는 정도가 디폴트가 되겠사오며, rdesktop --help 하시면 더 많은 옵션을 참고할수 있사옵니다.
rdesktop 의 세계를 가르쳐주신 자우랑님과 2003 의 세계를 가르쳐주신 JEijuNN님께 감사드리옵나이다.
망극;
FreeBSD]apache2+php5 설치
(2005년 01월 13일 오후 03:00)
아파치2와 php5 포트에서 설치하기.
** make show-options
|--> 위의 명령으로 해당 포트를 make하기전 사용가능한 옵션을 볼 수 있다고 하네요..
먼저 mysql server를 설치합니다.
# cd /usr/ports/www/apache2
# make install clean
***********************************************
/usr/local/etc/rc.d/apache2.sh 에 시동파일이 복사됩니다.
아파치를 데몬으로 기동하기 위해서는 /etc/rc.conf 에 apache2_enable="YES"를 추가한다.
***********************************************
# cd /usr/ports/www/mod_php5
====> # cd /usr/ports/lang/php5-extension
테 스트중 php5 가 불안한 경우가 있다.
그럴경우
# cd /usr/ports/lang/php4-extension
에서 작업을 하면된다. 쉽게 말해 php4를 깔면 된다는 얘기 ^^
# make install clean
(컴파일하고 인스톨하면서 /usr/ports/lang/php5-extension 에서 빌드를 하니깐 옵션선택 메뉴가 나오네요... ^^ (1주일간 헤매다가 찾았네요... ㅠ__ㅠ)
옵션설정 이 메뉴가 나오네요...
필요한 옵션을 설정합니다.
세션과 mbstring pcre_regex는 기본
** make install clean 시에 에러 발생하고 설치가 중단이 되면
make deinstall 을 하면 설치가 지워진다. 그후 다시 make install 을 해도 옵션 선택창이 보이지 않는데 이럴 경우 make config install 이라고 하면 옵션 선택 창이 나오고 설치 작업이 계속 이어지게 된다.
)
# vi /usr/local/etc/apache2/httpd.conf
*********************************************
확인사항
LoadModule php5_module libexec/apache2/libphp5.so
추가사항
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html index.html.var
AddDefaultCharset ISO-8859-1 => AddDefaultCharset ISO-2002-KR
*********************************************
# mv /usr/local/etc/php.ini-recommended /usr/local/etc/php.ini
# vi /usr/local/etc/php.ini
*********************************************
register_globals = Off => On
file_upload = On
session.auto_start = 0 => 1 로 변경
*********************************************
FreeBSD] x윈도우 설치
(2005년 01월 14일 오전 11:05)
이글은 현재 제가 사용하고 있는 FreeBSD 5.3R 버전을 기반으로 X를 띄우는 작업을 하면서 작성을 합니다.
작성시 참고서적은 FreeBSD핸드북의 Chapter5. The X Window System 원문을 참조하며, 작업중 이상하거나 본인의 시스템에 안맞는 경우는 코멘트를 달아가면서 하겠습니다.
======================================
시스템사양 :
CPU : intel P4 1.4G
Ram : 768M
HDD : 8.4G 6.4G
VGA : nVidia GeForce 3 64M
NIC : Realtek 8194
모니터 : 상성 syncMaster CDP17s (HorizSync 30-70/ VertRefresh 50-160)
======================================
1. 설치
FreeBSD 5.3R 부터 X11의 기본이 Xorg로 바뀌어 시작한다고 한다.
물론 그 이전에는 X11의 기본은 XFree86이었습니다.
또 Xorg는 X.Org 조직에 의해 배포되는 X11R6.7의 X11서버랍니다.
X11R6.7은 XFree86 4.4RC2 와 X11R6.6 코드에 근거하고 있습니다.
X.Org 는 X11R6.7을 2004.4월에 릴리즈했습니다.
**포트에서 Xorg 빌드 및 설치
# cd /usr/ports/x11/xorg
# make install clean
주의 : Xorg 전체를 빌드하기 위해서는 최소한 4G정도의 여유공간이 있어야
합니다.
**포트에서 XFree86 빌드 및 설치
# cd /usr/ports/x11/XFree86-4
# make install clean
다른 방법으로는, X11을 패키지로부터 직접 설치할 수도 있습니다.
pkg_add(1)툴로 바이너리패키지 X11을 설치 가능합니다.
원격에서 pkg_add(1)를 사용하면 최신의 프로그램을 가지고 오게 됩니다.
# pkg_add -r xorg
or
# pkg_add -r XFree86
주의 : 위의 예는 X11배포본(서버, 클라이언트, 폰트등을 포함한)을 설치할 것이다.
나머지는 X11을 설정하고 desktop 환경을 어떻게 구축하는지에 대해 설명합니다.
XFree86 에서 Xorg로 옮겨가기 (생략)
**
현재 제가 빌드하고 있는데 좀 오래걸리네요...
빌드하라고 하구선 계속 쓰고 있을랍니다... ^^
이글은 윈도우OS에서 작업을 하는거랍니다. ;P
**
FreeBSD] x윈도우 설정 및 테스트
(2005년 01월 14일 오전 11:10)
2. X11 설정하기
2.1 시작하기 전에
현재 시스템에 대한 아래사항의 정보가 있어야만 합니다.
-모니터 사양 // 비디오카드 칩셋 // 비디오카드 메모리
2.2 X11 설정
X11의 설정작업은 multi-step작업이다.
2.2.1 첫번째는 initial 설정파일을 생성합니다.
# Xorg -configure
XFree86 타입은
# XFree86 -configure
위의 명령은 X11설정 스켈레톤파일을 /root 디렉토리에 xorg.conf.new 라고 하는 파일을 생성합니다.
# Xorg -config xorg.conf.new
or
# X -xf86config /root/xorg.conf.new
위의 명령으로 테스트한 후 Ctrl Alt Backspace키를 눌러 빠져나옵니다.
2.2.2 다음은 존재하는 설정하일을 설치하고자 하는 시스템에서 그래픽하드웨어로 작업을 할수 있는지 테스트합니다.
# Xorg -config xorg.conf.new
or
# XFree86 -xf86config XFree86Config.new
만약 검정과 회색의 격자와 X 마우스 커서가 보인다면 설정은 성공적인것입니다. 테스트를 빠져나가기 위해 Ctrl Alt Backspace키를 누르면 됩니다.
주의 : 만약 마우스가 보이지 않으면 첫번재 설정작업을 다시 하세요...
Section 2.9.10 FreeBSD인스톨을 참조하세요...
2.2.3 xorg.conf.new (혹은 XFree86config.new )설정파일수정하기
emacs나 ee 혹은 vi 같은 텍스트에디터로다가 설정파일을 엽니다. 첫번째로 설치하고자 하는 시스템의 모니터의 주사율을 추가합니다.
이것은 xorg.conf.new 파일의 'Monitor' 섹션에 아래와 같은 형식으로 값을 추가하면 됩니다.
**********************
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
HorizSync 30-107
VertRefresh 48-120
EndSection
************************
** 한솔모니터 17인치의 경우 HorizSync : 30-75 VertRefresh : 40-160 **
HorizSync 와 VertRefresh 는 설정파일에 없을수도 있으니 알아서 넣으면 됩니다.
다음으로 해상도는 기본으로 설정을 해도 된다. 다음은 그 예입니다.("Screen" 섹션입니다.)
**************************
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1024x768"
EndSubSection
EndSection
****************************
2.2.4 설정파일을 저장하고, 위에서 주어진 테스트모드로 테스트를 한다.
주의 : 문제 발생시 /var/log/Xorg.0.log (/var/log/XFree86.0.log) 에 기록이 된다. 만약 Xorg.0.log가 있으면 Xorg.0.log~Xorg.8.log 까지의 사이의 파일에 기록이 됩니다.
2.2.5 위의 모든 작업이 정상적으로 수행이 되었다면 Xorg나 XFree86이 설치된곳에서 설치파일을 찾을것이다. 이것은 전형적으로 /etc/X11/xorg.conf 나 /usr/X11R6/etc/X11/Xorg.conf 이 된다.
(XFree86에서는 /etc/X11/XF86Config 나 /usr/X11R6/etc/X11/XF86Config)
# cp xorg.conf.new /etc/X11/xorg.conf
혹은 XFree86 :
# cp XF86Config.new /etc/X11/XF86Config
이렇게 해서 X11설정작업은 끝납니다.
이제 XFree86 4.x 에서의 startx로 X를 시작하기 위해서는 x11/wrapper 포트를 설치해야 합니다.
Xorg 는 이미 wrapper코드를 포함하고 있기 때문에 따로 설치하지 않아도 됩니다.
X11서버는 여전히 xdm을 사용하여 구동될 것이다.
주의 : 그래픽적인 설정툴인 xorgcfg(XFree86의 경우 xf86cfg)가 X11배포본에 같이 포함되어 있다. 콘솔에서 작업시 명령은 xorgcfg -textmode 로 해서 작업을 하면 됩니다. 다른 것으로는 xorgconfig 가 있는데 이것은 사용자에 덜 친숙한 콘솔용 프로그램입니다.
2.3 향상된(??) 설정
2.3.1 intel i810 그래픽 칩셋 설정
intel i810 통합칩셋의 설정은 X11을 위한 agpgart AGP 프로그래밍 인터페이스를 필요로 합니다.
apg(4)드라이버는 4.8R과 5.0R 로 릴리즈되는 동안 GENERIC 커널에 포함되어 있습니다.
이전 릴리즈버전은 , 아래의 문장을 삽입하세요.
device agp
커널을 다시 빌드한 경우라면 , asp.ko 커널모듈을 부팅시 loader(8)에 의해 로드하기를 원할 것입니다.
그런경우 /boot/loader.conf 파일에 다음과 같이 간단한 문장을 삽입하면 OK
agp_load = "YES"
다음으로 4.X 나 그 이전버전의 경우, 디바이스노드는 프로그래밍 인터페이스의 생성을 필요로 합니다.
AGP 디바이스 노드의 생성은 MAKEDEV(8) 을 /dev 디렉토리에서 실행합니다.
# cd /dev
# sh MAKEDEV agpgart
주의 : FreeBSD 5.X 나 이후 버전은 devfs(5)을 사용하여 디바이스노드에 위시킬것이어서, MAKEDEV(8)작업은 필요하지 않습니다.
이러한 설정작업에 따라서 어떤 종류의 그래픽카드도 인식가능합니다.
NOTE :
언급한 시스템에 agp(4)드라이버가 컴파일된 커널에 없다면 kldload(8)과 함께 모듈을 로드해보기 바랍니다.
이 드라이버는 /boot/loader.conf. 에서 사용되거나 혹은 컴파일되어 커널 부팅시에 같이 로드될 것입니다.
만약 XFree86 4.1.0(혹은 이후버전)을 사용고 fbPictureInit 과 같은 메시지를 보게되면, 다음의 'i180'드라이버를 X11설정파일에 추가하시기 바랍니다. :
Option "NoDDC"
FreeBSD] X에서의 한글 사용
이글은 http://www.godisgreen.com/wikix/ 의 "FreeBSD/한글 로케일설정하기" 와 "한글 문제" 를 참고하였습니다.
한글 로케일 설정 ]
===========================================
한글로케일을 설정하기 위해선 다음과 같이 쉘상에서 환경변수를 설정해주시거나.. 쉘 설정파일인 .cshrc , .tcshrc .bashrc 등의 파일에 다음과 같이 입력해주시면 됩니다
tcsh에서 설정할때
**********************************
setenv LANG ko_KR.EUC ==> 5.3R에서는 ko_KR.eucKR
setenv LC_CTYPE ko_KR.EUC
setenv MM_CHARSET euc-kr ==> 위에서 LANG 만 .cshrc 에 추가를 하고 nabi를 띄우면 이상이 없네요..
bash에서 설정할때
**********************************
export LANG=ko_KR.EUC
export LC_CTYPE=ko_KR.EUC
export MM_CHARSET=euc-kr
==> 위와 같이 설정시 나중에 포트를 빌드하거나 커널컴파일시에 에러가 나는수가 있는데 이런 경우 LANG=ko_KR.EUC를 LANG=C로 바꾸어주고 다시 컴파일을 하면 무리없이 됩니다.
한글 문제 ]================================
.xinitrc또는 .cshrc에 다음을 추가해주세영~
xmodmap -e "keycode 121 = Hangul_Hanja" &
xmodmap -e "keycode 122 = Hangul" &
2012-09-09
FreeBSD] x11에서 폰트사용
3.1 Type1폰트
X11에 기본으로 포함된 폰트들은 전형적인 출판프로그램의 것보다 덜하다. 큰폰트는 덜 전문적으로 제작된것처럼 보이고, 적은폰트들은 넷스케이프에서는 거의 알아볼 수 없는 것들도 있다.
어쨋든 몇몇은 공짜이고, 고품질은 Type1(PostScript)폰트를 사용할 수 있다.
일예로 URW폰트컬렉션(x11-fonts/urwfonts)은 고품질의 표준 Type1폰트(Time Roman, Helvetica, Palatino등)를 포함하고 있다.
Freefont컬렉션(x11-fonts/freefonts) 는 많은 폰트를 포함하고 있지만 대부분은 Gimp와 같은 그래픽용 소프트웨어에서 사용될 것이며, 화면용 폰트로는 완전하지가 않다.
게다가 X11에서는 최소한은 노력으로 트루타입폰트를 사용할 수 있다.
자세한것은 X(7) 메뉴얼페이지를 보거나 핸드북의 트루타입폰트 섹션을 참고하세요.
포트컬렉션에서 Type1폰트 컬랙션을 설치하려면 다음의 명령을 입력하세요...
# cd /usr/ports/x11-fonts/urwfonts
# make install clean
freefont나 다른 컬렉션도 마찬가지이다. X서버는 이러한 폰트들을 검출해내고, X서버 /etc/X11/(Xorg:xorg.conf, XFree86:XF86Config) 설정파일에 아래 정보를 추가한다.
FontPath "/usr/X11R6/lib/X11/fonts/URW/"
또는 , X 세션 실행시에 다음의 명령라인을 입력한다.
% xset fp /usr/X11R6/lib/X11/fonts/URW
% xset fp rehash
이 방법은 X세션이 닫히면 잃어버리며, 그래서 시작파일(~/.xinitrc : 일반 startx세션, ~/.xsession : xdm같은 그래픽로긴관리자를 통해 로긴할경우)에 추가를 해놓는다.
3번째는 새로운 /usr/X11R6/etc/fonts/local.conf 파일에 다음섹션의 anti-aliasing을 사용하는 법이다.
3.2 트루타입폰트
XFree86 4.X 와 Xorg는 트루타입폰트를 지워하도록 되어있다.
이는 두개의 다른 모듈이 하나의 기능으로 가능하도록 할 수 있게 되어있다. freetype모듈은 이 예제에서 사용되어진다. 왜냐면 이것이 백-엔드에서 다른 폰트렌더링에 더 알맞기 때문이다.
freetype폰트 모듈은 "/etc/X11/xorg.conf " 나 "/etc/X11/XF86Config" 파일의 'Module' 섹션에 다음의 라인을 추가하면 된다.
Load "freetype"
XFree86 3.3.x 에서는 트루타입폰트서버는 필요에 의해서 분리했다. Xfstt는 일반적으로 앞의 목적을 위해서 사용되었다. Xfstt를 설치하기 위해서는 x11-servers/Xfstt 포트를 설치하면 간단하게 된다.
트루타입폰트를 위한 디렉토리, 예를 들면 /usr/X11R6/lib/X11/fonts/TrueType 을 만들고, 현재 디렉토리에 있는 모든 트루타입폰트를 복사한다. 트루타입폰트는 매킨토시에서 직접가지고 올 수는 없고, UNIX/MS-DOS/Windows 포맷만이 X11에서 사용될 수 있다. 한번 복사한 후, "ttmkfdir"을 사용해서 fonts.dir 파일을 생성하면, X 폰트 생성기(렌더러)가 이 새로운 파일들을 알아서 설치할 것이다.
ttmkfdir은 FreeBSD x11-fonts/ttmkfdir 같은 포트컬렉션으로부터 얻을 수 있다.
# cd /usr/X11R6/lib/X11/fonts/TrueType
# ttmkdir > fonts.dir
다음으로 TrueType 디렉토리에 폰트경로를 추가한다.
이것은 아래의 방법과 같이 하면 되고, 이 방법은 위에 기술된 Type1 과 같은 방법이다.
% xset fp /usr/X11R6/lib/X11/fonts/TrueType
% xset fp rehash
또는 xorg.conf 나 XF86Config 파일에 FontPath 줄을 추가한다.
이렇게 설치된 트루타입폰트들은 넷스케이프, Gimp, StarOffice 또는 다른 모든 X프로그램에서 인식이 될것이다.
극히 작은 폰트나 극히 큰 폰트들도 이전보다 나아보일것이다.
3.3 Anti-Aliased Fonts (안티알리아스드 폰트)
Joe Marcus Clarke 가 갱신함
안티알리아싱은 XFree86 4.0.2 때부터 X11에서 사용할 수 있게 되었다.
하여간 폰트 설정은 XFree86 4.3.0 이 소개되기 전까지는 귀찮은 작업이었다.
XFree86 4.3.0 이 나오면서부터 X11의 모든 폰트가 /usr/X11R6/lib/X11/fonts/ 와 ~/.fonts 디렉토리에 있게되고 Xft-aware 프로그램들이 안티알리아싱을 자동적으로 사용가능하게 되었다.
모든 프로그램이 Xft-aware적인 것은 아니지만, 많은 것들이 Xft의 지원을 받게 되었다. Xft-aware적인 것의 예를 들면 Qt 2.3 과 그이상버전(KDE 데스크탑을 위한 툴킷), GTK 2.0가 그이상버전(GNOME 데스크탑을 위한 툴킷)과 Mozilla 1.2 이상버전들이다.
폰트를 조절하거나 또는 안티알리아싱 속성을 설정하기에 따라서 안티알리아스드되기도 하고, /usr/X11R6/etc/fonts/local.conf파일을 생성(존재하는것을 수정) 해서 만들기도 한다.
Xft폰트시스템의 더 나은 방법은 이 파일을 튜닝할 수 있다는 것이다.
이 섹션은 단지 약간의 가능성만 보여준다. 더 자세한 사항은 fonts-conf(5)를 보기 바랍니다.
이 파일은 아래와 같은 XML포맷으로 되어 있고 DOCTYPE로 정의된 XML헤더를 따르고 있으며, <fontconfig>라는 태그를 사용한다.
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
이전 상태에 따라,/usr/X11R6/lib/X11/fonts/과 처럼 ~/.fonts/ 에 있는 모든 폰트는 Xft-aware 프로그램에서 사용가능하게 만들어졌다.
만약 이런 두개의 디렉토리 트리외에 다른 디렉토리를 더하고자 하면, 다음과 같은 라인을 /usr/X11R6/etc/fonts/local.conf 파일에 추가하면 된다.
<dir>/path/to/my/fonts</dir>
새 폰트를 추가하거나 새폰트 디렉토리를 추가한 후, 아래의 명령으로 폰트 캐시를 리빌드해야한다.
# fc-cache -f
안티 알리아싱은 경계를 약간 흐리게 만들어, 아주 작은 텍스트와 큰 텍스트의 계단현상을 제거해줌으로 해서 가독성을 높여주지만, 일반 텍스트에 적용하면 눈의 피로의 원인이 될 수 있습니다.
안티알리아싱을 14포인보다 작은 폰트사이즈는 제외하고자하면 애래의 문장을 추가하세요.
<match target="font">
<test name="size" compare="less">
<double>14</double>
</test>
<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>
<match target="font">
<test name="pixelsize" compare="less" qual="any">
<double>14</double>
</test>
<edit mode="assign" name="antialias">
<bool>false</bool>
</edit>
</match>
어떤 모노스페이스된 폰트의 간격은 안티알리아싱에 부합하지 않을수도 있다.
특히 KDE에서... 이런 문제를 해결하는 것들 중 하나는 폰트의 간격을 100으로 고정하는것이다.
그 예는 아래에 있다.
<match target="pattern" name="family">
<test qual="any" name="family">
<string>fixed</string>
</test>
<edit name="family" mode="assign">
<string>mono</string>
</edit>
</match>
<match target="pattern" name="family">
<test qual="any" name="family">
<string>console</string>
</test>
<edit name="family" mode="assign">
<string>mono</string>
</edit>
</match>
아래의것도 첨부.
<match target="pattern" name="family">
<test qual="any" name="family">
<string>mono</string>
</test>
<edit name="spacing" mode="assign">
<int>100</int>
</edit>
</match>
Helvetica같은 폰트는 안티알리아싱을 할때 문제가 발생할 수 있다. 이런 문제는 폰트가 수직으로 반절이 잘려진것처럼 보인다는 것이다. 더욱 안좋은 것은 Mozilla와 같은 프로그램과 충돌이 발행하는 원인이 될 수 있다는 점이랍니다. 이현상을 피하기 위해, local.conf 파일에 아래의 사항을 추가하는것을 고려해봄직합니다.
<match target="pattern" name="family">
<test qual="any" name="family">
<string>Helvetica</string>
</test>
<edit name="family" mode="assign">
<string>sans-serif</string>
</edit>
</match>
local.conf 파일의 수정을 마친후 파일의 끝에 </fontconfig> 태그를 추가해야만 합니다. 이것이 없다면 수정 사항이 무시되니까요....
X11에 설정되어 있는 기본폰트는 안티알리아싱 적용시 적절해 보이지 않는다.
x11-fonts/bitstream-vera 포트에 있는것이 기본 폰트보다 더 많이 찾을 수 있다.
이 포트는 만약 없다면 /usr/X11R6/etc/fonts/local.conf 파일을 설치할 것이다.
위 파일이 존재한다면, 포트는 /usr/X11R6/etc/fonts/local.conf-vera 파일을 생성한다.
/usr/X11R6/etc/fonts/local.conf 파일에 /usr/X11R6/etc/fonts/local.conf-vera 의 내용을 합하면, 비트스트림폰트는 X11의 Serif, Sans Serif, Monospaced 폰트를 자동으로 대체하게 될것이다.
마지막으로, 사용자들은 자신의 고유의 설정을 자신들의 .fonts.conf 파일을 통해 추가할 수 있다.
이때 할 일은 각 유저는 ~/.fonts.conf 파일을 생성하기만 하면 된다. 이 파일도 XML형식을 가진다.
마지막 사항: LCD인 경우 sub-pixel 샘플링을 요구할 지도 모른다.
이는 기본적으로 (수평으로분리된) Red, Green, Blue 색상요소들의 향상된 분리(?)로 , 수평주사율을 의미한다.
그 결과물은 드라마틱하다. 이를 가능하게 하려면, local.conf 파일에 다음의 문장을 넣어준다.
<match target="font">
<test qual="all" name="rgba">
<const>unknown</const>
</test>
<edit name="rgba" mode="assign">
<const>rgb</const>
</edit>
</match>
이렇게 하면 안티알이아싱을 X 서버가 시작되면서 사용할 수 있게 된다.
FreeBSD] X 디스플레이매니저
4. X 디스플레이 매니저 (XDM, 화면 관리자??)
이하 디스플레이 매니저를 화면 관리자로 통일합니다.
4.1. 개관.
X 화면 관리자(XDM)은 X 윈도우시스템의 추가적인 부분이며, 이는 로긴세션 관리에 사용된다. XDM은 몇가지의 솔루션에 유용하며, 최소, "X 터미널", 데스크탑, 대규모 네트웍 디스플레이서버에 포함되어 있다.
X윈도우 시스템은 네트?과 프로토콜 독립적이어서, 그것은 광범위하게 X 서버와 클라이언트의 운영을 네트웍을 통해 서로 다른 머신들에 접속이 가능하게 운영하기 위한 설정이 가능하게 되어 있다.
XDM은 그래픽적인 인터페이스를 제공하는데 접속하려는 디스플레이서버를 선택할 수 있고, 로긴과 패스워드 조합과 같은 인증정보를 입력할 수 있다.
XDM의 사상은 getty(8) 유틸리티가 사용자에게 하는 것과 같은 기능을 제공한다(??? => 뭔말이고??? 모르겠당...)
4.2 XDM 사용하기
XDM 데몬프로그램은 /usr/X11R6/bin/xdm에 위치한다. 이 프로그램은 root처럼 언제나 동작가능하며, 로컬머신의 X display 관리를 시작할 것이다.
만약 XDM이 매번 부트될때마다 실행되기를 원하면 /etc/ttys 의 엔트리에 추가해주는게 사용하기 편할 것이다.
/etc/ttys 파일에 XDM 데몬을 가상터미널에서 실행하기 위한 아래의 기본명령어 라인이 있다.
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure
이 엔트리는 기본값으로 비활성화 되어있다. 활성화 시키기 위해 5번째 필드의 off값을 on으로 변경하고 init 을 재 시작하면 된다.
1번째 필드는 이 프로그램이 관리할 터미널 명이며 , ttyv8 이다. 이 뜻은 XDM은 9번째 가상터미널에서 실행된다는 의미이다.
4.3 XDM 설정
XDM설정 디렉토리는 /usr/X11R6/lib/X11/xdm 에 위치한다. 이 디렉토에는 행위를 변경하고, XDM의 모양을 변경하는 몇몇 파일이 있다.
아래에 그 리스트를 보인다.
File Description
Xaccess Client authorization ruleset.
Xresources Default X resource values.
Xservers List of remote and local displays to manage.
Xsession Default session script for logins.
Xsetup_* Script to launch applications before the login interface.
xdm-config Global configuration for all displays running on this machine.
xdm-errors Errors generated by the server program.
xdm-pid The process ID of the currently running XDM.
또한 이 디렉토리에는 몇개의 스크립트와 XDM실행시에 사용되는 데스크탑설정하는데 사용되는 프로그램이 보인다.
이 파일들의 각각의 목적은 간단히 설명하게 될것이다. 정확한 문법과 사용법은 xdm(1)에 기술되어 있다.
4.3.1 Xaccess
XDM에 접속하여 화면을 제어하는 프로토콜로 X 화면관리자 접속 프로토콜(XDMCP)라고 한다. 이 파일은 XDMCP 원격머신으로부터 접속을 제어하기위한 룰셋이다. 기본적으로, 이것은 모든 접속하고자 하는 클라이언트를 허용하지만, xdm-config 에서 원격접속을 위한 LISTEN을 변경하면 문제가 아니다. (???)
4.3.2 Xresources
이는 화면선택자와 로긴화면을 위한 기본프로그램이다. Xresources는 로긴프로그램의 모양을 띄고 있으며, 수정이 가능하다.
4.3.3 Xservers
Xservers는 원격 디스플레이 선택자를 제공한다.
4.3.4 Xsession
Xsession은 사용자가 로긴한 후 XDM을 실행하기 위한 기본세션스크립트이다. 사용자들은 ~/.xsession 에 최적화된 세션스크립트를 사용할 수 있고 이 스크립트는 오버라이드 된다.
4.3.5 Xsetup_*
Xsetup_*은 선택자나 로긴 인터페이스가 보이기전에 자동빵으로 실행됩니다. 각 디스플레이를 위한 스크립트들이 사용되고, 로컬 디스클레이 번호(예를 들면 Xsetup_0 와 같은 식으로 )에 따라서 이름이 Xsetup_* 으로 부여된다.
Xsetup_*은 전형적으로 하나 혹은 둘 이이상이 xconsole처럼 뒷단(backend)에서 실행될것이다.
4.3.6 xdm-config
xdm-config는 기본프로그램의 형식과 각각 설치, 관리 가능한 형식을 내용으로 가지고 있다. (??? 맞는감??? 잘 모르겠당..)
4.3.7 xdm-errors
xdm-errors는 X 서버가 XDM 이 실행하려는 횟수를 출력한다. XDM이 어떤 이유로 인해 hang이 발생하면, 이는 에러메시지를 보기위한 좋은 껀수가 되는것이다. 이 메시지는 사용자의 ~/.xsession-error 파일에 매 세션마다 쓰여진다.
4.4 네트웍 디스플레이서버 실행하기
각각 다른 클라이언트가 디스플레이서버에 접속함에 따라서, 액세스컨트롤?이 변경이 되어지고, 커넥션리스너가 허용이 될것이다. 이러한 기본설정은 낡은 값이 되는것이다. XDM 접속을 위한 리슨을 생성하면, xdm-config 파일에서 처음에 아래의 코멘트를 볼수 있다.
! SECURITY: do not listen for XDMCP or Chooser requests! Comment out this line
if you want to manage X terminals with xdmDisplayManager.requestPort: 0
-->" XDMCP나 chooser 리퀘스트를 listen하지 마시오.
만약 X터미널로 xdm을 관리하려면 리퀘스트포트를 0번으로하라 " 는 내용이 아닌가??? 아님 말구...
이후 XDM을 재기동 한다.(restart).
주석에 있는 내용을 기억하세요. "!" 문자로 시작하는게 주석처리 문자랍니다. "#" 이 아니구여.
더 자세한 내용은 xdm(1) 매뉴얼 페이지를 참고하세요.
4.5 XDM대체하기
kdm(KDE번들)과 같은 것으로 대체가 가능하다.
라벨:
BSD,
FreeBSD,
os,
X 디스플레이매니저,
xwindow
피드 구독하기:
글 (Atom)