HP-UX

일반사용자가 root 권한으로 프로그램 실행

 
JoonTae Park
비정기 조언자

일반사용자가 root 권한으로 프로그램 실행

OS : HPUX 11.00



root 패스워드를 알지 못하는 상태에서 일반 유저로 로그인하여 다른 사용자의 프로세스를 종료시키거나, login disabled 또는 expired 해제 등을 root의 권한으로 처리하려고 합니다.

(아래의 설명이 복잡하여, 이해하기 어렵다면, 위의 기능을 구현할 수 있는 일반적인 방법이라도 알려주시기 바랍니다.)



위의 기능을 수행할 shell script는 작성이 다 되었는데,

문제는 root 권한을 획득하기 위해 su 명령을 실해할때 root 패스워드를 입력하지 않고는 진행할 수 없습니다.



다른 서버에서 사용하고 있는 방법을 모방하여, 같은 서비스를 구현하고자 하는데, 그쪽에서 소스를 오픈할 수 없다고 하여, 비슷하게 유추하여 거의 완성했는데, root권한 획득에서 막힙니다.



처리과정은 다음과 같습니다.



1. login as user 'oprusr'

2. 'opr_menu' 실행

3. opr_menu는 su root -c "PATH=$PATH; export PATH; /admin/bin/opr_scrip"를 실행합니다.

4. 'opr_scrip'가 실제 작업을 하도록 하는 명령어입니다.



아래의 내용은 실제 사용되고 있는 서버에서 파일과 프로세스의 상태입니다.



$ ll opr_menu opr_scrip

-rws---r-x+ 1 root sys 20480 May 14 15:13 opr_menu

-rwx---r-x+ 1 root sys 17911 May 14 15:17 opr_scrip

두개의 파일은 strings 명령어로만 내용을 확인할 수 있습니다.

mod로 짐작컨데, file execution 설정 및 chacl을 사용하여, 지정된 사용자만 실행할 수 있도록 해 놓았습니다.



$ ps -ef|grep pts/tP

       root 1714 758 0 17:09:49 pts/tP 0:00 telnetd

  oprusr 1789 1714 0 17:09:50 pts/tP 0:00 -ksh

  oprusr 1940 1789 0 17:09:59 pts/tP 0:00 -ksh

       root 1943 1940 0 17:09:59 pts/tP 0:00 /admin/bin/opr_menu

       root 1945 1943 0 17:09:59 pts/tP 0:00 sh -c su root -c "PATH=$PATH; export PATH; /admin/bin/opr_scrip"

       root 1946 1945 0 17:09:59 pts/tP 0:00 sh -c PATH=/usr/bin:/usr/ccs/bin:/usr/contrib/bin:/opt/hparray

       root 1947 1946 0 17:09:59 pts/tP 00:00 /usr/bin/ksh /admin/bin/opr_scrip



su root -c "PATH=$PATH; export PATH; /admin/bin/opr_scrip"

이부분이 문제입니다. 이 구문이 실행되면, root 패스워드를 입력하라고 합니다.

사용중인 서버에선 root 패스워드 입력 필요없이 실행이 되는데...

어떤 설정으로 이런 것이 가능한지 궁금합니다.

도와주세요~~



제 설명이 부족하거나... 아시는 것이 있으면, 아무 말씀이라도 도움을 주시면 감사하겠습니다. ^^
3 응답 3
고광태
중학생

일반사용자가 root 권한으로 프로그램 실행

sticky bit 를 사용해서 하면 될듯한데요..



즉 일반유저가 실행파일에 대해서 실행될동안에 root 권한을 얻는방식으로 말입니다.



아래의 내용은 참조하세요..



SUBJECT: Sticky Bit에 대해



DESCRIPTION:

1. Sticky bit의 의미

* 전통적 의미 : 수행 속도 증가

* 새로운 의미 : 기존 의미에다 일정 정도의 security 의 의미 부여

즉 owner나 super user만 delete 가능.

2. Execution Triplet의 setting 위치

- setuid - setgid - stickybit

3. Program Execution Triplet의 display 위치

* sticky bit는 others의 execution mode에 setting

* setuid bit는 owner의 execution mode에 setting

* setgid bit는 group의 execution mode에 setting

4. sticky bit를 포함하여 setuid,setgid등은

실행(execution) file들에 setting하는 것임을 잊지 마시길.

5. 실행 file 일지라도 execution mode가 off된 곳에 execution triplet 하나가

setting되면 execution triplet mode가 대문자로 된다.

예를 든다.

# ls -l shtest

-rwxr-xr-x 1 woo 44 Mar 20 10:14 shtest

# chmod 1777 shtest

# ls -l shtest

-rwxrwxrwt 1 woo 44 Mar 20 10:14 shtest

# chmod 0744 shtest

# ls -l shtest

-rwxr--r-- 1 woo 44 Mar 20 10:14 shtest

# chmod 1744 shtest

# ls -l shtest

-rwxr--r-T 1 woo 44 Mar 20 10:14 shtest

6. user가 자신 소유의 file이라도 sticky bit 생성은 안됨(절대,상대 mode 모두).

그러나 root에서 작업하면 가능. super user가 sticky bit 생성 후 그 file이

user 자신의 소유라면 sticky mode를 delete할 수는 있다.



이연주
정기 조언자

일반사용자가 root 권한으로 프로그램 실행

/admin/bin/opr_scrip 이라는 실행 script에 Set User ID를 한번 적용해보시기 바랍니다.



설정방법은

# chmod u+s /admin/bin/opr_scrip

# ll /admin/bin/opr_scrip

-r-sr-xr-x .......

Set user id를 적용시키면 owner의 실행 퍼미션이 s로 바뀝니다. 그러면 성공적으로 set user id 가 적용된 것 입니다.



set user id가 적용된 파일은 owner를 제외한 다른 유저들이 이 파일에

access할때 owner의 권한을 가지고 실행할 수 있게 해줍니다. 즉 이파일에 access할때 이파일의 owner ship를 가지게 됩니다.

만약 이 파일의 소유자가 root라면 root권한으로 access를 하게 되는겁니다.....

이상규
조언자

일반사용자가 root 권한으로 프로그램 실행

sudo 프로그램을 이용하시는것은 어떨지.

/opt/sudo/bin/sudo -u root nohup /opt/java1.3/bin/java KyulQ &



저역시 유저님 처럼 일반유저가 root에서 실행해야할 프로세스가 있어서 고민중에 sudo를 사용해서 운영하고 있습니다.