2006년 5월 31일 수요일
리눅스 셋팅후 보안 점검 리스트
1. 서버로 사용할 예정이라면 X-Window는 설치하지 않는다
2. ps aux 또는 ps auxc로 확인하여 불필요한 데몬은 띄우지 않는다.
기본적으로 portmap / identd / atd / lpd /gp -t / xfs 등은 삭제.
3. /etc/rc.d/rc3.d에서 불필요한 서비스는 삭제한다.
4. 불필요한 계정은 삭제 한다.
ftp, xfs, adm, lp, newes, gopher를 /etc/passwd와 /etc/group 에서 주석처리 또는 userdel uid, groupdel gid를 하면 된다.
#userdel adm
#userdel lp
#userdel sync
#userdel shutdown
#userdel halt
#userdel news
#userdel uucp
#userdel operator
#userdel games
#userdel gopher
#userdel ftp (anymous FTP server를 운영하지 않으면 삭제 한다.)
#groupdel adm
#groupdel lp
#groupdel news
#groupdel uucp
#groupdel games
#groupdel dip
#groupdel pppusers
#gropudel slipusers
5. 퍼미션 설정변경-몇몇 중요한 설정 파일의 퍼미션을 변경하영 일반 유저들의 접근을 제한한다.
chmod 700 /etc/exports
chmod 700 /etc/fstab
chmod 700 /usr/bin/chage
chmod 700 /usr/bin/wall
chmod 755 /usr/bin/man
chmod 700 /usr/bin/chfn
chmod 700 /usr/bin/write
chmod 700 /usr/sbin/usernetctl
chmod 700 /bin/mount
chmod 700 /bin/umonut
chmod 700 /sbin/netreport 로 사용을 불가능하게 한다.
chattr +i /etc/fstab와 같이 속성에 Lock을 걸어 파일을 수정 할 수 없게 한다.
6. 시스템 관련 명령어를 특정 그룹에서만 사용가능 하도록 설정
(특정적인 사용자에게만 권한을 줄 수 있다.)
chmod 750 /bin/ps
chmod 750 /bin/netstat
chmod 750 /bin/dmesg
chmod 750 /bin/df
chmod 750 /usr/bin/who
chmod 750 /usr/bin/finger
chmod 750 /usr/bin/last
chmod 750 /usr/bin/top
chmod 750 /usr/bin/w
chgrp wheel /bin/ps
chgrp wheel /bin/netstat
chgrp wheel /bin/dmesg
chgrp wheel /bin/df
chgrp wheel /usr/bin/w
chgrp wheel /usr/bin/who
chgrp wheel /usr/bin/finger
chgrp wheel /usr/bin/last
chgrp wheel /usr/bin/top
- /etc/group을 열어
wheel:x:10:root,tt 와 같이 tt 라는 계정을 wheel 그룹에 추가 한다.
그러면, root를 포함하여 wheel 그룹에 속한 tt라는 계정만이 위 명령어를 수행할 수 있다.
리눅스 서버구축중에서
1. 소개
- 리눅스 사용자의 증가
- 리눅스를 서버로 사용하는 관리자의 증가
- 주 운영체계로의 리눅스의 부각
- 유닉스 계열에서 발견되는 많은 보안상 허점(Security holes)
- 해킹과 크래킹의 기술적 향상
2. 목차
- TCP Wrapper의 개념과 그 활용
- Flooding의 종류와 개념
- Denial of Sevice의 개념과 심각성
- 보안셸(SSH)의 이용 방법
- Buffer Overflow의 개념과 대응
- 리눅스 시스템 관리시 주의 사항
3. What is TCP Wrapper
- Network Services(telnet, finger, ftp, rsh, rlogin etc.) 요청에 대해 로그를 남김.
- 서비스 요청에 대한 보안성 여부 검사.
- 다른 설정(configuration)을 변경하지 않고 손쉽게 설치, 이용 가능.
- C/S 사이에 부하를 주지 않음.
4. The concepts of TCP Wrapper
- C/S 기반의 TCP/IP 환경
* Client telnet(port 23) requests to Server (in.telnetd)
* inet에 의해서 in.telnetd 구동.
- in.telnetd가 telnet에 대한 구체적인 로그인을 남기지 않음.
* 누가 접속해서 무슨 일을 했는가
- tcpd를 통한 1차적 접속
(1) Client requests to server
(2) inetd running tcpd and tcpd logs Client
(3) Check Client requests
(4) tcpd go away!
(5) Real services daemon running.
- Support programs using TCP.
5. TCP Wrapper의 기능 측면
- /etc/hosts.deny와 /etc/hosts.allow에 의한 access control
* ex) In /etc/hosts.allow
in.telnetd: .ajou.ac.kr
in.ftpd: .kr, UNKNOWN: winnuke %h
* ex) In /etc/hosts.deny
in.telnetd,in.ftpd: ALL EXCEPT 202.30.13
6. Setup of TCP Wrapper
- 대부분의 요즘 리눅스에는 기본 설치.
*따로 설치할 필요 없음.
- TCP Wrapper의 최신 버전
*ftp://cert.org/pub/tools/tcp_wrappers
- TCP Wrapper의 설치 여부 확인
*/etc/inetd.conf에서 다음과 같은 부분 확인
login stream tcp nowait root /usr/sbin/tcpd in.rlogind
7. Flooding의 개념
- DoS(Denial of Service)의 일종
- 직접적으로 시스템을 크래킹하지 않음.
- 종류
*SYN flooding
*ICMP flooding (same as Ping bombing)
- UDP storm, ping flooding과는 달리 패킷의 양이 적어도 됨.
8. SYN flooding attack의 방법
- 연결하고자 하는 서버의 backlog queue를 가득 차게 함.
- TCP의 3-way handshaking의 약점을 이용.
- ISP에 치명적
* 특정 포트(23, 80)에 attack하여 성공할 경우, 서비스 제공에 차질.
9. SYN Flooding 확인 요령
- netstat -a -f inet
* state가 보통 LISTEN이나, SYN_RECEIVED가 많다면, 현재 공격당하고 있는 것으로 볼 수 있음.
10. SYN Flooding 방지 요령
- 리눅스 커널 세팅에서 SYN Cookies와 RST Cookies 지원 하게 함(or both)
* SYN Flooding 공격을 받고 있다 하더라도 cookies를 통해 합법적 사용자와의 연결이 지속적으로 이루어지게 해줌.
- Connection time-out을 짧게 잡아줌.
* 커널 수정 필요.
- Queue의 길이 크게 잡음(리눅스는 5).
11. Ping bombing
- ICMP
* Connectionless protocol, IP 보완을 위해 gateway 와 host간의 에러 정보 교환 프로토콜
- ping을 통해 ICMP에 크기가 큰 패킷을 보냄. 궁극적으로 네트워크 마비를 꾀함.
- 윈도의 ping은 약 65KB정도의 패킷을 보낼 수 있음(호스트 마비 초래).
12. Ping bombing 방지 요령
- 방지할 수 있는 툴은 없음.
* 관리자의 지속적 감시와 대응 필요.
- 실례
* ICMP 메시지를 모니터링하다가 ICMP메시지 송신측에 winnuke를 동작시켜 버리는 사례도 있음(이에는 이, 눈에는 눈).
13. Denial of Sevice의 개념
- 다중 사용자용 운영체계에서는 언제든지 있을 수 있는 공격법
- 일반 유저도 얼마든지 사용 가능
- 고의적이지 않아도 발생 가능
- 시스템에 치명적인 문제는 없음
- 내부와 외부의 양면적 공격
14. DoS의 예
- Disk full(root filesystem full)
* 매우 치명적. /tmp or /var/tmp에 임의의 파일 작성. Quota로 어느 정도 해결 가능.
ex) ifd=open("/var/tmp/attack", O_WRONLYO_CREAT, 0777);
unlink("/var/tmp/attack");
- 메모리 고갈
* 매우 쉬운 방법
---
while(1)
c=malloc(MAX);
---
- 프로세스 테이블 고갈
* 예제 프로그램
void main()
{ vfork();main();}
* kill, ps도 사용 불가. 시스템 재시동 필요.
* 일반 유저도 가능.
* 프로세스 수 제한으로 방지.
- Mail storm
* 가장 손쉽게 사용하는 방법
* mail queue에 메일을 가득차게 함.
하이텔에서도 이러한 Mail storm attack 받음.
* BSD sendmail은 이럴 경우, 메일 수신 중단
리눅스는 이러한 면에서 비교적 안전.
* 특별한 해결 방안은 없음.
- Java applet
* Client에 자바 애플릿이 전송되어 실행되는 것을 이용.
* 메모리 리소스 고갈이나 그 밖의 적대적 애플릿을 만들어 놓았을 때 문제시 됨.
* 일종의 덫이라 할 수 있음.
* 웹 브라우저에서 자바 애플릿을 실행하지 않는 방법 이외에는 해결 방안 없음.
15. DoS의 결론
- 리눅스를 비롯한 다른 OS에서도 DoS 공격을 막기는 힘듬.
- 관리자의 지속적인 감시가 요구됨.
16. SSH의 개념과 활용
- Secure Shell (replacement of rsh)
- r-유틸리티 통신의 암호화
- FTP에서의 데이터 통신 암호화
- X에서의 데이터 통신 암호화
- 데이터를 암호화하여 송신
- 사용 암호 알고리듬
- IDEA, DES, RC4-128등
17. SSH의 개념
- 암호화를 위한 키는 RSA이용
* 이 때문에 SSH는 미국에서 수출 규제
- ssh와 sshd와의 상호 연결이 필수적.
* 혼자서 ssh를 쓴다고 해결되지 않음.
* 중요 서버와의 교신 시에 매우 효과적.
18. SSH의 효과
- IP spoofing 방지
* 암호화를 통한 인증으로 spoofing 원천적 불가
- sniffing을 통해 알아낸 데이터의 무용지물
- X 윈도 시스템 인증에서의 보안성 강화
19. SSH의 설치
- http://www.cs.hut.fi/ssh
*최신 ssh 제공
- 리눅스용 ssh 패키지
* non-US site에 있음. 국내에서는
ftp://ftp.kreonet.re.kr/Linux/{debian-nonUS,redhat-security}에 있음.
20. SSH의 한계
- 전송 속도의 현저한 저하
* DES 암호화 기준
안할 때 : 5.8
RC4-128 : 2.9
TSS : 3.5
DES : 1.0
IDEA : 1.3
3DES : 0.2
출처 : PLUS 저, "Security+ for UNIX"
- 초기 키에 대한 보안 문제
* apache-ssl, ssltelnet에서와 마찬가지로 초기 암호키의 전송 방법이 문제
- 상호 모두 SSH를 사용해야 함.
* SSH를 쓰는 상용 유닉스 호스트는 없음.
미국의 암호화 수출 규제에 따름.
- 그러나 Trusted hosts간에는 매우 효율적.
21. Buffer Overflow의 개념
- 지정된 메모리의 크기보다 더 많은 크기의 데이터를 메모리에 넣을 때 발생.
- 문제점 제기는 오래되었지만, 근래에 들어 새롭게 부각.
- 메모리 구조를 이용한 프로세스의 흐름 조정
- root의 권한을 획득하기 쉬움
- 어셈블리어에 대한 지식이 있어야 함.
- C와 유닉스의 퍼미션 특징의 조합으로 발생
- buffer와 array에 연계되어 발생(dynamic array)
- 일반적인 부분에서 시작되는 문제
* 실제 C프로그래밍에서 자주 일어나는 부분
- Buffer Overflow를 내는 중요한 문제점
* Bounds checking을 하지 않는다.(대부분)
- 예제 소스
void function(char *str) {
char buffer[16];
strcpy(buffer, str);
}
void main() {
char large_string[256];
int I;
for ( I = 0; I < 255; I++)
large_string[I] = 'A';
function(large_string);
}
- 이 프로그램은 segmentation fault를 낸다.
- sfp, ret, *str을 overwrite하게 됨.
- 이 때에 원하는 셸 코드를 고의로 Overflow하게 하여 overwrite하게 되면 루트 셸을 획득하게 될 수 있음.
- 해결책
* 소스 코드 수정
* 커널 수정(리턴하기 전에 스택의 무결성 검사)
* 스택에서 프로그램 실행을 금지시킴.
* 스택에 쓰기 권한을 제한.
* Boundary checking을 하는 함수를 사용.
strcat()보다는 strncat(), strcpy()보다는 strncpy()
* 컴파일러와 링커가 Boundary checking하는지의 여부를 알아보고 하는 것으로 사용.
GCC 2.7.2.x대 버전 사용 요망
22. 리눅스 시스템 관리 지침
- Shadow passwd와 secure-su이용
*대부분 배포본에서 지원.
- su는 group wheel(or root)에게만 허용
* /etc/suauth나 /etc/login.defs에서 group root에게만 제한적으로 허용
- remote에서의 root접속 불허
* /etc/securetty에 root접속 허용 터미널 지정
- path에 . 넣지 않음.
* 트로이 목마의 위험.
- .rhosts의 제거
* .rhosts를 제거하거나, /etc/inetd.conf에서 rlogin의 서비스를 중단
- Network접속시 ssltelnet이나 ssh를 이용하여 접속
* ssltelnet은 ssltelnetd가 반드시 있어야 함.
- 불필요한 setuid, setgid 설정 피함
* 일반 계정이 audio device를 이용할 수 없게 함.
- umask 설정 확인
* 002 설정시 큰 타격 입음. (022나 077이 되도록 조정)
- cfingerd로의 대치
* identd를 통한 유저 인증
- /etc/ld.so.cache 보관 유의
* 리눅스는 statically linked된 프로그램이 거의 없음.
* 기본 셸도 dynamically linked 됨.
* /etc/ld.so.cache를 특정인이 root 권한 획득 후 고의로 삭제하면 시스템은 돌이킬 수 없는 지경에 이름.
* 시스템의 보안에 문제가 간다면 statically linked되도록 re-complie 요망
- /var/log/ 디렉터리 내의 로그 파일 보는 것을 게을리 하지 마라.
* 로그 파일은 시스템 보안의 중요한 단서
* 로그 파일 보는 것을 게을리 하면 시스템 관리자로서의 자격이 의심스러워진다.
* /etc/syslog.conf의 조정을 통한 로그 파일의 세분화 -> 찾기 편함, 보기 편함.
- core 파일의 생성 제한
* 프로그램 디버깅에 유용하나, 크래커에게 빌미를 제공할 수 있음.
* core 파일의 생성 퍼미션 확인(600모드)
- 컴파일러 사용의 제한
* trusted users에게만 허용
* 컴파일러의 사용은 DoS를 야기할 수 있음.
- 퍼미션 관리의 일관성
* 일반적 실행 파일은 755, 그 외 파일은 644모드로 통일. setuid, setgid파일을 파악.
* setuid 걸린 파일 찾기
find / -type f -a \(-perm -2000 -o -perm -4000\) -print
* 소유자 없는 파일 찾기
find / -nouser -print
23. 결론
- 보안에는 왕도가 없다.
* 어떠한 운영체계든 보안적 문제에 강한 운영체계는 없다.
- 보안은 관리자 스스로가 알아서 지켜야 한다.
* 게으른 관리자는 운영체계에 크래쉬되면 다시 설치하면 된다고 이야기한다.
- 리눅스는 보안허점도 많고, 보안에도 강하다.
2006년 5월 30일 화요일
KOREA.NET의 자그마한 실수
실수페이지 축소판
'이상하단'생각을 하다 소스를 보니 .gif 또는 .jpg가 빠져있었더랬다.
외국인들도 많이 들락거리는 사이트로 알고 있는데, 다른 사이트도 아니고 국가홍보사이트에서... 나도 홈페이지맹그는 일을 하고 있지만 뭐 흠없이 만든다는 게 쉬운 일은 아닐터. 하지만 '그래도...'하는 생각은 지워지지가 않더구만.
아래보니 다행히 웹마스터 이멜주소가 있어 고쳐놔 달라는 말 한마디 던져주긴 했다.
그래도 그렇지 2004년 10월 8일날 적은 글을 이제껏 적어도 수만 명의 사람들이 봤음직한데 다 들 지적하지 않았던 걸 보면 대단하기도 하고...
오른쪽 그림은 작게 올려둔거고, ZIP파일을 다운받으면 JPG파일로 크게 볼 수 있다. 그냥 아래 사이트주소를 클릭해 직접 가서 찾아보는 것두 괜찮을 듯...혹 수정되면 다운받아서 어디가 그런지 확인하는 재미도..
찾아보는 재미..것두 재미나다.. 이스트에그도 아닌데... ㅡ.....ㅡ;;
http://www.korea.net/news/issues/issueDetailView.asp?board_no=5645
딴지.. 새로 나온 로고도 멋나다.. 배너 만들어지면 이걸루 바꿀 생각.
2006년 5월 29일 월요일
유닉스의 표준 편집기 vi의 사용법-2
vi filename // 파일 열기, 작성
vi +18 filename // 18행으로 파일 열기
vi +/"string" fn // "string"의 처음발생 단어부터 열기
vi -r filename // 손상된 파일 회복
view filename // 읽기 전용으로 파일 열기
2. 커서의 이동 명령
h(←) // 왼쪽으로 커서 이동
j(↓) // 아래로 커서 이동
k(↑) // 위로 커서 이동
l(→) // 오른쪽으로 커서 이동
w // 한 단어 오른쪽으로 커서 이동
b // 한 단어 왼쪽으로 커서 이동
^ // 라인의 처음으로 이동
$ // 라인의 마지막으로 이동
H //화면의 맨 위로 이동
M // 화면의 중간으로 이동
L // 화면의 맨 아래로 이동
Ctrl+F // 한 화면 뒤로 이동
Ctrl+D // 반 화면 뒤로 이동
Ctrl+B // 한 화면 앞으로 이동
Ctrl+U // 반 화면 앞으로 이동
3. 문자와 행삽입
a // 커서 오른쪽에 문자 삽입
A // 커서 오른쪽, 행의 끝에 문자 삽입
i // 커서 왼쪽에 문자 삽입
I // 커서 왼쪽, 해의 처음에 문자 삽입
o // 커서 아래에 행 삽입
O // 커서 위에 행 삽입
<ESC> // 작업 종료후 <ESC> 입력
4. 텍스트 변경
cw (종료 :ESC) // 단어 변경
R (종료 :ESC) // 현재 커서 위치부터 대체
r // 커서 위치 문자를 다른 문자로 대체
~ // 문자형(대, 소문자)변경
J // 현재 행과 아래 행 결합
u // 이전 명령 취소
5. 텍스트 삭제
x // 문자 삭제
dw // 단어 삭제
dd // 행 삭제
D // 커서 오른쪽 행 삭제
;5, 10 d // 5-10번째 삭제
6. 텍스트 복사 및 이동
yy // 행 yank
Y // 행 yank
p // yank되거나 삭제된 행 현재 행 아래에 삽입
P // yank되거나 삭제된 행 현재 행 위에 삽입
:1,2 co 3 // 1-2행을 3행 다음으로 복사
:4,5 m 6 // 4-5행을 6행 다음으로 이동
7. 행 번호 설정
:set nu // 행 번호 표시
:set nonu // 행 번호 숨기기
8. 행 찾기
G // 파일의 마지막 행으로 가기
21G // 파일의 21번째 행으로 가기
:n // n 라인으로 가기
9. 탐색 및 대체
/string // string 탐색
?string? // string 역방향 탐색
n // string의 다음(이전) 계속 탐색
:g/search-string/s//
replace-string/gc // 각 발생 탐색 후 확인하고 대체
:s/str/rep/ // 현재 행의 str을 rep로 대체
:1,.s/str/rep/ // 1부터 현재 행의 str을 rep로 대체
:%s/str/rep/g // 파일 전체 str을 rep로 전부 대체
10. 파일을 파일로 삽입
:r filename // 커서 다음에 파일 삽입
:34 r filename // 파일을 34번째 행 다음에 삽입
2006년 5월 26일 금요일
PHP 코딩 규정
- 일러두기: 이 규칙은 리눅스코리아 노미넘사업팀에서 사용하는 규정이며, 그 이상의 의미를 갖지 않습니다. 본문에 대해서는 libpng/zlib 라이선스의 조건으로 재사용하실 수 있습니다.
파일 형식에 대한 규칙
- 모든 소스 파일은 UTF-8 인코딩을 사용하며, 특별히 다른 인코딩의 아웃풋이 필요한 경우에 한해서 다른 인코딩으로 작성될 수 있다.
- 모든 소스 파일은 79컬럼에 맞춰서 줄 넘김 해야 하며, 문법 구조 상 줄넘김이 불가능한 경우에 한해서 그 이상으로 작성할 수 있다.
- 모든 소스 파일은 LF로 줄넘김되어야 하며, MIME Text 등 특수한 경우에 한하여 CR LF 줄넘김을 할 수 있다.
- Makefile을 제외한 모든 문법의 파일에서 Tab문자는 Space로 항상 풀어 쓰며, 절대로 섞일 수 없다.
- 특별히 구조상 필요한 경우를 제외하고는, 줄 끝에는 공백이 올 수 없다.
코드 스타일 가이드라인
- 들여쓰기는 반드시 스페이스 4개로 하며, 탭은 풀어쓴다. ex: ts=8 sts=4 sw=4 et
- php코드의 시작 부분은 반드시 로 쓴다.
- php 조건 블럭이나 루프 블럭 사이에는 php코드를 닫지 않는다.
[code]
// 이렇게 쓰는 것은 금지
<?php
if ($condition) {
?>hello<?php
}
?>
[/code]
- class, function 뒤에 오는 { 는 다음 줄의 같은 컬럼에 쓴다.
[code]
function funcname($a, $b)
{
do_something();
}
[/code]
- if, while, for, foreach 등 다른 경우에는 {는 줄의 끝에 쓴다.
[code]
if ($condition) {
do_something();
return false;
}
[/code]
- if, while, for, foreach 블럭에서 블럭 안에 절이 1개만 있는 경우에는 괄호로 감싸지 않는다.
[code]
if ($condition) // 맞음
do_something();
if ($condition) { // 틀림
do_something();
}
[/code]
- else는 이전 }의 다음 줄에 쓰며, elseif는 항상 else if로 띄어쓴다.
[code]
if ($condition) {
yay();
nada();
}
else if ($another) {
yay();
nada();
}
[/code]
- ++와 --, ->, [], . 연산자는 앞뒤로 붙여쓰며 그 외의 모든 연산자는 앞 뒤를 띄어 쓴다.
[code]
$a++;
$a + 1;
$a[5 + $b] - 7;
$a.$b;
[/code]
- 대입하는 = 앞뒤로는 모두 띄어쓴다.
[code]
$a = $b;
[/code]
- 함수의 인자 목록의 괄호는 함수 이름에 붙여 쓰며 괄호 바로 뒤와, 괄호 바로 앞은 띄어쓰지 않고, 매 인자 사이의 쉼표 뒤에는 띄어 쓰며, 디폴트 인자들은 = 앞뒤로 붙여쓴다.
[code]
function funcname($a, $b, $c=123)
{
test;
}
[/code]
- 함수 호출 시의 인자도 위와 같은 방법으로 쓴다.
[code]
$ret = funcname(123, 456);
[/code]
- if, while 등의 조건 제어 블럭의 키워드 뒤에는 한 칸을 띄며, for문의 ; 뒤에는 한 칸씩을 띄어 쓴다.
[code]
if ($test == 1) {
}
for ($a = 1; $a < 5; $a++) {
}
[/code]
- if, while 등의 조건절이 길어서 여러 줄로 넘어가는 경우에는, &&또는 등의 논리 연산자로 각 줄을 종료하며, 조건절의 다음 줄은 2단계 더 들어가서 시작한다.
[code]
if ($a_variable_with_very_long_name >= 12345678 &&
$another_variable_with_very_long_name >= 3.141592) {
statement;
}
[/code]
- switch-case에서 case는 switch와 같은 줄로 들여쓴다.
[code]
switch ($b) {
case 1:
do_something;
break;
default:
break;
}
[/code]
- switch-case에서 코드가 있는 case에서 break또는 return없이 다음 case로 중첩되는 경우에는 // FALLTHROUGH 표시를 한다.
[code]
switch ($b) {
case 1:
do_something();
// FALLTHROUGH
case 2:
do_anything();
break;
}
switch ($b) {
case 1: // 코드가 없이 case가 연속되면 표시 안 함
case 2:
do_something();
break;
}
[/code]
- 주석은 같은 줄에 설명하는 경우에는 // 표시로 뒤에 쓰며, 같은 줄에 설명할 공간이 부족한 경우에는 앞에 쓴다. 여러 줄인 경우에는 //를 쓰지 않고 /* */를 사용한다.
[code]
$girl = 'test'; // 그냥 테스트
/* 이히히..
* 다시.. */
$girl = 'test2';
[/code]
- include는 사용하지 않고 require_once만 사용한다. (꼭 필요한 경우 require 사용 가능)
- 전역변수 선언은 함수의 처음에만 한다.
- Array 선언에서 여러 개의 인자를 넣는 경우에는 다음과 같이 띄어서 쓴다. (인자가 1개인 경우에는 한 줄로 쓰기 가능, A는 대문자)
[code]
$a = Array(
'a' => 'b',
'c' => 'd',
);
[/code]
- return, require 등의 키워드 뒤에는 ()로 감싸지 않는다.
[code]
require "xxx.php";
return 123;
[/code]
- 여러 줄의 긴 문자열을 쓰는 경우, . 연산자를 끝에 써서 붙이거나, <<<EOF 방식을 사용하며, 닫히지 않은 긴 문자열은 사용하지 않는다. .으로 붙이는 경우에는 첫줄의 스트링 시작에 맞춰서 들여쓴다.
[code]
$x = "무지 긴 스트링 이라서 다음 줄에 연달아 써야 하는 ".
"경우에는 이렇게".
"씁니다.";
$x = <<<EOS
이렇게도 쓸 수 있습니다.
EOS;
$x = "
이렇게는 안 씁니다.
";
[/code]
- 문자열 내 $치환의 앞뒤로는 반드시 {}로 감싸준다.
[code]
$x = "{$name}님 안녕하세요.";
[/code]
- 선언되지 않은 변수나 문자열을 따옴표로 감싸지 않는 등의, 경고가 발생할 수 있는 코드는 사용할 수 없다.
[code]
$x[key]; // 는 $x['key']로
if ($have_something) // $have_something이 선언되지 않을 경우가 있다면
if (isset($have_something) && $have_something) // 이렇게
[/code]
- assert는 함수처럼 사용한다.
[code]
assert $x == 1; // 틀림
assert($x == 1); // 맞음
[/code]
- 전역변수와 템플릿 변수는 충돌을 피하기 위해 간단한 단어로는 쓸 수 없다.
- 함수의 이름은 가급적이면 "동사" 또는 "동사_명사" 또는 "카테고리_동사_명사" 로 하며, 함수 이름과 하는 일은 반드시 일치해야하며, 용도가 중간에 변하는 경우에는 반드시 함수 이름을 바꾼다.
- 함수 이름에는 대문자를 사용하지 않는다.
- 클래스의 이름은 CamelCased로 명명한다.
- 클래스의 메쏘드 이름은 함수 이름 명명 규칙과 같이 한다.
- 전역 변수의 이름은 의미 없는 짧은 것을 사용할 수 없다.
- 15줄 내외의 짧은 루프 안에서 사용되는 지역 변수는 1~2자의 짧은 이름을 사용할 수 있다.
- 루프 변수의 이름은 4줄 내의 아주 짧은 1중 루프인 경우에만 1글자 이름을 사용하며, 그 이상의 루프에서는 단어로 된 2글자 이상의 변수 이름을 쓴다.
코딩 전략 가이드라인
- 여러 군데에서 사용되는 루틴이 3회 이상 중복 사용되는 경우에는 절대로 붙여넣기를 할 수 없으며, 3번째부터는 반드시 공통된 함수 또는 클래스로 빼내야 한다.
- 코드는 논리적으로 어느 정도 연속성이 있는 단락으로 문단 구분이 되어야 하며, 하는 역할이 매우 사소하거나 극히 명백한 경우를 제외하고는 각 문단의 앞에 주석으로 하는 역할을 표시한다.
- PHP 기본 함수 중, Array()를 제외한 모든 함수는 소문자로만 쓰는 것을 원칙으로 하며, 대문자로 쓰는 것을 의도하고 명명된 API인 경우에는 대문자를 섞어쓴다.
- 임시로 변조하거나 제거하는 코드는 원래의 코드를 주석처리한 것을 앞쪽에 놓고, 날짜, 이유, 작업자 이름 등을 기록한다.
[code]
// 2005-04-30 노마: 앞 뒤로 공백을 생략하지 말고 그냥 보여달라고 해서 임시로..
// $x = trim($hello);
$x = $hello;
[/code]
- 임시로 땜빵해 둔 곳의 코드에는 // XXX 표시를 한다.
- 앞으로 수정할 것이 더 있거나 개선할 여지가 있는 부분에는 // TODO 표시를 하고 그 뒤에 이유나 정보를 쓴다.
- PHP 표준 함수에서 이미 제공하고 있는 기능은 임의로 만든 함수를 사용하지 않고 표준 라이브러리의 함수를 이용한다.
- 변수나 상수 값이 제한적일 때에만 정상 동작할 수 있는 코드의 앞부분에는 반드시 assert 문으로 값의 범위가 어떤지 표시한다.
- $_POST, $_SERVER, $_GET 등의 PHP에서 제공되는 내부 변수의 경우에는 절대로 지역적인 코드에서 직접 사용될 수 없으며, 라이브러리 차원에서 추상화되어 간접적으로 제공되어야 한다.
- 쿠키와 HTML을 통해서 전달되는 폼 변수 등은 신뢰하지 않으며, 반드시 재검사하거나 서버측에 저장되는 세션을 통하여 전달한다.
- 이 문서에 표시되지 않은 규칙에 대해서는 해당 소스 코드에서 기존에 사용하던 스타일을 따라야 한다.
2006년 5월 22일 월요일
ajax를 공부하며..
AJAX 강의 시리즈를 네이버에서 직접 해 주시는 분의 글을 우연히 보았다
Foundations of Ajax / Ryan Asleson and Nathaniel T. Schutta책 읽는 기분으로..먼저 공부한 사람의 글을 보며, 배운다는 자세로 읽으려 한다.
원서.
좋으신 분인거 같다.
(수정사항) jinixst님 네이버블로그 링크 수정 16:51
2006년 5월 19일 금요일
폴더의 크기를 자세히 보기
/home/$username/public_html/ 각 사용자들의 사용용량을 확인할 수 가 있다.
근데 리눅스 /usr/local/apache/htdocs 쪽은 관리가..ㅜㅜ
따로 페이지를 맹글어서 쓸 수 밖에...내 머리의 한계인가보다
2006년 5월 17일 수요일
Tag란 놈에 맞춰가는 내 테터툴즈...
시간도 많이 잡아먹고.... 뭐 처음엔 예전에 적어둔 글을 읽어보면서 '음...내가 이럴 때도 있었지..'하며
재미나게 했는데, 이게 일이 좀 많아지니 짜증도 나고....그러네 쩝
그런데, 소스코드에 코드색을 넣고 그걸 html 코드로 변환해두는 SHOCK' 를 해 둔 글들을 수정하려고 열었다간 대략 낭패를 본다..
내용이 길어서 그런건 아닌 거 같은데... 내용출력이 전부 다 되지 않고 내용이 잘리는 문제가 바로 그 것.
나중에 괜찮아지겠지? ㅎㅎ
암튼 Tag를 다 끝내고 나면 신나는 블로그질을 시작할 수 있겠지?
2006년 5월 16일 화요일
지금 이 블로그가 돌아가고 있는 서버사진을 이제서야 올린다.
4월에 서버를 구입해 IDC에 넣은 후 구동하기 시작했는데, 그 안에 리눅스를 두 번 깔고 서버 안정화시키느라 정신이 없었나보다. 사진은 찍어두고 블로그에 올려두지도 못했네...쩝
사는게 그런가 보다. 별루 바쁘게 산거 같지도 않은데 말이지...
다시 사업을 준비하면서 내겐 꼭 필요했던 서버. 훌륭하게 관리되는 전문 코로케이션서비스를 받고 있는 지금에선 상당히 서비스도 만족스럽고 좋다.
자~ 이제 달려야지?
S115서버 한글메뉴얼
김태희양 컴퓨터를 하나 맹글다...
항상 최고의 컴퓨터만을 팔아왔었다 자부하며 살았었는데, 컴퓨터조립업 사업자를 그만둔지 언~2년반.
요즘 나오는 부품들이 뭐가 뭔지...한참을 헤메고... ㅡ...ㅡ
CPU검색만 몇 시간, 메인보드검색만 몇 시간...그래픽카드검색만 또 몇 시간...
결국 이렇게 주문한 컴퓨터가 또 최고의 성능을 내리라... 생각을 하며 주문을 넣었다.
이제껏 내 손을 거쳐간 수많은 컴퓨터들 속에 또 하나의 컴퓨터가 되겠지.....
그래 그렇게들 사람들 속에서 자신의 일임을 다 하며, 퇴물(?)이 되는 그 순간까지 모두들 힘들내자.
그러고 보니 아직 출고를 해 주지도 않고 이런 망말(言)을 하네..ㅎㅎ
낼이면 도착할, 수 시간의 검토 끝에 합본될 하드웨어들이다... 잘 써야돼 태희씨~
2006년 5월 15일 월요일
유다복음서 원문(한글번역)
도입: 서언
예수가 유월절을 축하하기 3일 전, 일 주일 동안 가룟유다와 함께 나눈 계시의 비밀스런 이야기.
예수의 지상 사역
예수가 이 땅에 오셨을 때, 그는 인류를 구원하기 위해 기적과 놀라운 일을 행하셨다. 다른 사람들이 그들의 죄의 길을 걷고 있을 때도 의의 길을 [걷는] 사람들이 있었기에, 열두 제자들이 부르심을 받았다.
그는 그들과 함께 세상 너머에 있는 비밀스런 일들과 마지막 날에 일어날 일에 대하여 말하기 시작했다.
종종 그는 자신의 모습으로 그의 제자들에게 나타나지 않고 어린아이의 모습으로 그들 가운데 나타났다.
장면 1 : 예수가 그의 제자들과 이야기하다: 감사기도와 성만찬
어느 날 그는 유대에서 그의 제자들과 함께 있었다. 그는 그들이 함께 모여 거룩한 예식자리에 앉아 있는 것을 발견했다. 그가 그의 제자들에게 [다가갔을] 때, 그들은 함께 모여 앉아 빵을 들어 감사기도를 드리고 있었는데, [그가] 웃었다.
그 제자들이 [그에게] 말했다. "선생님, 어찌하여 [우리의] 감사기도를 비웃으십니까? 우리는 옳은 일을 했습니다."
그가 대답하여 그들에게 말했다. "나는 너희를 비웃은 것이 아니다. 〈너희가〉 이렇게 하는 것은 너희 자신의 의지 때문이 아니라 이 일을 통해 너희의 신이 찬양[받을 것이기] 때문이다."
그들이 말했다. "선생님, 당신은 [...] 우리 신의 아들입니다."
예수가 그들에게 말했다, "어떻게 너희들이 나를 알겠느냐? 진실로 [내가] 너희에게 말한다. 너희 중에 있는 이 세대의 어떤 사람들도 나를 알지 못한다."
제자들이 화가 나다
그의 제자들이 이 말을 듣고 화가 치밀어 노하기 시작했고 마음 속으로 그에 대항하여 욕하기 시작했다.
예수가 그들의 [이해력이] 부족한 것을 보시고, 그들에게 [그는 말했다]. "어찌하여 이런 논의들로 너희들은 화를 내느냐? 너희 안에 계신 너희의 신과 [...]가 너희 영혼 [안에서] 너희를 화나게 하였다. 인간들 중에서 [힘으로는 충분한] 너희들 가운데 어느 누구라도 완벽한 인간을 데리고 와서 내 앞에 세워 보아라."
그들은 모두 말했다. "우리는 그럴 힘이 있습니다."
그러나 가룟유다를 제외하고는 그들의 영들은 감히 [그] 앞에 설 수 없었다. 그는 그 앞에 설 수 있었지만, 그러나 눈으로 똑바로 볼 수는 없어 얼굴을 돌렸다.
유다는 그에게 [말했다] "나는 당신이 누구이며 어디로부터 왔는지 압니다. 당신은 바벨로의 불멸의 세계로부터 왔습니다. 그리고 나는 당신을 보내신 분의 이름을 언급할 자격조차 없습니다."
예수가 사적으로 유다에게 말하다
예수는 유다가 높이 올려진 어떤 존재를 깊게 생각하는 것을 아시고 그에게 말했다. "다른 사람들로부터 떠나라. 그러면 내가 네게 그 나라의 비밀들을 말해 주겠다. 너는 그곳에 다다를 수 있겠지만 큰 슬픔을 맛볼 것이다. 왜냐하면 열두 [제자들이] 그들의 신과 함께 다시 완전하게 되도록 누군가가 너를 대체할 것이기 때문이다."
유다가 그에게 말했다. "당신은 언제 이런 일들을 제게 말씀해 주시겠습니까? 그리고 빛의 그 위대한 날은 그 세대를 위해 [언제] 동이 트겠습니까?"
그러나 그가 이렇게 말할 때 예수는 그를 떠났다.
장면 2 : 예수가 다시 제자들에게 나타나다
이런 일이 일어난 후 다음날 아침, 예수는 다시 그의 제자들에게 [나타났다]
그들이 그에게 말했다. "선생님, 우리를 떠나서 어디로 가셔서 무엇을 하셨습니까?"
예수가 그들에게 말했다. "나는 위대하고도 거룩한 또 다른 세대에게 갔었다."
그의 제자들이 그에게 말했다. "주님, 우리보다 더 거룩하고 더 뛰어난 위대한 세대가 무엇이란 말입니까? 지금 이 세계 안에 그것이 있지 않습니까?"
예수가 이 말을 듣고, 웃으며 그들에게 말했다. "어째서 너의 마음 속에 강하고 거룩한 세대를 떠올리느냐? 진실로 [내가] 너희에게 말한다. 이 시대{에온·aeon}에 태어나는 누구도 저 [세대]를 보지 못할 것이고, 그 별들 안에 있는 천사들의 주인조차도 저 세대를 다스리지 못하며, 죽을 운명을 지니고 태어나는 어떤 사람도 그것과 연결될 수 없다. 왜냐하면 저 세대는 [...] 되어버린 [...]부터 오지 않았다. 너희들 가운데 있는 사람들의 세대는 너희가 다스리는 [... 그] 다른 세력들의 그 [...] 힘 [...] 인류의 세대로부터 온 것이다.
[그의] 제자들이 이 말을 듣고, 그들은 각각 영적으로 괴로웠다. 그들은 한마디도 할 수 없었다.
또 다른 날에 예수가 [그들]에게 왔다. 그들의 [그]에게 말했다. "선생님, 우리가 [환상] 속에서 당신을 보았습니다. 왜냐하면 우리는 [...] 밤에 위대한 [꿈 ...]을 꾸었기 때문입니다"
[그가 말했다.] "어째서 〈너희가〉 숨었을 [때 너희들은 ....]?"
제자들이 성전을 보고 그것에 대해 토론하다
그들은 [말했다. "우리는 큰] 제단을 [지닌] 위대한 [집을 보았습니다. 그리고] 열두 사람들-우리가 말하자면 그들은 그 제사장들입니다-과 한 이름을 보았습니다. 그리고 제사장들이 제물들을 [받고 ... 까지] 그 제단에서 기다리는 사람의 무리들을 보았습니다. [그러나] 우리는 계속 기다렸습니다."
[예수가 말했다.] "[그 제사장들이] 무엇과 같더냐?"
그들이 [말했다. "몇몇은 ...] 두 주간. 서로서로 겸손과 찬양 가운데 [몇몇은] 그들 자신의 아이들을 희생으로 바치고, 다른 이들은 그들의 아내들을 바쳤습니다. 몇몇은 남자들과 함께 자고, 몇몇은 [학살하는 가운데] 포함되어 있었고, 몇몇은 법도에 어긋난 행위들과 수많은 범죄를 저질렀습니다. 그리고 제단 [앞에] 서 있는 그 남자들은 당신의 [이름으로] 호소하고, 그들의 불충분한 모든 행위들 속에서 그 희생제사들은 [...] 완전에 이르고 있었습니다."
그들이 이것을 말한 후에, 그들은 조용해졌다. 왜냐하면 괴로웠기 때문이다.
예수가 성전과 관련된 환상을 비유로 해석해주다
예수가 그들에게 말했다. "너희들은 어째서 괴로워하느냐? 진실로 내가 너희에게 말한다. 그 제단 앞에 서 있는 모든 제사장들은 나의 이름으로 호소한다. 다시 내가 너희들에게 말한다. 내 이름은 인간의 세대를 거쳐 별들의 세대들의 이 [...] 위에 기록되어 있다. [그리고 그들은] 내 이름 안에서 부끄러운 방법으로 열매 없는 나무들을 심었다."
예수가 그들에게 말했다. "너희가 제단에서 제물들을 받는 것을 본 그 사람들이 바로 지금의 너희들이다. 그것이 너희가 섬기는 신이고, 너희가 너희들이 본 그 열두 사람이다. 너희가 봤던 희생제사를 드리려고 온 무리들은 너희가 그 제단 앞에서 타락으로 이끈 많은 사람들이다. 이러한 방법으로 [...] 서서 내 이름을 이용할 것이다. 그리고 경건한 세대들은 변함없이 그에게 충성을 바칠 것이다. 나중에 또 다른 남자가 [간음하는 사람들]로부터 나와 거기에 설 것이다. 그리고 또 다른 사람이 아이들을 살해한 사람들로부터 나와 거기에 설 것이다. 그리고 남자와 함께 잔 사람들과 금욕하는 사람들과 나머지 타락하고 무법적이고 죄지은 사람들, 그리고 '우리는 천사와 같다'라고 말하는 사람들로부터 나와 거기 설 것이다. 그들은 모든 것을 이러한 결론에 이르게 하는 별들이다. 왜냐하면 인간 세대들에게 이렇게 말해졌기 때문이다. "보라! 하나님이 한 제사장의 손으로부터 너희의 희생제사를 받으신다." 그것은 죄의 성직자를 이르는 말이다. 그러나 그것은 주님, 곧 '마지막 날에 그들이 모두 부끄러움에 처할 것이다'라고 명령하시는 우주의 주님이시다.
예수가 [그들에게] 말했다. "너희가 제단 위로 [...]하는 희[생제사... ]를 멈춰라. 왜냐하면 그들은 너희의 별들과 천사들을 넘어서서 이미 거기에서 그들의 종국에 이르렀기 때문이다. 그러므로 그들로 하여금 너희보다 먼저 [함정에 빠지게] 하고, 그들로 하여금 가게 하라. [-약 15행 누락-] 세대들 [...]. 빵굽는 사람은 [하늘] 아래 모든 피조물을 먹일 수 없다. 그리고 [...] 그들에게 [...] 그리고 [...] 우리에게 그리고 [...].
예수가 그들에게 말했다. "나와 싸우려 하지 마라. 너희 각자는 자신의 별을 갖고 있다. 그리고 모든[사람들-약 17행 누락] 당분간 [...] 이 시대의 [...] 나무에 [봄을 ...] 하게 되는 [...] 안에서. 그러나 그는 하나님의 낙원에 물을 대게 되었다. 그리고 그 [세대]는 영속하리라. 왜냐하면 [그는] 그 세대의 [모든 사람들을] 부정하게 하지 않고 영원토록 [...] 할 것이기 때문이다."
유다가 예수에게 저 세대와 인간의 세대에 관해 묻다
유다가 [그]에게 말했다. "[랍비]여, 이 세대는 어떤 종류의 열매를 맺겠습니까?"
예수가 말했다. "모든 인간 세대의 영혼들은 죽을 것이다. 그럼에도 이 사람들이 그 나라의 때가 완성되고 그 영이 그들을 떠날 때, 그들의 몸은 죽을 것이지만 그들의 영혼은 살아나게 되고, 그들은 들어 올려질 것이다."
유다가 말했다. "그러면 남은 인간 세대들은 무엇을 합니까?"
예수가 말했다. "[바위에] 씨를 뿌리고 그것의 열매를 수확하는 것은 불가능하다. 또한 [이것은] 그 [불결한] 세대 [...]와 죽을 운명의 사람을 창조한 그 손 [...] 타락한 지혜를 [...] 하는 방법이다, 그래서 그들의 영혼들을 위에 있는 영원한 세계로 가게 하려는 것이다. [진실로] 내가 너에게 말한다, [...] 천사 [...] 힘은 [...] 거룩한 세대들 [...] 이것들 [...]을 볼 수 있을 것이다."
예수는 이렇게 말한 뒤 떠났다.
장면 3 : 유다가 환상을 이야기하고 예수가 응답하다
유다가 말했다. "선생님, 당신이 그들 모두에게 귀 기울이신 것처럼 제게도 또한 귀 기울여 주십시오. 왜냐하면 저는 위대한 환상을 보았습니다."
예수가 이 말을 듣고 웃으며 그에게 말했다. "너 열세번째 영아, 왜 너는 그렇게 힘들게 애쓰느냐? 그러나 말해보아라, 그러면 내가 참고 들어주마."
유다가 그에게 말했다. "환상 가운데 저는 열두 제자들이 저에게 돌을 던지고 저를 [심하게] 박해하는 저 자신을 보았습니다. 그리고 저는 또한 당신을 따라 [....] 곳으로 갔습니다. 저는 [한 집을....] 보았는데 제 눈으로는 그 집의 크기를 [가늠할] 수 없었습니다. 위대한 사람들이 그것을 둘러싸고 있었고, 그리고 그 집은 푸른 잎으로 된 지붕이었고, 그 집의 한 가운데에는 [군중이 있었습니다. -2행 누락-], 저는 말했습니다. '선생님, 이 사람들을 따라 저를 데려가 주십시오.'"
[예수가] 대답하여 말했다. "유다야, 너의 별이 너를 타락시켰다." 그가 이어 말했다. "죽을 운명을 가지고 태어난 사람은 네가 본 그 집에 들어갈 자격이 없다. 왜냐하면 그 곳은 거룩한 이들을 위해 마련된 곳이기 때문이다. 해와 달도 그곳을 다스릴 수 없고 낮도 그러하다. 그러나 거룩한 이들이 영원한 세계인 거기에서 거룩한 천사들과 함께 항상 살 것이다. 보아라, 나는 네게 그 나라의 신비를 설명해 주었다. 그리고 나는 너에게 그 별들의 죄에 대해서도 가르쳤다. 그리고 [...] 그것을 열두 시대들{에온}에게 [...] 보낸다.
유다가 자신의 운명에 대해 묻다
유다가 말했다. "선생님, 제 후손들이 그 통치자들의 다스림을 받을 수 있을까요?"
예수가 대답하여 그에게 말했다. "오라, 나는 [-2행 누락-], 그러나 너는 네가 그 나라와 그 모든 세대를 보면 많이 슬퍼질 것이다."
유다가 이 말을 듣고 그에게 말했다. "내가 받아들인 그것은 좋은 것입니까? 왜냐하면 당신은 저 세대를 위해 저를 떨어뜨려 놓으셨습니다."
예수가 대답하여 말했다. "너는 열세번째가 될 것이며 다른 세대들에 의해 저주받을 것이다. 그리고 너는 그들을 다스리게 될 것이다. 마지막 날에 그들은 네가 거룩한 [세대]로 올라간 것을 저주할 것이다.
예수가 유다에게 우주론을 가르치다: 그 영과 자존자
예수가 말했다. "[오라], 내가 너에게 어느 누구도 본 적이 없는 [비밀]에 대하여 가르쳐주마. 왜냐하면 위대하고 끝없는 세계가 존재하기 때문이다. 그 세계의 크기는 천사의 세대들도 보지 못했고, 거기에는 눈으로는 볼 수 없는 위대한 [영]이 있다,
천사의 눈으로도 보지 못하고
마음의 생각으로도 이해할 수 없네.
그리고 어떤 이름으로도 부를 수 없다네.
"그리고 빛나는 구름이 거기에 나타났다. 그가 말했다. '한 천사로 나를 수행하게 하라.'
"밝고 거룩하신 자존자인 한 위대한 천사가 구름으로부터 나왔다. 그 때문에 또 다른 4명의 천사들이 구름으로부터 나와 완전무결한 자존자를 위해 수행원들이 되었다. 자존자가 말했다. '[...]는 존재가 되어라,' 그래서 그것이 [...] 존재하게 되었다. 그리고 그는 그를 지배할 첫 번째 빛을 [창조하였다]. 그는 말했다, '천사들은 [그를] 섬기는 존재가 되어라.' 그러자 셀 수 없이 많은 {천사}가 존재하게 되었다. 그는 말했다. '깨어난 에온{aeon}은 존재가 되어라,' 그러자 그가 존재하게 되었다. 그는 그를 지배할 두 번째 빛을 창조하였다. 그리고 셀 수 없이 많은 천사들을 창조하여 그를 섬기게 하였다. 이것이 그가 깨어난 나머지 에온들을 창조한 방법이다. 그는 그 에온들을 지배할 그 빛들을 만들었다. 그리고 그는 그 빛들을 위해 그 빛들을 돕도록 셀 수 없이 많은 천사들을 만들었다.
아다마스와 빛들
"아다마스는 '하나님'이라고 불린 모든 것들 가운데 어떤 천사도 본 적이 없는 첫 번째 빛나는 구름 안에 있었다. 그는 [...] 그 이미지 [...] 그리고 뒤에 [이] 천사와 닮은 [...]. 그는 타락하지 않은 셋(Seth)의 세대가 [...] 열 둘 [...] 스물 넷 [...] 나타나도록 만들었다. 그는 그 영의 의지에 따라서 타락하지 않은 세대 속에 72개의 빛들이 나타나도록 하였다. 그 72개의 빛들 자신들은 그 영의 의지에 따라서 타락하지 않은 세대 속에 각각 5개씩 대응되도록 360개의 빛들이 나타나도록 하였다.
"열 두 빛들의 열 두 에온들은 각 에온마다 여섯 하늘을 갖고 그들의 아버지를 제정하였다. 그리하여 거기에는 일흔두 빛들을 위한 일흔두 하늘이 있고, [그들] 각각을 위한 5개의 창공이 있게 되었다. 그리하여 [모두] 360개의 [창공들...]이 있게 되었다. 그들에게는 권위가 주어졌고 [셀 수 없이 많은] 천사들의 [위대한] 주인에게는 영광과 경배가, 그리고 뒤에 또한 그 처녀 영들에게는 모든 에온들과 하늘들과 그들의 창공들의 경배와 영광이 주어졌다.
우주, 혼돈, 그리고 지하세계
불멸하는 수많은 것들은 아버지, 자존자와 함께 있는 일흔두 빛들과 그의 일흔두 에온들에 의해 우주-즉, 지옥-라고 불린다. 그 안에서 그의 타락하지 않은 힘들을 가지고 첫번째 인간이 나타난다. 그리고 그의 세대와 함께 나타났던 그 에온, 즉 지식의 구름 안에 있던 에온과 그 천사는 엘(El)이라 불린다. [...] 에온 [...] 후에 [...] 말했다. '열두 천사들은 혼돈과 [지하세계]를 다스리는 존재가 되어라.' 그리고 보니, 그 구름으로부터 불로 번쩍이는 얼굴을 하고 겉모양은 피로 불결하게 된 한 [천사]가 나타났다. 그의 이름은 '반역자'를 뜻하는 네브로(Nebro)였는데 다른 사람들은 그를 얄다바오쓰(Yaldabaoth)라고 불렀다. 사클라스(Saklas)라 불리는 또 다른 천사도 구름으로부터 나왔다. 그래서 네브로는 사클라스와 마찬가지로 보조자로 여섯 천사를 창조하였다. 그리고 이들은 열 두 천사를 하늘들 안에 두고 그 하늘들 안에서 각각 몫을 받게 하였다.
통치자와 천사들
"열 두 통치자들은 열 두 천사들과 함께 말했다. '너희 각각은 [...] 그리고 그들로 하여금 [...] 세대 [-1행 누락-] 천사들';
첫째는 그리스도라 불리는 [셋]이다.
[둘째]는 [...]라고 하는 하마쏘쓰이다.
[셋째]는 갈릴라.
넷째는 요벨
다섯째는 아도나이오스.
이들은 지하세계를 다스리는 다섯인데 우선적으로 혼돈을 다스린다.
인간의 창조
"그리고 나서 사클라스가 그의 천사들에게 말했다. '우리가 그 외관과 모습에 따라 인간을 창조하자.' 그들은 아담과 그의 아내 이브를 만들었는데 그녀는 구름 속에서 조에(Zoe)라고 불렸다. 이 이름으로 모든 세대들이 남자들을 찾았고, 그들 각각은 여자를 이 이름들로 불렀다. 지금, 사클라는 이 [...] 세[대...]를 제외하고는 명[령을...] 하지 않는다. 그리고 그 [통치자]는 아담에게 말했다. '너는 너의 자녀들과 오래 살아야 한다.'"
유다가 아담과 인간의 운명에 대해 묻다
유다가 예수께 말했다. "얼마나 오랜 기간동안 인간이 살 수 있겠습니까?"
예수가 말했다. "왜 너는 이것에 대하여 궁금해 하느냐? 아담과 그의 세대는 그가 그의 나라로 받았던 그 곳에서 그의 통치자에게 받은 수명을 가지고 그의 삶의 기간을 살았다."
유다가 예수에게 말했다. "인간의 영은 죽습니까?"
예수가 말했다. "하나님이 미가엘에게 명령하여 사람들의 영들을 그들에게 대부금으로 준 이유가 그것이다. 그래서 그들은 섬김을 제공하였다. 그러나 위대한 그분은 가브리엘에게 명하여 영들이 그것-즉 그 영과 그 혼-을 다스림 없이도 위대한 세대를 승인하도록 하였다. 그러므로 [나머지] 영혼들은 [-1행 누락-].
예수가 유다 및 다른 사람들과 사악한 무리들의 멸망에 대해 논쟁하다
" [...] 빛 [-거의 2행 누락-] 주위에 [...] 네 안에 있는 [...] 영이 천사들의 세대 가운데 이 육체 안에서 살도록 하였다. 그러나 하나님은 아담과 그와 함께한 이들에게 지식이 주어지도록 하여 혼돈과 지하세계의 왕들이 그들의 주인인 체 하지 못하도록 하였다."
유다가 예수에게 말했다. "그렇다면 저 세대들은 무엇을 합니까?"
예수가 말했다. "진실로 내가 너에게 말한다. 그들 모두를 위하여 그 별들이 물질들을 완성할 것이다. 사클라스가 그를 위하여 할당된 시간을 완성하면 그들의 첫째 별이 그 세대들과 함께 나타나고, 그들은 그들이 해야 한다고 말한 것을 끝낼 것이다. 그리고 나서 그들은 나의 이름으로 간음하고 그들의 아이들을 살해하며 그들은 [...] 할 것이다. 그리고 [-약 6행반 누락-] 나의 이름, 그리고 그는 너의 별이 그 열세번째 에온을 [...] 것이다."
이렇게 말한 뒤 예수가 [웃었다]
[유다가 말했다.] "선생님, [어찌하여 당신은 우리를 비웃으십니까?]"
[예수가] 대답하여 [말했다] "나는 [너희가] 아니라 별들의 죄를 비웃은 것이다. 왜냐하면 이 여섯 별들이 다섯 전투부대들과 함께 탈선하였기 때문이다. 그리고 그들은 모두 그들의 피조물들과 함께 망하게 될 것이다."
예수가 세례 받은 자들에 대해 말하는 것과 유다의 배반
유다가 예수에게 말했다. "보십시오. 당신의 이름으로 세례받은 사람들은 무엇을 합니까?"
예수가 말했다. "진실로 내가 [네게] 말한다. 나의 이름으로 [...] 이 세례는 [-약 9행 누락-] 나에게. 진실로 [내가] 네게 말한다. 유다야, 사클라스에게 희생제사를 바치는 [사람들은] [...] 하나님 [-3행 누락-] 악이 되는 모든 것.
"그러나 너는 그들 모두를 능가할 것이다. 왜냐하면 너는 나를 싸고 있는 그 남자를 희생제사로 드려야 하기 때문이다."
이미 너의 뿔이 치켜 올려졌다.
너의 분노가 불붙었다.
너의 별들이 밝게 빛나고,
너의 마음은 [...]
"진실로 [...] 너의 마지막 [...] 되다 [-약 2행반 누락-] 슬퍼하고 [-약 2행 누락-] 그 통치자, 왜냐하면 그가 망할 것이기 때문이다. 그리고 그 다음에 아담의 위대한 세대의 이미지는 높이 올려질 것이다. 왜냐하면 하늘과 땅과 천사들보다 앞서서 영원한 세계로부터 온 그 세대가 존재하기 때문이다. 보아라, 너는 모든 것을 들었다. 너의 눈을 들어 구름과 그 안에 있는 빛과 그것을 둘러싸고 있는 별들을 보아라. 길을 인도해줄 그 별이 너의 별이다."
유다가 그의 눈을 들어 빛나는 구름을 보았고 그는 거기로 들어갔다. 땅 위에 서 있던 사람들이 구름으로부터 나와 이렇게 말하는 목소리를 들었다. [...] 위대한 세대 [...] ... 모습 [...] [-약 5행 누락-].
결론: 유다가 예수를 배반하다
[...] 그들의 대제사장들이 중얼거렸다. 왜냐하면 [그가] 기도하기 위해 손님방으로 들어갔기 때문이다. 그러나 몇몇 율법학자들은 거기에서 그가 기도하고 있는 동안 그를 붙잡기 위해 주의깊게 지켜보고 있었다. 왜냐하면 그가 모두에게 예언자로 여겨지기에 그들은 백성들이 두려웠던 것이다.
그들은 유다에게 다가가 말했다. "너는 여기서 무엇을 하느냐? 너는 예수의 제자다."
유다는 그들이 원하는 대로 그들에게 대답했다. 그리고 그는 약간의 돈을 받고 그를 그들에게 넘겨주었다
새롭게...이사완료~!!
이젠 서버도 안정화되어가는거 같고....
테터도 OR버전에서 잘 갈아탄거 같고....
이제 홈페이지만 만들어내기만 하면 되는건가..?
아~ 잠온다
2006년 5월 4일 목요일
열려있는 포트 확인하기
데몬 작업하는데 떳는지 확인하기 위해서...
프로세스로 검색
10분이상 고민하지 말자
“우리가 하는 걱정거리의 40%는 절대 일어나지 않을 사건들에 대한 것이고
30%는 이미 일어난 사건들, 22%는 사소한 사건들,
4%는 우리가 바꿀 수 없는 사건들에 대한 것들이다.
나머지 4%만이 우리가 대처할 수 있는 진짜 사건이다.
즉 96%의 걱정거리가 쓸데없는 것이다.”
나는 고민거리를 오직 두 가지로 나눈다.
내가 걱정해 해결할 수 있는 고민과 해결할 수 없는 고민이다.
내일 비가 오면 어떻게 하나? 우산을 준비하면 된다.
비를 멈추게 하는 것은 당신 능력의 한계를 벗어난다.
그것은 신의 영역이다. 신의 영역에 속하는 문제는 신에게 맡겨라.
그리고 오직 당신이 걱정해 풀 수 있는 문제들만 고민하고 해결책을 찾아라.
나는 낙관론자도 아니고 비관론자도 아니다.
그저 고민의 핵심을 정확히 스스로 파악해 문제를 해결하는 데만 노력하는 쪽이다.
당신에게 어떤 고민이 있다고 치자.
머리를 싸매고 며칠 누워 있으면서 걱정을 하면 문제가 해결되는가?
조용한 바닷가로 가서 며칠을 쉬면 방법이 생각나는가?
전혀 그렇지 않다. 어떤 문제에 대해 우리가 생각할 수 있는 시간은 10분도 안된다.
무슨 걱정거리가 있건 그것을 종이에 적어보라.
틀림없이 서너 줄에 지나지 않는다.
그 몇 줄 안되는 문제에 대해 10분 안에 해답이 나오지 않으면
그것은 당신으로서는 해결할 수 있는 고민이 아니다.
그런데도 그 10분을 당신은 질질 고무줄처럼 늘려가면서
하루를 허비하고 한달을 죽이며 1년을 망쳐 버린다.
머리가 복잡하다고 하면서 말이다.
하지만 사실은 해결방안도 알고 있으면서
행동에 옮기는 것을 두려워 하는 경우가 대부분이다.
실직을 당한 친구가 있었다.
살아갈 길이 막막하다고 몇 개월을 고민하고 술에 취해 있는 모습을 보았다.
고민의 핵심은 간단하다. 취직이 안된다는 것이다.
왜 안될까? 경제가 어려워서? 천만의 말씀이다.
핑계를 외부에서 찾지말라. 채용할 만한 사람이 아니기 때문이다.
그렇다면 해결책이 나온다. 채용할 만한 사람으로 탈바꿈해야 한다.
앤드루 매터스는 ‘마음가는 대로 해라’에서 이렇게 말한다.
“새벽에 일어나서 운동도 하고 공부를 하고 사람들을 사귀면서
최대한으로 노력하고 있는데도
인생에서 좋은 일은 전혀 일어나지 않는다고
말하는 사람을 나는 여태껏 본 적이 없다.”
고민이 많다고 해서 한숨 쉬지 마라.
고민은 당신의 영혼을 갉아먹는다.
문제의 핵심을 정확히 파악하고 해결책을 찾아 그대로 실행하라.
해결책이 보이지 않으면 무시하라.
고민하나 안하나 결과는 똑같지 않은가.
그러므로 고민은 10분만 하라.
2006년 5월 3일 수요일
리눅스에서 계정 원하는 폴더에 만드는 법
1. 기 능
새로운 유저를 등록할 때 사용하는 명령어
2. 문 법
# adduser [옵션] 계정명
3. 옵 션
-c comment
/etc/passwd 파일의 comment 필드에 넣을 정보를 입력할 수 있다. 이 정보는 계정에 대한 개인 정보이다.
-d home_dir
유저의 로그인 디렉토리인 홈디렉토리를 변경한다. default로는 /home 디렉토리 아래에 일반계정의 홈디렉토리가 생성되는데 이 디렉토리를 다른 곳으로 지정하고자 할 때 사용되는 옵션이다.
-e expire_date
계정이 만료될 시기를 지정하면서 계정을 생성한다. 계정 만료 시기는 YYYY-MM-DD 형식으로 지정한다.
-g initial_group
기본적으로 계정을 생성하면 그와 똑 같은 그룹 명으로 그룹이 생성되고, 그 그룹에 속하게 된다. 예를 들어 linuxone이라는 계정을 생성하면 linuxone이라는 그룹도 같이 생성되고, linuxone 유저는 linuxone 그룹에 속하게 되는 것이다. 그런데, 이 정보를 변경하여, 로그인 그룹을 바꾸고자 하는 경우 이 옵션을 사용한다. xg 옵션에는 그룹명이 아닌 GID 값을 인자 값으로 사용한다.
-p `openssl 생성하는 계정에 비밀번호를 부여 할경우에 사용
4. 사용 방법 및 정보
가) 이 명령으로 계정을 생성하면, /etc/passwd, /etc/group, /etc/shadow 파일에 계정 정보가 저장된다.
[root@ls ]# adduser linuxone
Ex) /etc/passwd
유저명:패스워드:uid:gid:계정에 대한 부가적 정보:홈디렉토리:쉘
ebowski:x:500:500:education:/home/lebowski:/bin/bash
linuxone:x:502:502:lebowski:/home/linuxone:/bin/bash
tech:x:503:503::/home/tech:/bin/bash
/etc/group
그룹명:그룹패스워드:gid:그룹멤버
lebowski:x:500:
linuxone:x:502:
tech:x:503:
/etc/shadow
username:password:last:may:must:warn:expire:disable:reserved
lebowski:$1$qRCtPY54$fO2FeZ88qmKVIGOqxg6Uv1:12853:0:99999:7:::
linuxone:$1$KRNAQz/m$lXS.F9AGQ7DBatQhkkKoK.:12850:0:99999:7:::
tech:$1$fAyrW7dw$l5BPS3cV0qdThzSi9zBr81:12853:0:99999:7:::
나) useradd사용 시 기본값 지정하여 변경하기
[root@ls ]# useradd -D 현재 default로 설정 되어 있는 값들을 보여줌 (/etc/default/useradd 에 정의)
[root@ls ]# useradd -D -g GID 변경 #useradd_D -d 사용자의 홈 디렉토리 지정
[root@ls ]# useradd -D -s 사용자가 사용할 쉘
[root@ls ]# useradd -D -k 사용자의 홈 디렉토리에 복사될 파일들이 있는 곳
[root@ls ]# useradd newuser _G group1, group2 … 새로운 사용자를 또 다른 그룹의 멤버로 등록 (각각의 그룹은 콤마(,)로 분리)
# useradd -g 그룹명 -d /home/경로 계정명 -s /bin/false
-->사용자 실행명령어 사용하지 않게 설정
# useradd -g 그룹명 -d /home/경로 계정명
-->사용자 실행명령어 사용 가능하도록 계정을 낼 경우
# useradd -p `openssl passwd test1234`
-->사용자 비밀 번호를 jtest1234로 지정하여 계정을 낼 경우
※ ` (점) 는 보통 키보드의 왼쪽위에 있는 ~ 표시와 같이 있는(