날짜별 글 목록: 2014년 7월 7일

[리눅스] 시그널 종류와 발생 및 용도

리눅스에서 시그널함수에 void(*signal(int signo, void (*func)(int)))(int);

들어가는 첫번째 인자값  int signo 의번호, 시그널 이름, 발생 원인, 용도, 디폴트 action, 리눅스 버전 등을 좀 알려주세요

제가아는 정도는 밑에 있는 표정도 입니다.

번호 시그널 이름 발생 및 용도 디폴트 action 리눅스 버전
1 SIGHUP(HUP)  hangup 시그널; 전화선 끊어짐 종료 POSIX
2 SIGINT(INT)  interrupt 시그널; Ctrl + c ;실행을중지 종료 ANSI
3 SIGQUIT(QUIT)  quit 시그널;  Ctrl + \ 종료(코어덤프) POSIX
4 SIGILL(ILL)  잘못된 명령    ANSI
5 SIGTRAP(TRAP)  트렙 추적    POSIX
6 SIGIOT(IOT)  IOT 명령    4.2 BSD
7 SIGBUS(BUS)  버스 에러    4.2 BSD
8 SIGFPE(FPE)  부동 소수점 에러 종료 ANSI
9 SIGKILL(KILL)  무조건적으로 즉시 중지한다. 종료 POSIX
10 SIGUSR1(USR1)  사용자 정의 시그널1  종료 POSIX
11 SIGSEGV(SEGV)  세그멘테이션 위반    ANSI
12 SIGUSR2(USR2)  사용자 정의 시그널2  종료 POSIX
13 SIGPIPE(PIPE)  읽으려는 프로세스가 없는데 파이프에 쓰려고 함 종료 POSIX
14 SIGALRM(ALRM)  경보(alarm) 시그널; alarm(n)에 의해 n초 후 생성됨 종료 POSIX
15 SIGTERM(TERM)  일반적으로 kill 시그널이 전송되기 전에 전송된다. 잡히는 시그널이기 때문에 종료되는 것을 트랙할 수 있다.  종료 ANSI
16 SIGTKFLT  코프로세서 스택 실패     
17 SIGCHLD(CHLD)  프로세스 종료시 그 부모 프로세스에게 보내지는 시그널 무시 POSIX
18 SIGCONT(CONT)  STOP 시그널 이후 계속 진행할 때 사용. ; 정지 되지 않은 경우 무시됨   POSIX
19 SIGSTOP(STOP)  정지 시그널; SIGSTP과 같으나 잡거나 무시할 수 없음 프로세스 정지 POSIX
20 SIGTSTP(TSTP)  키보드에 의해 발생하는 시그널로 Ctrl+Z로 생성된다. ; 터미널 정지 문자 프로세스 정지 POSIX
21 SIGTTIN  백그라운드에서의 제어터미널 읽기  프로세스 정지 POSIX
22 SIGTTOU  백그라운드에서의 제어터미널 쓰기  프로세스 정지 POSIX
23 SIGURG  소켓에서의 긴급한 상태    4.2 BSD
24 SIGXCPU  CPU 시간 제한 초과 setrlimit(2) 메뉴얼 패이지 참조    4.2 BSD
25 SIGXFSZ  파일 크기제한 초과 setrlimit(2) 메뉴얼 패이지 참조    4.2 BSD
26 SIGVTALRM  가상 시간 경고 setitimer(2) 메뉴얼 패이지 참조    4.2 BSD
27 SIGPROF  프로파일링 타이머 경고. setitimer(2) 메뉴얼 페이지 참조    4.2 BSD
28 SIGWINCH  윈도우 사이즈 변경    4.3 BSD, Sun
29 SIGIO  기술자에서 입출력이 가능함. fcntl(2) 메뉴얼 참조    4.2 BSD
30 SIGPWR  전원 실패    System V
31 UNUSED  사용 안함 

   


출처 : http://www.superuser.co.kr/superuserboard/view.html?id=16602&code=linux&start=200&position=

◈ SIGHUP
– 터미널 인터페이스에 의해 연결의 단절이 감지되면 해당 제어 터미널과 연결된 제어 프로세스(세션 리더)에게 전달
– 세션 리더가 종료했을 때도 발생하는데 이때는 foreground 프로세스 그룹내의 모든 프로세스들에게 전달
– SIGHUP 시그널은 원래 모뎀 연결 끊김 등의 시리얼 라인이 끊어지면 발생하는 시그널이다.
– 이름 있는 시스템 데몬들은 SIGHUP 시그널을 configure file을 다시 읽어들이는 등의 초기화 신호로 해석한다.
  . bootp(8), gated(8), inetd(8), mountd(8), named(8), nfsd(8), ypbind(8)
  . pppd(8) 처럼 SIGHUP을 원래의 의도에 충실하게 세션 종료의 뜻으로 받아들이는 사례도 간혹 있는데, 요새는 보편적으로 이 역할을 SIGTERM이 맡는다.
  . daemon은 제어 단말기 없이 돌기 때문에 kernel로부터 SIGHUP 신호를 수신하지 못한다.
    그러므로 많은 daemon은 이 신호를 daemon의 구성 파일이 변경되어 daemon이 그 파일을 새로 읽어야 된다는 것을 알려주는 관리자로부터의 통지로 사용한다.
  . daemon이 수신할 수 없는 다른 두 개의 신호로 SIGINT와 SIGWINCH가 있고 이들도 역시 어떤 변화를 daemon에게 통지하기 위해 사용될 수 있다.

◈ SIGINT
– 인터럽트 키 (DELETE 또는 Control-C)가 눌렸을 때 발생

◈ SIGQUIT
– Control-backslash 에 의해 발생

◈ SIGCHLD
– 프로세스가 종료하거나 정지하면, 부모 프로세스에게 전달된다.
– 부모 프로세스는 wait() 시스템 콜을 사용하여 무슨 일이 일어났는지 알아본다.
– 이 시그널에 대한 default 처리는 무시하는 것이다. 즉 프로세스가 이 신호를 받으려고 할 때만 전달된다.

◈ SIGSEGV
– 유효하지 않은 가상 메모리 주소를 참조하거나 사용 권한이 없는 메모리에 접근할 때 프로세스로 전달된다.

◈ SIGTERM
– kill 명령에 의해 기본적으로 발생

◈ SIGKILL
 “극단의 조치(extreme prejudice)”로 프로그램을 종료하는 데 사용된다.
– 시그널 catch 하거나 무시할 수 없다.

◈ SIGALRM
 alarm()이나 setitimer() 시스템 콜로 설정한 알람 시간이 초과 했을 때 프로세스로 전달된다.

◈ SIGTSTP
 
Control-Z 키에 의해 발생
– 기본 처리 방법은 SIGCONT 신호를 받을 때까지 프로세스를 중단한다.

◈ SIGCONT
 정지한 프로세스를 계속 실행시키려 할 때 발생
– 이 신호는 받을 수 있지만 블록하거나 무시할 수 없다.
– 기본 처리 방법은 중단된 프로세스를 재시작하는 것이다. 그러나 프로세스가 신호를 받지 않는다면 신호를 버린다.
– vi 에디터를 사용할 때
. Control-Z 를 눌러 수행을 잠시 정지시키면 쉘이 키 입력을 처리하게 되는데
. 이때 fg 명령을 실행시키면 쉘은 vi 에게 SIGCONT 시그널을 전달하며
. vi는 이 시그널에 대한 처리로 화면을 다시 그리고 사용자 키 입력을 받는 상태로 돌아간다.

◈ SIGSTOP
 
SIGTSTP과 동일하나 catch 하거나 무시할 수 없다.
– 이 신호를 받으면 무조건 SIGCONT 신호를 받을 때까지 프로세스를 중단한다.

◈ SIGABRT
 abort() 함수의 호출로 발생

◈ SIGBUS
 하드웨어 결함으로 발생

◈ SIGEMT
 하드웨어 결함으로 발생

SIGFPE
 divide-by-0나 부동 소숫점 오버플로우와 같은 산술 연산 오류에서 발생

◈ SIGILL

◈ SIGINFO

◈ SIGIO

◈ SIGIOT

◈ SIGPIPE
 pipe 통신에서 수신 프로세스가 종료했을 때 송신 프로세스가 파이프에 write 하면 발생
– 프로세스가 RST를 받은 소켓에 데이터를 쓰면, 커널은 그 프로세스에 ISGPIPE 신호를 보낸다.
– 이 신호의 기본 동작은 프로세스를 종료시키는 것이므로, 프로세스가 원하지 않는 종료를 피하기 위해서는 이 신호를 포착해야 한다.

◈ SIGPOLL

◈ SIGROF

◈ SIGPWR

◈ SIGSYS

◈ SIGTTIN
 background에 있는 프로세스가 제어 터미널로부터의 읽기를 시도한다.

◈ SIGTTOU
 background에 있는 프로세스가 제어 터미널로부터의 쓰기를 시도한다.

◈ SIGURG
 SIGIO와 SIGURG 라는 두 개의 신호는 소켓이 F_SETOWN 명령으로 소유주에게 할당되었을 때만 소켓에 대해 발생한다.

◈ SIGUSR1

◈ SIGUSR2

◈ SIGVTALRM

◈ SIGWINCH

◈ SIGXCPU

◈ SIGXFSZ

 

ssh 세션 지속 시간 설정

ssh로 원격의 서버에 접속했을때 idle 상태가 오래 지속되면

접속이 자동으로 끊어진다 이때, ssh 가 주기적으로 서버측에 초 단위로 신호를

보내주어 idle 상태를 없도록 한다.

 

redhat 계열 에서는 아래와 같이

/etc/ssh/ssh_config 파일을 열어 ServerAliveInterval 300 라인을 추가한다

Null Session이란? Network

 ■ Null Session이란?

 

도메인으로 구축된 네트워크에서 Windows2000/XP가 설치된 컴퓨터에 접속하기 위해서는 User名과 패스워드를 통한 인증과정을 거쳐야 한다. 하지만 이 Null Session은 말 그대로 User名과 패스워드 없이 로그인 가능하게 해버린다.

Null Session이란 Windows가 설치된 네트워크의 다른 원격 컴퓨터에 User名과 패스워드를 NULL로 해서 접속할 수 있게 해주는 것을 의미한다.

Null Session은 DOS창에서 다음과 같이 입력하면 다른 원격 컴퓨터에 접속할 수 있게 해준다. 이 명령어를 NULL Command라고 한다.

 

C:\> net use \\[IP주소]\IPC$“” /user:””

[보충]net use로 공유폴더에 액세스하기 위해서는 아래 명령이 사용된다.

 

C:\> net use \\[IP주소]\[폴더명] [패스워드] /user:[User名]

*는 패스워드를 입력하지 않기 위한 옵션이다.

 

[보충]UNIX에서도 단지 TCP접속만을 한 상태로 어떤 요청도 데이터도 전송하지 않는 Session을 Null Session이라고 하지만 여기서는 Windows머신에 대한 연결에 한정해서 Null Session을 다루고 있음에 주의하자.

Null Session접속을 방지하기 위해서는 아래 명령을 사용한다.

 

C:\> net use /delete \\[IP주소]\IPC$
■ Null Session으로 연결되면?

 

Null Session으로 연결되면 공격자는 시스템의 User名, 공유정보 등을 열람할 수 있게 되고 심지어 레지스트리 HKEY_LOCAL_MACHINE의 일부에도 접근할 수가 있게 된다.
■ Null Session을 통한 레지스트리 접근

 

1:Target 컴퓨터에 Null Session으로 연결한다.
2:레지스트리 편집기를 실행시킨다.

> regedit
■ Null Session접속을 방지하기 위한 로컬 컴퓨터 설정

 

○절차1

1:시작>프로그램>관리툴(or 제어판 > 관리도구)>로컬 보안 정책(Local Security Policy)
2:보안(Security)설정>로컬 정책(Local Policy)>보안 옵션(Security Option)
3:「익명접속 추가를 제한한다.」를 더블클릭한다.
4:「로컬정책(Local Policy) 설정」란에서 「명시적 익명접속 권한이 없는 경우 접속을 허락하지 않는다.」를 선택한다.

[보충]Null Session을 막게되면 일부의 ThirdParty제품들의 서비스가 동작하지 않을 수 있다.

 

○절차2

1:시작>프로그램>관리툴>로컬 보안정책
2:로컬 보안(Local Security) 설정>로컬 정책(Local Policy)>보안 옵션(Security Option)
3:「네트워크 접속:SAM계정의 익명 열거를 허락하지 않는다.」를 활성화 한다.
4:「네트워크 접속:SAM계정 및 공유의 익명 열거를 허락하지 않는다.」를 활성화 한다.

 

○절차3

1:레지스트리 편집기를 실행시킨다.
2:아래와 같이 레지스트리를 수정한다.

key :「HEKY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa」,
name :「restrictanonymous」,
type/value : 「REG_DWORD=1」

로 수정한다.

긁어온곳 : http://blog.naver.com/dusttin?Redirect=Log&logNo=16429353

[NETWORK]-랜카드 제어 NETSH

랜카드 이름이 “Local Area Connection” 인 것을 “eth0″로 변경하기

 

랜카드 이름이 너무 길어서, 외우기 힘드니까, 이것을 LINUX같이 (eth0, eth1…) 짧게 만들어 봅시다.

netsh interface set interface name=” Local Area Connection” newname=”eth0″

이렇게 하면, Local Area Connection 이던 랜카드 이름이 eth0으로 변경됩니다.

 

랜카드의 IP설정 상태 보기

 

netsh interface ip show config

를 입력하면 랜카드에 설정된 IP정보를 보여줍니다.

ipconfig랑 아주 비슷하네요.

 

c0066466_4b1c612e6c40c

 

 

DHCP사용 여부, IP, MASK, Gateway IP,DNS Server, WINDS Server 정보등을 볼 수 있습니다.

 

랜카드의 IP 변경하기

eth0“라는 이름을 가진 랜카드의 IP를 192.168.0.10으로 변경해 보겠습니다.

 

netsh interface ip set address ” eth0″ static 192.168.0.10 255.255.255.0 192.168.0.254

 

또는

Netsh interface ip set address
name=”eth0″ source=static addr=192.168.0.10 mask=255.255.255.0 gateway=192.168.0.1 gwmetric=1

으로도 세팅할 수 있습니다.

 

이렇게 하면 랜카드 “eth0“이란 이름을 가진 랜카드를 IP 192.168.0.10, Subnet MASK 255.255.255.0, Gateway IP 192.168.0.254로

설정되는 것입니다.

 

랜카드의 IP를 DHCP로 부터 할당 받기

 

eth0“라는 이름을 가진 랜카드의 IP를 DHCP서버에서 할당 받도록 설정해보겠습니다.

간단합니다.

 

netsh interface ip set address “eth0” dhcp

또는

netsh interface ip set address name=”eth0″ source=dhcp

 

이렇게 하면, eth0 랜카드의 IP가 dhcp서버에서 할당 받게 되는 것입니다.

 

랜카드의 DNS 주소를 DHCP로 부터 할당 받기

eth0“라는 이름을 가진 랜카드의 DNS 주소를 DHCP서버에서 할당 받도록 설정해보겠습니다.

간단합니다.

 

netsh interface ip set dns “eth0” dhcp

 

이렇게 하면, eth0 랜카드의 DNS IP가 dhcp서버에서 할당 받게 되는 것입니다.

 

랜카드의 WINS 서버 주소 할당하기

 

netsh interface ip set wins “eth0” static 192.168.100.3

 

랜카드의 WINS 서버 주소를 DHCP Server에게서 할당받기.

 

netsh interface ip set wins “eth0” dhcp

 

현재 랜카드 정보를 파일로 저장하기

 

netsh interface dump >mycfg.txt

 

파일로 저장해 놓은 랜카드 정보 복구하기

 

netsh exec mycfg.txt