Media Log

   퍼미션(권한)이란?

Owner

Group

Other

Owner와 Group은 파일소유자자신과 자신이 속한그룹. Other은 제3자, 웹사이트 방문객은 제3자로 nobody로 취급.

r

w

x

r

w

x

r

w

x

r은 파일 읽기(4), w는 파일 쓰기(2), x는 파일 실행(1)

7

5

5

파일소유자는 그것을 읽고 쓰고 실행시킬 수 있지만, 제3자는 읽고 실행만 시킬 수 있다.

7

7

7

제3자도 쓰기 권한이 주어진다.

*.html  *.cgi, *.pl *.txt등의 파일은 업로드시 반드시 ascii로 하고 나머지 그림(*.gif *.jpg)이나 자바 애플릿(*.class), 실행파일(*.exe *.zip *.rar)등은 binary mode로 업로드 할 것.

   리눅스 기본명령어

명령어

사 용 법

login

사용자 인증과정

리눅스 시스템은 기본적으로 multi-user 개념에서 시작하였기 때문에 시스템을 이용하기 위해서는 반드시 로그인을 하여야 합니 다. 로그인은 PC 통신에서도 많이 사용되어져 왔기 때문에 그 개 념  설정에 그다지 어려움이 없을 것입니다. 흔히 말하는 ID를 입력하는 과정입니다. 

passwd

패스워드 변경

리눅스, 특히 인터넷의 세계에서는 일반 컴퓨팅 상황에 비하여 훨씬 해킹에 대한 위험이 높습니다. 패스워드는 완성된 단어 보다는 단어 중간에 숫자나 키보드의 ^, #, ' 등과 같은 쉽게 연상 할 수 없는 기호를 삽입하여 만들어 주는 것이 좋습니다

du

하드사용량 체크(chkdsk)

자신의 하드공간을 알려면
# du
특정 디렉토리의 사용량을 알려면
# du -s diretory_name

ls

파일 리스트 보기(dir)

F : 파일 유형을 나타내는 기호를 파일명 끝에 표시
    (디렉토리는 '/', 실행파일은 '*', 심볼릭 링크는 '@'가 나타남).
l  : 파일에 관한 상세 정보를 나타냅니다.
a : dot 파일(.access 등)을 포함한 모든 파일 표시.
t  : 파일이 생성된 시간별로 표시
C : 도스의 dir/w명령과 같 이 한줄에 여러개의 정보를 표시
R : 도스의 dir/s 명령과 같이 서브디렉토리 내용까지.

(예)
# ls -al  
# ls -aC
# ls -R

cd

디렉토리를 변경

# cd cgi-bin     : 하부 디렉토리인 cgi-bin으로 들어감.
# cd  ..             : 상위디렉토리로 이동
# cd 또는 cd ~  : 어느곳에서든지 자기 홈디렉토리로 바로 이동
# cd /webker     : 현재 작업중인 디렉토리의 하위나 상위 디렉토리가
                          아닌 다른 디렉토리(webker)로 이동하려면 /로
                          시작해서 경로이름을 입력하면 된다.

cp

화일 복사(copy)

# cp index.html index.old
     : index.html 화일을 index.old 란 이름으로 복사.

# cp /home/test/*.*  .
     : test 디렉토리내의 모든 화일을 현 디렉토리로 복사.

mv

파일이름(rename) / 위치(move)변경

# mv index.htm index.html
     : index.htm 화일을 index.html 로 이름 변경

$ mv file  ../main/new_file
     : 파일의 위치변경

mkdir

디렉토리 생성

# mkdir download  : download 디렉토리 생성

rm

화일삭제

# rm test.html : test.html 화일 삭제
# rm -r <디렉토리> : 디렉토리 전체를 삭제
# rm -i a.*
     : a로 시작하는 모든 파일을 일일이 삭제할 것인지 확인하면서 삭제 

rmdir

디렉토리 삭제

# rmdir cgi-bin : cgi-bin 디렉토리 삭제

pwd

현재의 디렉토리 경로를 보여주기

pico

리눅스용 에디터

put

ftp 상태에서 화일 업로드

> put  guestbook.tar.gz

get

ftp 상태에서 화일 다운로드

> get  guestbook.tar.gz

mput 또는 mget

여러개의 화일을 올리고 내릴때 (put,get과 사용법동일)

chmod

화일 permission 변경

리눅스에서는 각 화일과 디렉토리에 사용권한을 부여.

예) -rwxr-xr-x   guestbookt.html
rwx  :처음 3개 문자 = 사용자 자신의 사용 권한
r-x  :그다음 3개 문자 = 그룹 사용자의 사용 권한
r-x  :마지막 3개 문자 = 전체 사용자의 사용 권한

읽기(read)---------- 화일 읽기 권한
쓰기(write)---------- 화일 쓰기 권한
실행(execution)---------- 화일 실행 권한
없음(-)---------- 사용권한 없음

명령어 사용법
chmod [변경모드] [파일]

# chmod 666  guestbook.html
     : test.html 화일을 자신에게만 r,w,x 권한을 줌

# chmod 766  guestbook.html
     : 자신은 모든 권한을 그룹사용자와,전체사용자에게는
       읽기와 쓰기 권한만 줌

alias

" doskey alias" 와 비슷하게 이용할 수 있는 쉘 명령어 alias는 말그대로 별명입니다. 사용자는 alias를 이용하여 긴 유 닉스 명령어를 간단하게 줄여서 사용할 수도 있습니다.
이들 앨리어스는 [alias ls 'ls -al'] 같이 사용하시면 되는데, 한 번 지정한 alias를 계속해서 이용하시려면, 자신의 홈디렉토리에 있는
.cshrc(Hidden 속성)을 pico등의 에디터를 이용하여 변경시 키면 됩니다.

cat

파일의 내용을 화면에 출력하거나 파일을 만드는 명령( 도스의 TYPE명령)

# cat filename

more

cat 명령어는 실행을 시키면 한 화면을 넘기는 파일일 경우 그 내용을 모두 볼수가 없다. 하지만 more 명령어를 사용하면 한 화면 단위로 보여줄 수 있어 유용.

# more <옵션>
옵션은 다음과 같습니다.

Space bar : 다음 페이지
Return(enter) key : 다음 줄
v : vi 편집기로 전환
/str : str 문자를 찾음
b : 이전 페이지
q : more 상태를 빠져나감
h : 도움말
= : 현재 line number를 보여줌

who

현재 시스템에 login 하고 있는 사용자의 리스트를 보여줍니다.

# who

whereis

소스, 실행파일, 메뉴얼 등의 위치를 알려줍니다

# whereis perl : perl의 위치를 알려준다

vi,
touch,
cat

새로운 파일을 만드는 방법

# vi newfile :  vi 편집기 상태로 들어감
# touch newfile : 빈 파일만 생성됨
# cat > newfile  : vi 편집기 상태로 들어감, 문서 작성후 Ctrl+D로 빠져나옴

cat,
head,
tail

파일 내용만 보기

# cat filename         : 파일의 내용을 모두 보여줌
# head -n filename : n줄 만큼 위세서부터 보여줌
# tail -n filename     : n줄 만큼 아래에서부터 보여줌

 

   압축명령어 사용법

압축 명령어

사 용 법

tar .tar, _tar로 된 파일을 묶거나 풀때 사용하는 명령어
(압축파일이 아님)

# tar cvf [파일명(.tar, _tar)] 압축할 파일(또는 디렉토리): 묶을때
# tar xvf [파일명(.tar, _tar)]  :  풀 때
   (cf) cvfp/xvfp 로 하면 퍼미션 부동 
compress 확장자 .Z 형태의 압축파일 생성

# compress    [파일명]     : 압축시
# uncompress [파일명]    : 해제시
gzip 확장자  .gz, .z 형태의 압축파일 생성

#  gzip     [파일명]    : 압축시
#  gzip -d [파일명]   : 해제시
기타 .tar.Z
이것은 tar로 묶은 후에 compress를 사용하여 압축한 것으로 uncompress를 사용해서 압축을 푼 다음,
다시 tar를 사용해서 원래의 파일들을 만들어내면 됩니다.
아니면 다음과 같이 한 번에 풀 수도 있다.
# zcat  [파일명].tar.Z  : 해제시

.tar.gz또는 .tar.z
# gzip -cd [파일명]    : 해제시

.tar.gz 또는 .tar.z .tgz
gzip을 사용해서 푼 다음 다시 tar를 사용해서 원래 파일을 만들어 낼 수 있으나,
하지만 다음과 같이 하면 한 번에 처리를 할 수 있다.

# gzip -cd 파일.tar.gz | tar xvf -  또는
# tar xvzf 파일.tar.gz
# tar xvzf 파일.tgz

 

   리눅스 필수명령어

Linux/Unix 명령어

설 명

MS-DOS 비교

./x

x 프로그램 실행
(현재 디렉토리에 있는 것)

x

/

이전에(↑) / 다음에(↓) 입력했던 명령어

doskey

cd x (또는 cd /x)

디렉토리 X로 가기

cd

cd .. (또는 cd ../ 또는 cd /..)

한 디렉토리 위로 가기

cd..

x 다음 [tab] [tab]

x 로 시작하는 모든 명령어 보기

-

adduser

시스템에 사용자 추가

/

ls (또는 dir)

디렉토리 내부 보여주기

dir

cat

터미널 상의 텍스트 파일 보기

type

mv x y

파일 x를 파일 y로 바꾸거나 옮기기

move

cp x y

파일 x를 파일 y로 복사하기

copy

rm x

파일 지우기

del

mkdir x

디렉토리 만들기

md

rmdir x

디렉토리 지우기

rd

rm -r x

디렉토리 x를 지우고 하위도 다 지우기

deltree

rm p

패키지 지우기

-

df (또는 df x)

장치 x의 남은 공간 보여주기

chkdsk ?

top

메모리 상태 보여주기(q는 종료)

mem

man x

명령어 x에 관한 매뉴얼 페이지 얻기

/

less x

 텍스트 파일 x 보기
(리눅스에서는 더 많은 필터 적용 가능)

type x | more

echo

어떤 것을  echo 화면에 인쇄한다.

echo

mc

UNIX를 위한 노턴 커맨더

nc

mount

장치 연결(예: CD-ROM, 연결을 해제하려면 umount)

-

halt

시스템 종료

-

reboot ([ctrl] + [alt] +[del])

시스템  다시 시작하기

[ctrl] + [del] + [del]

    고급명령어

 고급 명령어

 

chmod <권한> <파일>

파일 권한(permissions) 변경

ls -l x

파일 x의 자세한 상황을 보여줌

ln -s x y

 x에서 y로 심볼릭 링크를 만들어 줌

find x -name y -print

디렉토리 x안에서 파일 y를 찾아서 화면에 그 결과를 보여줌

ps

지금 작동중인 모든 프로세스들을 보여줌

kill x

 프로세스 x를 종료 (x는 ps 명령으로 알 게 된 PID)

[alt] + F1 - F7

 터미널 1-7까지 바꾸기 (텍스트 터미널에서; F7은 X-윈도우(시작될때))

lilo

 부트 디스크를 만듦

 

용어

 

symlink

다른 파일이나 디렉토리로 심볼릭 링크. 윈도유98의 바로가기 같은 것

shell script

여러 명령어들을 차례로 수행하게 한 것. MS-DOS의 배치 파일 같은 것

     팁!!

 - 웹에서 생성한 노바디파일 삭제 하는방법..

기본적으로 웹서버는 nobody 권한으로 동작이 되게 됩니다.
고객님께서 FTP 로 접속하여 전송한 파일이 아니라 웹상에서 사용자들이 파일을 업로드 한 경우나 웹상에서 생성된 파일의 경우 삭제가 되지 않는 경우가 있을 수 있습니다.

웹서버의 동작 권한은 nobody 이고 웹상에서 생성된 파일이므로 해당 파일이 nobody 소유권으로 시스템에 생성이 되게 됩니다.

아래와 같이 웹상에서 실행시키면 됩니다.

1. 메모장을 열어 아래 소스를 붙여넣기 하신후..

<?

//폴더/파일 삭제시

$cmd = `rm -rf 노버디로된파일혹은폴더명`;

echo "$cmd";

echo "폴더가 삭제 되었습니다.";

?>

-- 위에까지..
-- **위에서 수정할 사항은 "노버디로된파일혹은폴더명"을 삭제하시고자 하는 파일명으로 바꿔주세요..

2. 파일 -> 다른이름으로저장 -> 아래 탭에서 파일형식을 "모든파일"로 선택후

   -> "원하는파일명.php" 로 저장 (ex: del.php)

3. ftp를 통해 고객계정에 파일업로드를 하시고 웹에서 파일을 불러주시면 됩니다

   ex: html폴더안에/temp 안에 삭제하고자하는 파일이 있을경우 / html폴더/temp안에 del.php를 업로드하고..

       브라우저에서 http://고객도메인/temp/del.php 를 하면 됩니다

4. 실행하시면 삭제되고 nobody 권한의 폴더만 남습니다.(폴더안의화일들만 지워짐)

   그후 ftp 접속후 폴더를 삭제하시면 됩니다.

ex)

<?

퍼미션 변경시

$cmd = `chmod -R 777 노버디로된파일혹은폴더명`;

echo "$cmd";

echo "퍼미션 변경되었습니다.";

?>


소개
아파치를 중단하고 재시작하려면 실행하고 있는 httpd 프로세스에 시그널을 보내야 한다. 시그널을 보내는 방법은 두가지다. 하나는 유닉스 kill 명령어를 사용하여 프로세스에 직접 시그널을 보내는 방법이다. 시스템에 많은 httpd가 실행되지만, PidFile에 pid가 기록된 부모외에 다른 프로세스에 시그널(signal)을 보내면 안된다. 즉, 부모이외에 다른 프로세스에 시그널을 보낼 필요가 없다는 말이다. 부모에게 보낼 수 있는 시그널은 세가지로, 이제 설명할 TERM, HUP, USR1이다.

다음과 같이 부모에게 시그널을 보낸다:

kill -TERM `cat /usr/local/apache2/logs/httpd.pid`

httpd 프로세스에게 시그널을 보내는 다른 방법은 명령행 옵션 -k를 사용하는 것이다. 아래서 설명할 stop, restart, graceful은 httpd 실행파일의 아규먼트들이다. 그러나 이 아규먼트들로 httpd를 실행하는, apachectl 스크립트를 사용하길 권한다.

httpd에 시그널을 보낸후, 다음 명령어로 진행상황을 알 수 있다:

tail -f /usr/local/apache2/logs/error_log

위 예를 당신의 ServerRoot와 PidFile 설정에 알맞게 수정하라.


당장 중단
시그널: TERM
apachectl -k stop
TERM이나 stop 시그널을 부모에게 보내면 즉시 모든 자식을 죽인다. 자식을 완전히 죽이는데는 몇 초가 걸릴 수 있다. 그런후 부모가 종료한다. 처리중인 요청은 중단되고, 더 이상 요청을 받지않는다.


점잖은 재시작
시그널: USR1
apachectl -k graceful
USR1이나 graceful 시그널을 부모에게 보내면 부모 프로세스는 자식들에게 현재 요청을 처리한후 종료하라고 (혹은 현재 아무것도 처리하지 않다면 즉시 종료하라고) 조언한다. 부모는 설정파일을 다시읽고 로그파일도 다시 연다. 자식이 죽을때마다 부모는 죽은 자식대신 새로운 설정 세대에 기초한 자식을 실행하여 즉시 요청을 처리하게 한다.

점잖은 재시작(graceful restart)으로 USR1을 사용할 수 없는 플래폼에서는 대신 (WINCH와 같은) 다른 시그널을 사용할 수 있다. apachectl graceful은 플래폼에 알맞은 시그널을 보낸다.
점잖은 재시작은 항상 MPM의 프로세스 조절 지시어 설정을 고려하여, 재시작동안 클라이언트를 서비스하는 프로세스나 쓰레드가 적당한 수를 유지하도록 설계되었다. 게다가 StartServers는, 일초 후 최소한 StartServers만큼 새로운 자식이 안만들어지면 자식이 StartServers 개가 되도록 새로 만든다. 즉, 프로그램은 서버의 현재 부하에 알맞은 자식의 개수를 유지하며, StartServers 파라미터로 지정한 당신의 기대를 존중한다.

mod_status 사용자는 USR1을 받을때 서버 통계가 0이 되지 않음을 봤을 것이다. 서버는 새로운 요청을 (운영체제는 이들을 큐에 담아서 어떤 경우에도 잃어버리지 않는다) 처리하지 못하는 시간을 최소화하고 당신의 튜닝 파라미터를 존중하도록 만들어졌다. 이를 위해 세대간 모든 자식을 기록하는 scoreboard를 유지한다.

status 모듈은 또한 점잖은 재시작 전에 시작하여 아직도 요청을 처리하고 있는 자식을 G로 알려준다.

현재로는 USR1을 사용하는 로그순환 스크립트가 재시작전에 모든 자식이 로그작성을 마쳤는지 알 수 있는 방법이 없다. 우리는 USR1 시그널을 보내고 적당한 시간이 지난후 이전 로그를 다루도록 제안한다. 예를 들어 낮은 대역폭 사용자의 경우 접속 대부분이 마치는데 10분이 안걸린다면, 이전 로그를 다루기전에 15분 기다린다.

설정파일에 오류가 있다면 재시작시 부모는 재시작하지 않고 오류를 내며 종료한다. 또, 점잖은 재시작의 경우 종료할때 자식이 실행되도록 놔둔다. (자식들은 자신의 마지막 요청을 처리하고 "점잖게 종료한다".) 이는 서버를 재시작할때 문제가 된다. 서버는 자신이 기다릴 포트에 연결하지 못한다. 재시작전에 -t 명령행 옵션(httpd 참고)으로 설정파일 문법을 검사할 수 있다. 그러나 이런 검사도 서버가 올바로 재시작할지를 보장하지 못한다. 설정파일의 문법이 아닌 의미를 검사하려면 root가 아닌 사용자로 httpd를 시작해볼 수 있다. root가 아니기때문에 (아니면 현재 그 포트를 사용하는 httpd가 실행되기때문에) 오류가 없다면 소켓과 로그파일을 열려고 시도하는 과정에서 실패할 것이다. 다른 이유때문에 실패한다면 아마도 설정파일에 오류가 있을 것이다. 점잖은 재시작을 하기전에 오류를 고쳐야한다.

당장 재시작
시그널: HUP
apachectl -k restart
HUP이나 restart 시그널을 부모에게 보내면 TERM과 같이 모든 자식을 죽이지만 부모는 종료하지 않는다. 부모는 설정파일을 다시읽고 로그파일을 다시 연다. 그리고 새로운 자식들을 만들고 서비스를 계속한다.

mod_status 사용자는 HUP를 보내면 서버 통계가 0이 됨을 알 수 있다.

설정파일에 오류가 있다면 재시작을 해도 부모는 재시작하지 않고 오류를 내며 종료할 것이다. 이를 피하는 방법은 위를 참고하라.

부록: 시그널과 레이스 컨디션
Apache 1.2b9 이전에는 재시작과 종료 시그널에 관계된 레이스 컨디션(race condition)이 있었다. (레이스 컨디션은 간단한 설명하자면, 어떤 일이 잘못된때 일어나서 기대한대로 동작하지 않는 시간에 민감한 문제다.) "올바른" 기능이 있는 아키텍쳐에서 우리는 이런 문제를 최대한 해결했다. 그러나 어떤 아키텍쳐에는 아직도 레이스 컨디션이 존재함을 주의하라.

ScoreBoardFile을 디스크에 저장하는 아키텍쳐는 scoreboard를 망가트릴 가능성이 있다. 그러면 (HUP후) "bind: Address already in use" 혹은 (USR1 후) "long lost child came home!"이 발생할 수 있다. 전자는 심각한 오류이고, 후자는 단지 서버가 scoreboard slot을 잃게 만든다. 그래서 강제 재시작을 줄이고 점잖은 재시작을 사용하길 추천한다. 이 문제는 해결하기 매우 힘들다. 그러나 다행히도 대부분의 아키텍쳐는 scoreboard로 파일을 사용하지 않는다. 파일을 사용하는 아키텍쳐라면 ScoreBoardFile 문서를 참고하라.

모든 아키텍쳐에는 지속되는 HTTP 연결 (KeepAlive)에서 두번째 이후 요청을 처리하는 자식에 약간의 레이스 컨디션이 있다. 자식은 요청줄을 읽은 후 요청 헤더를 읽기전에 종료할 수 있다. 이 문제는 너무 늦게 발견하여 1.2 버전이 나온후에야 수정되었다. 그러나 네트웍 지연이나 서버 시간제한때문에 KeepAlive 클라이언트는 이런 경우를 예상해야하기 때문에 이론상 문제는 안된다. 실제로 서버를 검사하기위해 일초에 20번 재시작하는 동안 클라이언트가 깨진 그림이나 빈 문서없이 사이트를 성공적으로 읽어들이길 기대하지 않는다면 문제가 안된다.


 

가끔 접속자가 많은 서버를 운영하다 보면 갑자기 웹 접속이 되지 않거나 접속이 너무 느려
아파치 데몬 개수를 확인해 보면 httpd가 256개나 떠 있는 경우가 있다.

그럼 먼저 웹서버가 갑자기 느려질 경우를 보자.
기본적으로 아파치 웹 서버의 경우 Max Clients가 256으로 설정되어 있어 동시에
256개의 데몬이 뜨게 되면 더 이상의 접속을 받아들이지 않고, 기존의 프로세스가
죽을 때까지 대기한 후 접속이 끊기게 되면 그제서야 접속을 받아들이게 된다.

따라서 동시 접속이 많은 경우에는 이전의 웹 접속이 끊길 때까지 대기해야 하므로 접속 속도가
느린 것처럼 느끼게 되는 것이다. 아래의 명령으로 동시접속을 체크 해보자

# netstat -anp | grep :80 | grep ESTAB | wc -l

또, 일반적으로 정상적인 접속의 경우에 256개의 프로세스가 모두 뜨는 경우는 그리 많지 않기에
현재의 상태가 비정상적인 접속인지 여부를 판단해야 한다.
이를 판단할 수 있는 방법은

# netstat -na | grep ES

ESTABLISHED된 연결 상태를 확인하여 클라이언트의 IP가 정상적인 연결인지 여부를 확인하면 된다. 또는

# netstat -na | grep ES | awk '{print $5}' | sort

클라이언트의 IP만 따로 확인해 봐도 된다.

통상적으로 HTTP 1.1 규약에서부터 적용되기 시작한 KeepAlive 기능을 지정하였을 경우
한 클라이언트 IP에서 동시에 3~5개 정도의 ttp 프로세스를 생성하므로 한 IP에서 3~5개 정도의
프로세스를 생성하는 것은 정상적인 현상이다. 그렇지 않고 여러개의 프로세스가 떠 있다면
비정상적인 접속 또는 부하를 일으키는 원인을 찾아봐야 할 것이다.

일단 top 명령을 이용하여 CPU 점유를 많이 하고 있는 프로세스들을 찾아야 할 것이다

# top -d 2

또는 잘못 짜여진 cgi 프로그램으로 인하여 시스템의 메모리를 몽땅 소비하는 프로그램이
실행 되고 있는지 살펴봐야 한다.

그리고 웹집이나 텔레포드 등의 로봇들이 접근하면 시스템은 현저하게 느려질 것 이다.
이러한 점들도 대비하여야 한다. 또한 스트리밍 서비스로 인한 부하도 점검해봐야 할 것 이다.

이번에는 웹서버가 정지되는 경우를 살펴보자.
MaxClient 에 걸려 서버가 정지되는 경우가 발생 할 수 있다.
참고로 엊그제 새벽에 한참 맛있게(?) 자고 잇는데 이런 경우를 당했다 ㅡㅡ;

MaxClient 수치는 아파치 소스코드에서 초기 설정값이 설정되어 있기 때문에 아무리 수치를 올려
설정을 하여도 아파치 웹서버는 동시에 httpd 데몬은 256개 이상 생성할 수 없다.
동시에 256개의 데몬이 뜨게 되면 더 이상의 접속을 받아들이지 않고, 기존의 프로세스가
죽을 때까지 대기한 후 접속이 끊기게 되면 그제서야 접속을 받아들이게 된다.

그럼 어떻게 해야 할 것인가?

일단은 아파치 세팅 시 Max Client 수치를 올리도록 소스코드를 수정하면 된다.
아파치 소스를 보면 src/include 안에 httpd.h 라는 헤더파일이 있는데 HARD_SERVER_LIMIT
값이 256으로 정의되어 있다.

#ifndef HARD_SERVER_LIMIT
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#elif defined(NETWARE)
#define HARD_SERVER_LIMIT 2048
#else
#define HARD_SERVER_LIMIT 256
#endif
#endif

윈도우는 1024 넷웨어는 2048 기타는 256으로 설정이 되어있는것을 볼 수 있다. 리눅스는 기타에 속한다..ㅋㅋㅋ
그럼 256의 수치를 변경한 다음 컴파일 하면 된다. 이것은 수치는 시스템 사양에 따른 적절한
조절이 필요하다. 되도록 4의 배수로 수치를 조정하길 바란다.

일단 셋팅을 이렇게 하였다면 적어도 Max Clients 에 걸려 웹서버가 정지당하는 일은 없을것이다.
하지만 그냥 귀차니즘으로 인하거나 서버사양이 좋지 않아 디폴트로 셋팅하였다면
아파치 설정파일에서 소한의 설정을 하여야 한다.

이는 웹서버가 느려지는 것과 다운되는 것에 대한 최소한의 노력이라고 생각하면 된다.

일단 Timeout 값의 수치를 변경하자.
이 값은 클라이언트에서 서버에 연결하엿을때 클라이언트와 서버간에 아무런 메세지가 발생하지
않았을 때 오류로 처리할 시간을 설정한 값이다.
보통 300으로 설정되어있다. 만약 네트워크 속도가 느리다면 수치를 조금 올려서 설정하는 것이 좋다.

다음은 MaxKeepAliveRequests 의 값을 수정하여야 한다.
이 값의 의미는 연결을 유지한체로 허용할 수 있는 최대 요구수를 나타낸다.
이 값이 0 이라면 제한하지 않는다는 의미가 되고 일반적으로 이 수치는 높게 설정하는 것이 좋다.

다음 KeepAliveTimeout 의 수치를 변경하자. 이 값은 동일한 방문자가 동일한 연결을 유지한 채로 다음
요청을 할 때 까지 연결을 유지한 채로 기다리는 시간을 허용하는 시간을 의미한다.
따라서 접속자가 많다면 클라이언트에서 설정시간내에 요청을 하지 않으면 연결을 끊음으로서 요청시
생성되었던 데몬을 Kill 할 수 있다.

이정도로 웹서버의 성능을 튜닝하엿다.
나머지 무한한 추가적인 기능은 각자 상황에 맞게 설정 할 수 있을것이다.

훈련 시스템에 접속하기 위한 아이디와 패스워드는 아래와 같습니다.
Question 52
> 훈련 시스템 접속 주소 : 211.241.82.54
> 해당 아이디(ID) : level52
> 해당 패스워드(PW) : passwd=52


IT 업체인 W사는 솔라리스 서버를 이용하여 사용자들의 홈페이지를 제작해주는
업체를 경영하였다. 1년 정도의 시간이 지나자 많은 사용자들이 서버에 입주했고
입주 업무가 폭주하다 보니 별도의 상담 업무만을 전담하는 직원을 두게 되었다.
상담원 이씨에게 사용자들의 id 개설 업무를 주었는데 팀장 황씨는 시스템의
다른 권한은 주고 싶지 않았다.
이에 대한 접근제어 역할을 제공하는 도구를 찾던 중 sudo라는 도구가 훌륭히 역할을
수행 할 수 있다는 것을 알았다.
sudo를 이용하여 상담자 이씨(id: user_admin)에게 useradd 명령어에 대한 권한을
주도록 설정하라.

SUDO
사용목적 : 관리자(root)가 특정 사용자(특정 그룹)에게 특정 명령(명령그룹)을 root계정으로 실행할 수 있는 권한부여

* 구성파일 : /etc/sudoers
1. 유저, 호스트, 커멘드를 정의 가능.
2. 유저, 호스트, 커멘드의 엘리어스도 지정 가능
3. 구조
user host=commads
user : 로그인 id나 엘리어스 네임
host : hostname, 엘리어스 호스트네임
commads : 콤마로 구분되어지는 명령어 리스트 

더 자세한 내용은 관련자료를 참고 

사용법을 간단히 알아보자.  

# rpm -q sudo 를 실행하여 sudo가 설치되어 있는지 확인하자.
# vi /etc/sudoers 설정파일을 열어서
root ALL=(ALL) ALL
bob ALL=/usr/local/resin/bin/httpd.sh, /usr/local/apache/bin/apachectl  

일반 계정자 bob에게 resin의 httpd.sh명령과 apachectl명령 권한을 허용한 예이다. 
이제 일반계정 bob으로 위의 명령을 실행하려면

# su bob
$ sudo /usr/local/apache/bin/apachectl restart

이때 password를 물어보면 bob의 password를 입력하면 root권한으로 실행이 된다. 

풀이방법 
vi /etc/sudoers       ->sudoers파일 편집
user_admin      ALL=/usr/sbin/useradd      -> user_admin 에게 /usr/sbin/useradd 권한 설정
[출처] sudo를 이용한 특정사용자에게 특정 명령어에 대한 권한 부여 |작성자 오팔