2006년 7월 20일 목요일
침입자 로그추적
/ 침입자 로그추적 /
/-----------------------------------/
by binish `02. 9. 23
/===================================/
◇> 서두.
'침입자 로그추적' 문서는 binish에 의해 작성된 보안관련 문서입니다.
널리씌여 인간을 이롭게하자는 홍익인간 정신에 근거,
GNU 정신으로 샤워한 이 문서로 아무쪼록 작게나마 도움이 되셨으면 좋겠습니다. B)
(유닉스를 바탕으로 설명합니다)
◇> 침입자들의 발자국 지우기.
침입자들이 쉘을 얻어내서 루트 권한을 따내면 일을 마치고 그들의 자취를 감추기 마련이다.
이때 그들이 하는 분명한 짓을 알아보자.
/etc/syslog.conf 에서 로그상태를 분석해서 로그를 찾아나간다.
/var/adm/messages 에서 자신의 흔적을 지운다.
/var/adm/sulog 에서 su 명령어를 쓴 자신의 흔적을 지운다.
/.history 에서 자신이 쳤던 명령어 리스트를 지운다.
/var/log/syslog 에서 자신의 흔적을 지운다.
/var/log/authlog 에서 자신의 흔적을 지운다.
/var/adm/utmp 에서 자신의 흔적을 지운다.
/var/adm/wtmp 에서 자신의 흔적을 지운다.
/tmp/ 에서 자신의 흔적을 지운다.
.
.
.
.
위의 내용은 보통 로그에서 자신의 흔적을 살며시 지우는 행위입니다.
zap3 을 이용해서 utmp와 wtmp에서 자신을 훔치고 로그를 조작한답니다.
◇> 침입자들의 발자국 살리기.
chkwtmp(www.packetstormsecurity.nl)을 이용해서 지워진 로그를 되살릴 수가 있습니다.
물론 침입자가 zap3을 이용해서 '어떻게' 지웠느냐에 따라 결과는 달라질 수가 있습니다.
자세한 사항은 www.wowhacker.org에서 Webzine 1호를 참고하세요.
만약 침입자가 위에서 언급했던 로그를 지우는 행위중에 하나라도 빼먹는다면,
큰 코 다칠 염려가 분명 있습니다.
우리는 그 코에 비수를 꽂는 셈이죠.
꼼꼼히 로그를 하나하나 체크해서 발자국을 살려내면 됩니다.
◇> 침입자들의 발자국 살리기 위한 사전준비.
만약의 침입자를 대비해서 아래와 같은 사전준비를 할 것을 추천합니다.
> 로그서버 운영
로그서버를 운영하는 이유는,
침해자가 자신의 흔적을 지우기 위해서는 로그서버의 로그까지 건들여야 하는 고통이 따르기 때문입니다.
보통 로그서버는 불필요한 서비스를 모두 막고 취약점을 최대한 줄여 최상의 보안상태로 유지합니다.
이런 로그서버를 뚫기위한 침입자의 노력에 눈물이 나는군요.
로그서버를 여러개를 두면 피눈물이 나지 않을까 싶군요.
로그서버 운영을 위한 과정을 알아보겠습니다.
/etc/syslog.conf에는 서버의 로그가 어떻게 운영될 것인지에 대한 정의가 내려져 있습니다.
*.err;kern.notice;auth.notice;user.none /dev/console
*.err;kern.debug;daemon.notice;mail.crit;user.none /var/adm/messages
위의 예는 UNIX에서 기본으로 채택하고 있는 로그 정의 부분입니다.
syslog.conf에 대한 문서는 www.wowsecurity.net에서 구하실 수 있습니다.
먼저 /etc/hosts에 로그서버로 운영할 서버의 IP를 정의합니다.
210.176.1.1 logserver
그리고 알아볼 것은 로그서버로 이동될 메세지는 514번 포트를 통해서 이동됩니다.
그렇기때문에 /etc/services에 아래와 같은 정의가 내려져 있어야 합니다.
syslog 514/udp
다음으로는 /etc/syslog.conf에 아래와 같이 입력합니다.
*.debug @logserver
이렇게하면 debug위험도의 모든 메시지가 logserver(210.176.1.1)로 복사되어 집니다.
여기서 제가 궁금했던 사항을 말씀드리면,
로그서버의 어디로 복사되는가가 제 의문이었는데 그 답을 말씀드리자면,
로그서버의 /var/adm/messages의 내용에 추가된다는 것입니다.
예로 mainserver에서 로그서버를 운영했다면,
로그서버의 messages에는 아래와 같은 형식이 추가되어 저장됩니다.
Sep 23 15:26:59 mainserver last message repeated 534 times
Sep 23 15:27:34 mainserver unix: sf0: write cnt c al_pa 0xe2
설정을 모두 마쳤으면,
#ps -ef | grep syslog로 PID를 확인해서 재실행시키면 됩니다.
리눅스에서는 한가지 더 해주어야 할 작업이 있습니다.
리눅스에서는 로그서버를 운영하기위해서 옵션을 필요로 하는데,
-r 옵션입니다.
/etc/rc.d/init.d/syslog에서,
daemon syslogd $SYSLOGD_OPTIONS 부분을 daemon syslogd -r $SYSLOGD_OPTIONS로
고쳐주면 됩니다. (vangelis님 감사)
> cron을 이용한 로그 몰래 복사
침입자가 cron에 대해서 무지하다면 발자국을 충분히 잡을 수 있습니다.
우선 쉘을 하나 짭니다.
[rcboot.sh의 내용]
cd /
cd /var/adm
cp lastlog /usr3/testR/babo
cp messages* /usr3/testR/babo
cp sulog /usr3/testR/babo
cd ..
cd log
cp syslog* /usr3/testR/babo
로그화일들을 위의 쉘에서는 /usr3/testR/babo 폴더로 복사하는겁니다.
이 rcboot.sh을 cron을 이용해서 실시간으로 실행시켜줍니다.
0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * rcboot.sh
한가지 더 트릭을 쓴다면,
.babo 처럼해서 안보이는 폴더로 만들어도 됩니다. (별거 아닌가..)
> .history을 이용한 명령어 경로 확인
.history를 모르는 침입자가 있을까싶다마는,
신난 마음에 가장 기본적인 점을 잠시 까먹는 침입자가 있을지도 모릅니다.
.cshrc에,
set history=32
set savehist=100
를 지정해주고 각 유저의 홈디렉토리(침입자는 보통 root에서 로그를 조작하기 때문에 ~/가 적합하겠군요)에
.history를 생성해놓으면 해당유저가 입력했던 명령어가 기록됩니다.
여기서 침입자가 입력했던 명령어를 발견하면 대처법도 생길겁니다.
한가지 트릭을 말씀드리자면,
침입자가 입력했던 명령어가 의외로 평범(?)할 경우 구분이 안갈 수 있습니다.
만약 루트에 .history를 설정했고 자신이 루트로 작업을 했다면,
종료시에 아래와 같이해서 구분을 지어 주면 편할겁니다.
# exit ; echo "여기까지는 내가 쓴거얌"
◇> 맺음말
로그에 대한 관심과 준비는 아무리 지나쳐도 해롭지 않습니다.
흡연은 폐암 등 각종 질병의 원인이 되며, 특히 임신부와 청소년의 건강에 해롭다하지만,
로그관심은 그 어느것에도 해롭지 않다는.. B)
끝으로 오타나 잘못된 내용, 획기적인 로그추적법이 있으신 분은 아래의 주소로 연락주시면 감사하겠습니다.
Email : jdoryung@hanmail.net
2006년 7월 1일 토요일
2006년 7월이다.
놀러가는 휴가철이어서 그런 게 아니라 지난 6월은 내게 있어 "이구~힘들어라" 는 생각이 들었던 한 달이었기에... 오늘 7월이 내게는 더욱 새롭게 다가 오는지도 모르겠다.
사람을 믿지 못한다면...으로 시작하는 마음과 당장...이라는 마음 중 생각해 볼 문제는 많은 거 같다.
내가 가야하는 그 길에 서광이 비추어지길 바라며...
2006년 6월 29일 목요일
프로그램을 진행하면서...
여기 조금, 저기 조금 하다보니 이것두 저것두 안되는 듯...하다.
그래서 생각하건데...
디자인부터 다시 해야겠다. 킁킁...
방문자수는 하루가 다르게 늘어가는데...ㅋㅋ 건져갈 내용이 없어서 덧글이 없나부다.
2006년 6월 28일 수요일
3분안에 생각할 수 있는 110가지
1. 다른 사람을 배려하라.
2. 서로 주고 받는 마음이 중요하다.
3. 스스로 축복 받는 사람이 되자.
4. 하찮은 일도 소중히 생각하라.
5. 자신의 운명은 개척하기 나름이다.
6. 큰 인재는 감정 조절을 잘한다.
7. 세대간의 교류에 관심을 기울여라.
8. 나보다 우리가 먼저다.
9. 웃음은 당신의 수명을 연장한다.
10. 한 박자 늦추자.
11. 얼굴은 마음의 거울이다.
12. 사사로운 감정은 큰일을 그르친다.
13. 베푸는 삶은 아름답다.
14. 더불어 사는 방법을 터득하라.
15. 좋은 인상을 창출하라.
16. 인생은 연분을 잘 살려야 한다.
17. 인사는 많이 할수록 유익하다.
18. 중생의 은혜를 베풀자.
19. 깃털이 가지런한 새가 높이 난다.
20. 비전을 제시하는 리더가 존경 받는다.
21. 빠르게 변하는 직업 환경에 대응하라.
22. 플러스 생각을 가져라.
23. 꼭 필요한 사람이 되자.
24. 현상 유지는 퇴보다.
25. 나의 일을 소중히, 즐거운 마음으로 하라.
26. 마음의 여유를 갖자.
27. 신나는 직장 분위기를 가진 기업이 성공한다.
28. 젊었을 때 선택이 평생을 좌우한다.
29. 최초의 승리감을 얻도록 노력하자.
30. 작은 일부터 실천한다.
31. 시간 포착이 성공의 열쇠이다.
32. 일하는 이유를 충분히 파악하라.
33. 자신을 멋있고 독특하게 알리라.
34. 이왕이면 다홍치마가 좋다.
35. 지도자의 용기는 진정한 것이어야 한다.
36. 좋은 지도자는 인재를 알아본다.
37. 24시간을 효율적으로 관리하라.
38. 능력의 씨앗을 키워야한다.
39. 사랑이 깃든 말을 늘 찾아라.
40. 부부간의 사랑은 100% 모두 주는 것이다.
41. 화가 났을 때는 현명하게 대처하라.
42. 잔소리가 많은 사람은 그 만큼 손해를 본다.
43. 질투심으로 인한 상대의 공격을 잘 극복하라.
44. 인간관계의 본질은 믿음이다.
45. 관용의 미덕을 배워라.
46. 인생의 마지막 동반자는 남을 위해 쌓은 덕과 선행이다.
47. 돈을 가치있게 쓸 줄 알아야 한다.
48. 탐욕이 지나치면 낭패한다.
49. 올바른 가정은 아버지의 처신에 달려 있다.
50. 사람의 품성은 가정에서 부모가 만든다.
51. 존경받는 아버지는 함부로 행동하지 않는다.
52. 자녀들에게 사랑과 관심을 보여라.
53. 고기 잡는 방법을 가르쳐라.
54. 상대방의 이야기를 충분히 들어라.
55. 오래 참고 기다릴줄 알아야 한다.
56. 인간은 어머니의 사랑을 먹고 산다.
57. 성공한 남편 뒤에는 훌륭한 아내가 있다.
58. 가족도 오락을 함께 할 때만이 진정한 운명 공동체다.
59. 이 세상에 불가능이란 없다.
60. 사업에 성공하려면 남보다 수십배 더 노력하라.
61. 실패의 원인을 바로 파악하라.
62. 과거와 현재에 너무 집착하면 실패 한다.
63. 훌륭한 야구 선수도 5할을 넘지 못한다.
64. 인간은 자기와 싸우는 유일한 동물이다.
65. 성공의 문턱은 높지만 불가능은 없다.
66. 역경을 환경 탓으로 돌리는 자는 다시 못 일어난다.
67. 끈기와 도전 정신으로 돌파하라.
68. 역사는 위대한 만남에서 비롯된다.
69. 가치 있는 정보를 가능한 한 빨리 선별하라.
70. 집중력은 성공의 지름길이다.
71. 위대한 삶의 걸작품은 정성에서 비롯된다.
72. 꿈을 잃지 말자.
73. 프로 정신은 승리자의 첫걸음이다.
74. 역경 다음에 오는 성공은 달콤하다.
75. 무엇이든 자기만의 특기를 개발하라.
76. 궁하면 통한다.
77. 위기는 극복한 후에 빛난다.
78. 조개와 도요새의 싸움도 관찰하기 나름이다.
79. 거짓말은 또 다른 거짓말을 부른다.
80. 임기응변에 능해야 성공한다.
81. 훌륭한 스피커는 스스로 만들어 가는 것이다.
82. 대화는 혼과 역사까지 움직인다.
83. 스피치도 많은 학습과 실습이 필요하다.
84. 말로 상대방의 마음을 움직여라.
85. 말의 효과를 높이는데 최선을 다하라.
86. 명연사는 하루아침에 되지 않는다.
87. 무심코 한 말 한마디가 생사를 좌우한다.
88. 케네디의 명연설은 정신적 유산이다.
89. 평범한 말도 위대한 힘을 불러온다.
90. 말은 끝까지 책임져야 한다.
91. 즉흥 연설도 뛰어난 실력이다.
92. 말은 그 사람의 인격이다.
93. 유연한 사고 방식을 가져라.
94. 물의 철학을 배워라.
95. 올바른 가치관을 세워라.
96. 시간을 창조적으로 활용하라.
97. 성공적인 삶은 연마 끝에 태동된다.
98. 폭넓은 사고력을 가져라.
99. 존경받는 사람이 되어라.
100. 인생성공의 제1보는 자기 수양이다.
101. 중도의 정신을 몸에 베게하라.
102. 인생을 후회없이 살아라.
103. 미련한 독수리가 되지 마라.
104. 책속에 해답이 있다.
105. 선물은 그 사람의 인격 표현이다.
106. 자기 만들기에 소홀하지 마라.
107. 수시로 자신을 점검하라.
108. 가끔은 산에 올라가라.
109. 기대한 대로 된다.
110. 검소한 생활을 습관화하라.
출처 : 남보다 3분 더 생각하라 그러면 미래가 보인다 중에서...
2006년 6월 25일 일요일
그래 이제 일어나는거야~
별 가진것없던 내 맘속에서 뭔가가 꿈틀하는 걸 느끼게 하는 만화였다.
별 처럼 되는 건 환상이지만, 별 처럼 되기 위해 노력하는 건 더이상 환상이 아니다.
일어나자~!
네이버작가 - 주니쿵님 만화 보러가기








2006년 6월 24일 토요일
[tar,gzip,tar.gz] 리눅스에서의 압축
* tar 를 풀때는 -xvf
1. bbb를 aaa.tar로 묶어라.
: tar -cvf aaa.tar bbb
2. bbb, ccc를 aaa.tar로 묶어라.
: tar -cvf aaa.tar bbb ccc
3. 현재 디렉토리에 있는 모든걸 aaa.tar로 묶어라.
: tar -cvf aaa.tar *
4. *.tar를 그냥 풀어라
: tar -xvf aaa.tar
5. tar.gz로 압축해라
: gzip aaa.tar.gz
6. tar.gz를 풀어라
: gzip -d aaa.tar.gz
7. tar.gz로 압축해라
: tar cvfz a.tar.gz source~
8. tar.gz를 풀어라
: tar xfz *.tar.gz
2006년 6월 21일 수요일
완전 로딩후 페이지 보여주기
최근에 완전 로딩 후에 페이지를 보는 방법에 대한 팁이 자주 보고, 아래에 어떤 분이 readystate에 대한 언급을 해 주셔서, 한번 만들어 보았습니다. 내용은 아주 간단합니다.
lib.php ------------------------------------
<?php
function loadding()
{
echo ("
<div ID='waitingDiv' style='position:absolute; overflow:hidden; border:0px; z-index:1;'>
<table width='880' height='500' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td align='center'>
<table border='0' cellpadding='0' cellspacing='0'>
<tr>
<td>
<table width='500' border='0' cellpadding='10' cellspacing='1' bgcolor='#D0D0D0'>
<tr bgcolor='#F5F5F5'>
<td align='center'>
<table width='400' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td><font style='font-size:9pt;' color='#FF0000'>처리중입니다.</font></td>
</tr>
<tr>
<td><font style='font-size:9pt;' color='#6600FF'>잠시 기다려 주세요.</font></td>
</tr>
<tr height='50'>
<td></td>
</tr>
<tr>
<td><img src='http://www.mytechnic.com/_logo/logo.gif' width='126' height='39' border='0'></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<SCRIPT LANGUAGE='JavaScript'>
<!--
document.onreadystatechange = fnStartInit;
function fnStartInit()
{
if (document.readyState=='complete')
{
if (document.all['waitingDiv']) {
document.all['waitingDiv'].style.visibility = 'hidden';
}
}
}
//-->
</SCRIPT>");
flush();
}
?>
demo.php ------------------------------------
<?php
include("lib.php");
loadding();
// PHP 코딩 시작하세요.
?>
다른 방법보기..
■ 페이지 로딩중 효과 주기 ■
플래쉬와 같은 효과를.. html 에 넣는 소스
- 페이지가 다 뜨기전에는 로딩중 이라는 글씨를 나오게 합니다 ^^
1. 먼저 아래와 같은 자바 스크립트를 <head>와 </head> 사이에 넣어줍니다.
<script language=javascript>
n = document.layers
ie = document.all
function hide() {
if (ie || n) {
if (n) document.Load.visibility = \"hidden\"
else Load.style.visibility = \"hidden\"
}
}
</script>
2. 다음으로 <body> 태그에 onload=\"hide()\"를 추가시켜줍니다. 아래처럼 되겠죠.
<body text=black bgcolor=white onload="hide()">
3. <body> 바로 아래에 아래 스크립트를 넣습니다.
<script language=javascript>
if(ie || n) document.write('<div id="Load" style="position:absolute;width:100%;height:100%;top:0;left:0;background-color:#ffffff;z-index:5">페이지 로딩중 보여줄 내용</div>')
</script>
결국 이것들을 모아보면 아래처럼 됩니다.
<html>
<head>
<title></title>
<script language=javascript>
n = document.layers
ie = document.all
function hide() {
if (ie || n) {
if (n) document.Load.visibility = \"hidden\"
else Load.style.visibility = \"hidden\"
}
}
</script>
</head>
<body onload="hide()" bgcolor='white' text='black'>
<script language=javascript>
if(ie || n) document.write('<div id="Load" style="position:absolute;width:100%;height:100%;top:0;left:0;background-color:#ffffff;z-index:5">페이지 로딩중 보여줄 내용</div>')
</script>
본래 문서
</body>
</html>
Div에서 수직정렬하기
height가 있는 div안에서 우측 하단으로 정렬하기위해선 부모 div에서는 position:relative선언을 꼭 해주고, 자식 div는 position:absolute에 right와 bottom을 0으로 지정해주면 된다.
2006년 6월 20일 화요일
IE(인터넷익스플로러) 안쓰면 안되나?
테이블사용을 0%로 하기 위해 DIV로 코딩하고 있는 지금 내 맘대로, 내 뜻대로 안되는 게 너무 짜증난다.
IE는 왜 이렇게 표준을 안지키는건지... 저거 맘때로 맹글고... 그렇다고 파이어폭스(표준)에 맞춰서만 만들수도 없는 노릇이 사용자 이용 웹브라우저가 당연 IE가 많은 게 현실이고, IE에서 제대로 표현이 되지 않으니...
제대로 된 걸, 내가 표현하고 싶은만큼 만들어 내기가 이렇게 힘이든건지... ㅜㅜ
나 스스로 웹표준을 몰랐던 그 때, TABLE이 전부였던 그 때로 돌아가고싶다는 생각이...간절? 에이~
지금은 자꾸... 테이블로 만들까... 하는 유혹에 눈독을 들인다.
에이~ 술이나 마시러 가야겠다.
CSS Tip
- CSS Reboot 프로젝트
- SitePoint에서 출판한 책들의 샘플 pdf 파일들
- min-height속성을 퍼센트로 지정할때?
- text-shadow를 지원하는 브라우저
- CSS 에디터, TopStyle
- css의 선택자에서 특정 ID와 특정 class를 동시에 만족하도록 선택하는 방법은?
- Ul에서 블릿의 위치는 조절할 수 없나요?
- 혹시 print용 CSS 파일을 제작해보신 경험이 있나요?
- 중첩div일때의 정렬
- 컨텐츠 양 쪽 나누기
- [질문] css 로 영어와 한글 혼용시 다른 폰트 적용하기
- [질문] 세로1px 짜리 선을 두개붙여서 표현하고자할때;는 어떻게할까요;
- 영문과 한글에 다른 폰트를 각각 지정해 줄 순 없나요?
- [질문] 상대 크기 지정하기,,? ;
- [질문]selectbox에 적용한 css가 IE와 FireFox가 서로 달라서요.
- [질문] vertical-align이 안돼요~;;
- div에서 vertical-align:middle와 같이 하려면 어떻게 해야하나요?
- block속성 div 중첩 가운데 정렬?
- [질문] 반드시 큰따옴표를 써야하는 곳은?
- Css 만으로 텍스트를 안 보이게 하고 싶을 때
- 이게 올바른 방법인지...
- [질문] div 크기를 넘어서다..
- div 레이아웃에서 메뉴 너비는 고정이고 본문 너비는 가변일때
- background의 패턴 반복 및 div의 자동 높이 조절
- a 태그에 이미지를 백그라운드로 입힐때..
- <div> 태그의 width와 height가 ff에서는 제대로 표현되는데 IE에선 안되는군요.. why?!?!?
- div 위치 지정의 어려움....
- 이미지맵 쓰시나요?
- [질문] div에서 float 과 position의 관계중 우선시 되는게 뭔가요?
- 질문인데요...
- 공백 없는 영문이 길게 이어질 경우 폭이 늘어나는 현상
- 질문이요~ position의 right:0 에 관한것과 <hr>의 세로 margin먹어들어가는것에 대해서입니다.
- 1
- 질문이요.css가 웹브라져가 아닌 Pda.셋탑박스등과 같은 다른 멀티기기에서는 어떻게 적용이 되나요?
- div 와 컨텐츠 크기
- 질문드려요..FF에서 float과 position을 쓰면 깨지네요. ㅡㅡ;
- class만으로 특정 태그를 지정할 수 있는데 왜 id도 쓸 수 있을까요?
- class 하위에만 적용되지 않고 다른 태그까지 모두 적용??
- div의 구조적 문제입니다.. 한번만 봐주세요.~
- td , height 100% 에 대한 문제점 해결방법?
- div 중첩에 관한 문제인데요.
- span에 padding이나 margin을 줄 수 없나요?
- float:right를 float:left 위쪽에 쓰는게 맞나요?
- div를 사용하고 난 후 생긴 굉장히 사소한 문제점
- 간만에 질문 - clear에 대해서.
- 처음 글을 쓰는데....접근방식의 문제인가요?
- font 단축형 속성에 대해..
- 링크를 이미지로 교체 시 질문 입니다..
- div상자의 정렬은 어떻게 하나요
- div 정렬에 대한 질문입니다.
- style을 많이 사용하면 많이 느려지나요?
- word wrap 관련 질문입니다
- 이상한 공백
- 웹표준(댄씨더홈)에서 ul관련 질문입니다.
- #9c9는 무슨 색인가요??
- tbody 섹션만 독립적으로 스크롤링 할 수 있는 기능을 제공하는 프로그램이 뭔가요?
- 새로고침할때 ie와 firefox
- <q> 쓰시나요?
- float:right를 써서 div를 오른쪽으로 보내면 생기는 문제
- IE와 firefox로 해봤는데 너무 달라요;;
- IE와 Firefox에서 ul 영역
- 그라데이션 필터
- body>#content 이게 무슨 뜻인가요?
- valign 문제입니다.
- 망할놈의 Ie ㅠ_ㅠ..;;
- 이건 불여우의 버그인가요?
- LI에서 input이 있으면 line-height가 안되는 문제
- 질문있습니다..
- label for로 체크박스가 td를 묶고 싶어요.
- label for 토글, FF에선 안되나요?
- 테이블을 돌리면 id가 복사되는데.. 어떻게 해야하나요?
- 왜 감싸는 div의 margin이 안쪽 margin에 영향을 주나요?
- ins, menu가 뭔가요?
- voice-family를 했는데 왜 IE와 FF에 따로 적용되지 않을까요?
- 질문드립니다~
- 인쇄 미리보기 버튼은 어떻게?
- margin이 있는 div안에 100% table을 넣으려면 어떻게 해야하나요??
- Div관련 질문..왕초봅니다 ㅜㅜ
- 해당 페이지에만 사용하는 css는 어떻게 분류하시나요?
- Strict//EN, Transitional//EN 무슨 차이고 뭘 써야할까요?
- 파이어폭스에선 table-layout: fixed;, nowrap 같은게 안되나요?
- id를 클래스처럼 2번 써도 되나요??
- 단축키 누른것과 같은 효과를 내는 태그가 있나요?
- link rel..을 head에 안쓰면 안될까요?
- div관련 질문 또 드립니다..초보라 정말 어렵네요ㅜㅜ
- Doctype 위에 아무것도 쓰면 안되나요??
- 드림위버에서 새 파일 열때 그 형식을 정할 수 있나요?
- 왜 div에 있는 p에 float:left를 하면 div의 background가 없어지나요?
- 플래시무비&동영상을 삽입할때...
- 인쇄용 css에서 인쇄화면을 제어할 수 있나요?
- div문법 초보입니다..질문좀 드릴께요..
- div관련 아래에 질문글에 대한 재질문입니다..
- ul, li의 하위 순서, 어떻게 해야하나요?
- IE, FF에서의 padding
- 웹 표준에서는 테이블 width를 <th>에서만 정할 수 있나요?
- background 이미지관련 문제
- table-layout: fixed;, white-space: nowrap;, overflow: hidden;의 반대말을 알고싶어요.
- 세로로 된 table에서 thead를 어떻게 쓰나요?
- h1 태그에서의 브라우저별 cursor:hand 적용문제
- font-weight: normal !important <- 이게 무슨 뜻인가요?
- diveintomark의 body가 이상해요;;
- h1과 일반 텍스트를 한줄에 쓸 때.
- 가로로 된 메뉴를 <ul>로 만들고 싶어요.
- 가로로 된 메뉴를... + float: right;를 하고싶어요.
- div의 width값 고정에 대한 건데요. 질문이요
- float에 대한 기초적인 질문
- 왜 background인데 텍스트 위로 올라오나요?
- a에 onClick을 쓰는데 href를 쓰면 안되죠?
- shortcut icon이 뭔가요??
- frame과 rules
- 높이 지정안해도.. bg가 쭉~ 깔리게.. 어떻게 하면될까요?
- 폼양식에 css처럼 스타일을 적용할 수 없나요?
- dt와 dd는 한 묶음인데 왜 같이 안움직이나요?
- 메일을 받을때 나오는 정보는 어떤 태그로 코딩해야 할까요?
- <button type="button">버튼</button>
- dt와 dd를 붙여서 나열하기
- margin: 0 auto;에 관해서 여쭤볼께요
- <ol>에서 나온 숫자와 글자 간격이 너무 넓어요.
- clear:both 이후에...
- 플래쉬 위에 div를 올릴 수 있나요?
- 서버에 CSS파일을 update했을때에도 htm상에서 적용이 안되는 경우가 있나요?
- firefox에서 Iframe자동 height조절 되게 하는법 아시는분?
- 마우스 올리자마자 alt가 바로 나오게 할 수 있나요?
- Ie의 버그 해결방법?
- 글씨를 안보이게 할 수 있나요?
- background: url이 FF에서 이상하게 나와요~
- <h1><img src="title.gif" alt="대제목" /></h1>이 유효한 코드인가요?
- 고정크기의 div 박스를 페이지 내에서 가운데에 오게끔..
- 스타일을 적용하지 않으려면 어떻게 해야하나요?
- 초보적인 질문입니다..ㅡㅡ;;;
- 구조화(?)에 대한 질문입니다..
- CSS Horizontal Navigation Example
- 염치불구하고 다시 질문을...
- 질문좀 드릴게요.d:)
- 음d:) 또 제가 남기네요..
- ul로 메뉴를 만드는데 width가 적용이 안됩니다.
- 제가 아래에 질문을 조금 잘못올린것 같은데요
- [질문]li를 display:inline으로 했을때와 float에 관한 질문입니다...
- image replacement
- tab 문자 크기 조정할 수 있을까요..?
- 어김없이 또 질문 들어갑니다;;
- footerstick (footer를 브라우저의 바닥에 붙이기~)
- pixelpost에 대해서 질문이 있어요~
- 태터툴즈 스킨을 만들고 있는데 ie와 ff가 다르게 나오네요
- 2단쓰기는 어떻게 하는건가요?
- 플로팅.. 메뉴에 적용하면 안될까요?
- 휴..
- 펌
- div안의 div 위치를 제어하고 싶어요.;;;
- border가 바깥쪽에 생기는 문제
- 최소 width나 height를 줄 수 있나요?
- div로 다단 레이아웃을 만들 때, 수직 정렬과 height 문제
- 레이아웃을 짜다가.... 막히네요 ;ㅁ;
- 1024와 1280
- li를 사용했을경우..
- 스타일 적용이 안되는 부분이 있습니다
- 상대/절대 레이아웃
- universal selecter?
- basic 질문 하나
- 이런 거에 대해서 어떻게 생각하세요?
- sans-seriif
- 2중 배경 깔기 질문;;
- position: absolute; 에서 height가 늘어나면 같이 늘어나게 하는 방법을 알고싶어요.
- daily questions
- 특정 속성을 Ie에서만 적용 시키려면 어떻게 해야하나요?
- <li>로 감싸인 하이퍼링크의 스타일
- entity?
- word-break 문제입니다.
- 원하지 않는 여백이 생깁니다.
- css hack for ie, opera
- 잡담&질문]이제 스크롤되는 탑버튼이 사라지는건가요..?
- ie 버그인듯해 질문드립니다.
- 라디오와 체크박스, 어느걸 써야할까요?
- <label>사용시
- font 크기 때문에요.
- wp-contact-form 설치하려는데요..
- 오랜만에 질문하네요^^: 링크태크에 이미지적용시 껌뻑거리는 현상때문인데요.
- display: table; <- IE에선 안되나요?
- hr의 스타일을 조정하려면?
- [초보]문서내 플래쉬 파일을 넣으면 유효성 검증을 실패하네요
- 인터넷 익스플로러 완전 배려 안하기
- 테이블속성을 스타일로 처리하는 문제...
- image with description
- 엠퍼센드기호에 질문드려요
- 탭방식섹션 표현에 관한 궁금증..
- frameborder도 css로 제어할 수 있나요?
- 푸터부분과 바디부분 사이의 마진이 왜 먹지 않은지 궁금합니다.
- 유동적 사이즈의 navigation 제작에 관한 질문
- 코딩 버그좀 잡아주세요.
- 테스트 브라우저에 대한 궁금증입니다.
- 링크없는 단순 구문 표현 방법 질문입니다.
- 다들 동영상 어떻게 쓰세요??
- 야후코리아 css소스중에서요
- 3단 Css 메뉴
- topstyle 중 ftp계정의 파일과 연동작업이가능한가요??
- input태그에서 정렬문제...
- 인쇄용 스타일 시트를 위해 '포인트' 단위를 사용하는 것이 완벽한 방법입니다..???
- table의 td에서 줄넘김 안되고, 넘어가는 늘 안보이게 못하나요?
- CSS에서의 ID와 Class의 사용 문제.
- Id 사용의 극단적인 예로.
- text에 의해 자동으로 폭 조절
- 계층구조가 있는 리스트 작성때 어떤것이 맞나요?
- css 기반 2단 가로+가로 메뉴의 폭 조절 문제
- CSS alpha filter 사용시 문제점...
- xhtml1.1에서의 iframe 사용.
- 초난감 li 세로로 display 하기
- li, a로 구성한 메뉴에 background image를 쓸 때..
- marquee태그를 대체할 수 있는 방법이?
- css파일에서 charset, import...
- div 내의 그림크기가 자동으로 줄여지게 하는 방법이요...
- Css 질문입니다!
2006년 6월 17일 토요일
내 고추들..
어제 포스팅을 하다 사진을 다시 찍어놔야지.. 하는 생각에 오전에 찍어봤는데, 어찌나 예쁘게들 자라나는지.. 넘 좋다.
아낌없이 주는 고추들과 함께 올 여름도 알싸~하게 매운맛을 즐길 수 있게 됐다.ㅋㅎㅎ
저기 저... 고추꽃이 보인다.
고추꽃이 폈다가 시들면서 제 속에 담아뒀던 고추가 작게 열리기 시작하면 그 뒤에 있는 고추처럼 길게 자라난다는 사실. 다들 아시는지...
아래 두 장의 사진을 더 올려놓는다.
고추사진 더보기..
고춧잎과 고추들
고추열매 ^^
2006년 6월 16일 금요일
2006년 첫 수확 - 고추
누가 고이 심어놓은 고춧대 5개를 쑥~ 뽑아가버려 잘 클지 걱정이었는데, 올해도 잘 커줘서 고맙다.
저녁을 준비하며 김치찌개를 끓이다 고추를 하나 썰어 넣을려고 딴 첫 수확품.
매운내음이 얼마나 심한지...ㅋㅋ [노마는 매운걸 좋아해]
덕분에 김치찌개 하나에 밥 많이도 먹었다. ^______^
작년에도[Link] 잘 키워서 맛나게 먹었는데 말이지 올해도 여름내내 고추걱정 안하며, 찍어먹고, 썰어먹고... 생각만 해도 좋다
볕나는 땅에다 그냥 심어두고 물만 줬을뿐인데, 고추는 내게 너무 많은 것을 주는 고마운 존재다.
올해도 잘 먹으마~~~ 고맙다 고추야~
DIV 속성 중 display 와 visiblity 의 차이점
그런데 속성의 차이, 즉 display 와 visiblity 의 차이는 극명하게 달라진다.
[CODE] <div style="display:;"> [/CODE] 의 경우에는 div 레이어 위치값을 지정하지 않더라도, div레이어가 있는 위치에서 지정되어진 크키만큼 보임/숨김을 나타내지만,
[CODE] <div style="visiblity:;"> [/CODE] 의 경우엔 display값과는 다르게 div레이어가 나타내져야 하는 위치값을 반드시 지정해야만 한다는 것이다.
display 속성의 경우엔 div 레이어 자체가 주어진 공간에 나타내어지지만, visiblity 속성의 경우엔 지정한 위치값에 오버랩되어 나타나기 때문이다.
잘 골라서 쓰자~! 아~ 공부할 꺼 많다..
2006년 6월 15일 목요일
XHTML 표준 맞추기가 여간 까다롭지가 않군...
아직 개념이 잘 잡혀있지 않아서 그런가 보다...치부하기도 그렇고...
어느 정도하고 난 다음 페이지를 확인하면 생각처럼 Output 이 나오질 않으니 답답할 뿐...에혀~
http://validator.w3.org/check?verbose=1&uri=http://확인할홈페이지주소
코딩할 때 참고하면 참 좋다. 규격에 맞는 생활 시작하기 몇 주되는 날 적었음 ㅡ..ㅡ
2006년 6월 14일 수요일
분명 뒤에 뭔가 있었던거 같았는데... [호러버전]
2006/05/31 19:01에 찍은 사진
자꾸 돌아보길래 한 컷! 근데 역시 아무도 없다... 카트라이더안에 귀신이?? 흠흠..
축구는 역전이 제 맛이다
SOCCER IS BEST SERVED REVERSAL!
그래서 축구는 이틀전 일본과 호주의 경기처럼, 어제의 토고와의 경기처럼 역전이 제 맛인 것이다.
2:1
2006년 6월 9일 금요일
코리아넷배너..다시달다
참..거지같은 게..계속해서 엑박이 뜨게 놔둘수가 없어서 오늘 '2006버전의 배너로 바꿔놨다
스틸이미지 | 배포버전 |
괜찮네 뭐... 배포하는 버전이 움직이는gif라 내가 쓰고 싶은데로 스틸이미지로 변경도 했고..
2006년 6월 5일 월요일
카스 축구응원팩 당첨되다~!
근데 냐하~ 오늘 당첨됐다며... 응원팩이 집으로 택배 배달되어 온 것이 아닌가! 하하
도착한 물건은 700ml 의 CASS큐팩 2병이랑, 붉은 두건, 카드(? 별 말 없이 그냥 열심히 응원하자~는 내용)
냐하하~ COREA FIGHTING! 기분 조오타~!
2006년 6월 2일 금요일
KOREA.NET 이러면 안되지...
방문제통계아래에서 확인가능!
http://www.korea.net/news/issues/issueDetailView.asp?board_no=5645 배너받는 곳에 가보니...젠장.... '2006버전의 로고배너로 내용을 다 바꿔버린게 아닌가...
'2004년 버전은 '2004년 로고배너 그대로 두고 또 '2006년 버전을 링크할 수 있게 올려둬야 하는거 아닌가 모르겠다.
..board_no=5645 를 봐서 알겠지만, 2004년 10월 8일에 포스팅한 내용을 수정한거다...
많은 블로거들과 외국계..무시기무시기들 한참 놀랄 일이 아닐 수 없다.
홈페이지관련 일을 하는 나로써는 참...한 숨이 절절...하다
코리아넷 누가 디쟈너고 프로그래머인지, PM이 누군지 참...궁금하다.
젠장... '2006 배너로 갈아넣어야 되나 말아야 되나....
네이버메일로 받은 담당자메일 보기..
메일다운로드해서 확인하기
안녕하세요 김태관님
애정을 가지고 저희 Korea.net을 지켜봐주셔서 감사드립니다.
지적하신 페이지의 오류내용은 프로그래머에게 전달하였습니다. 즉시 내용을 수정하도록 하겠습니다.
감사합니다.
코리아넷 운영자 배상
-------------------------------- [ Original Message ] -------------------------------
From : 김태관
To : webmaster@korea.net
Date : 2006-05-30 12:35:50
Title : 링크수정바랍니다
다이나믹코리아배너를 블로그에 달려고 http://www.korea.net/news/issues/issueDetailView.asp?board_no=5645 페이지를 방문한 김태관이라고 합니다.
아직 '2006 새로운 버전의 New 'Dynamic Korea' Logo 는 다운로드를 할 수 없었지만,
이전 October 08, 2004 에 올려놓으신 배너들을 다운로드 하려고 하는데, html code 부분링크가
잘못된게 몇 군데 되는군요.
http://www.korea.net/news/issues/issueDetailView.asp?board_no=5645
Size:
147*45 에서
src="http://www.korea.net/image/issue/41_bn147_45.gif" border=0> //.gif추가
Size: 160*35 에서
src="http://www.korea.net/image/issue/41_bn160_35.jpg" border=0> //.jpg추가
Size: 162*28 에서
src="http://www.korea.net/image/issue/41_bn162_28.gif" border=0> //.gif추가
많은 외국인들도 이용하리라 생각되는 대한민국 홈페이지에 혹 누가 되지는 않을까 싶어 글을 드렸습니다.
작성일자가 2004년 10월 08일인데 오늘 2006년 05월 30일까지 아무도 모르진 않았을텐데....
빠른 수정
부탁드립니다.
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 쪽은 관리가..ㅜㅜ
따로 페이지를 맹글어서 쓸 수 밖에...내 머리의 한계인가보다