sudo 사용
페이지 정보
작성자 MintState 댓글 0건 조회 24,304회 작성일 11-07-26 23:03본문
sudo 사용
인터넷을 통한 서비스를 위하여 설치된 서버에는 반드시 OS설치시부터 관리자 계정(root 또는 administrator)이 만들어져 있다. 이 계정의 권한은 직원이라 하더라도 함부로 알려줘서는 안되며, 관리자 권한이 필요한 업무를 보는 사람에게, 제한적으로 권한을 수행할 수 있도록 허용하는 보안정책이 필요하다. 작업용 공용계정을 사용하는 경우도 마찬가지이다.(하지만 작업용 공용계정을 없애는것이 보안의 첫걸음이다.)
이 기능을 훌륭히 수행해주는 sudo의 사용법에 대하여 요약해 보았다.
sudo
* 개발, 운영 등의 작업을 수행함에 있어, 로그인계정 외의 다른 계정의 권한이 요구될 때, 그 계정을 직접 사용하지 않고(혹은, 패스워드를 알아내지 않고), 본인의 로그인계정의 인증을 통해 해당 계정의 권한으로 작업을 수행할 수 있다.
* 용법
* 가장 간단한 방법은 sudo <command>이다. 이렇게 하면 <command>에 적은 쉘커맨드가 root권한으로 수행된다.
* root 계정이 아닌 다른 계정의 권한이 필요한 경우엔, sudo -u username <command> 로 수행하면 username 계정의 권한으로 <command>를 수행한다.
◦ sudo -u #uid <command> 와 같이 uid값을 사용할 수도 있다.
◦ 이 유저를 Runas user라고 한다.
* sudo로 su - (root계정의 로그인쉘 얻기)를 수행한 예
sudoers
* sudo를 사용하여 권한을 부여할 구체적인 설정을 하는 파일이 ''sudoers'' 파일이다. 시스템에 따라 약간씩 위치는 다르나, 이 파일을 편집할 권한을 얻으면 시스템의 모든 권한을 얻을 수도 있기 때문에 매우 높은 보안 레벨로 보호되어야 한다.
* sudo su - 또는 sudo visudo등의 커맨드를 허용하는 것은 매우 신중해야 한다.
* 이 파일의 편집은 visudo 명령을 실행하여 편집한다. visudo의 기본 편집기(보통은 vi 또는 nano)가 sudoers파일을 열은채로 실행된다.
* visudo가 사용할 기본 편집기 역시 sudoers파일에 설정할 수 있다.
* 각 Alias 설정은 문자열 단위로 매치시키기 때문에 주의깊게 작성해야 한다.
* sudo /usr/bin/su 는 가능하나, cd /usr/bin; sudo ./su는 불가능할 수 있다.
How to Write sudoers
* Alias 정의 섹션, Default 정의 섹션, Privilege정의 섹션으로 나누어 볼 수 있다.
* 라인당 하나의 정의
* Aliases
◦Alias에는 User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias의 4가지 Alias_Type이 있다.
◦모든 Alias에 대해 ALL은 항상 매치되는 와일드카드로 미리 정의되어 있다(아래 예제 참조)
◦각 Alias는 NAME = LIST의 형태로 만든다.
■NAME은 알파벳 대문자로 시작하여야 하고, 두번째 글자부터는 알파벳 대소문자와 숫자, 언더스코어문자('_')를 쓸 수 있다.
■LIST는 콤마(,)로 구분되고 공백은 무시된다.
■LIST의 item앞에 '!'(negate operator)를 쓰면 리스트에서 해당 아이템만을 배제시킨다.
예:ALL, !/bin/su # "/bin/su를 제외한 모두"라는 의미
ALL, !!/bin/su # "모두"의 의미, 짝수번 negate 의미 없다.[/CODE]
■같은 종류의 Alias는 콜론(:)으로 묶을 수 있다. 다른 라인에 새로운 정의로 포함시킬수도 있다.
◦Alias는 다음과 같은 형태가 된다.
■Alias_Type NAME = item1, item2, item3, item4
■Alias_Type NAME = item1, item2, item3 : Name = item4, item5
◦User_Alias
■sudo 권한을 적용할 유저의 집합을 정의한다.
■(sudoer 그룹명) = (List of login names)
■유저명 대신 %<group> 을 사용할 수도 있다.
■예: %admin # admin 그룹에 속하는 모든 유저
◦Runas_Alias
■어떤 유저 또는 그룹의 권한으로 명령을 수행할지를 지정할 수 있다.
■정의 방법은 User_Alias와 동일하나, #<uid> 의 형태도 사용할 수 있다.
■주의: root와 #0은 동일한 유저이지만, 문자열 매치를 하기 때문에 다른 것으로 간주된다. root, %0도 마찬가지.
◦Host_Alias
■hostname, IP address, Network address, 다른 Host_Alias를 묶어 호스트 집합을 만들 수 있다.
◦Cmnd_Alias
■권한을 허용할 커맨드를 나열하여 집합으로 만든다.
■커맨드는 full path로 적는다. 디렉토리명을 커맨드로 지정할 수 있다. 디렉토리를 지정하면 그 디렉토리이하의 모든 커맨드에 대해 허용된다.
* Defaults : 권한 부여의 기본 옵션을 지정한다.
◦라인당 하나의 Default_Entry를 정의 한다.
◦Default_Entry는 Default_Type Parameter_List로 정의한다.
◦Default_Type는 다음의 4가지 정의 방법이 있다.
■Defaults
■Defaults@Host_Alias
■Defaults:User_Alias
■Defaults>runas_username
◦Parameter_List는 Parameter의 리스트를 적는다. Parameter는 다음과 같은 형태가 있다.
■flag
■!flag
■flag=value
■flag+=value
■flag-=value
■other Parameter_Lists
◦여기서는 유용한 몇개 flag만 소개한다. 자세한 flags는 SUDOERS(5)를 참조한다 (이말을 쓰기 싫어서 작성한 문서에 쓸수 밖에 없다니;;;)
■lecture: 앞절의 예제 이미지와 같이 타인의 권한으로 수행할때 기억해야 할 것에 대한 짧은 경고문.
lecture=(never, once, always 중 하나)
■lecture_file: lecture를 보여줄 때, 이 파일을 보여준다.
lecture_file=(full path of lecture_file)
■timestamp_timeout: sudo를 수행한 후 다시 수행할 때, 패스워드를 다시 물어볼지를 결정하는 타임아웃값. 0이면 항상 물어본다.
timestamp_timeour=(분 단위 정수)
■editor: visudo에서 사용할 기본 에디터
editor=(/usr/bin/vim 등의 에디터 full path)
■passwd_tries: 비밀번호를 틀렸을 경우 다시 물어보는 횟수.
passwd_tries=(정수)
■passwd_timeout: 비밀번호 입력대기시간 타임아웃값. 0이면 무한정 기다린다.
passwd_timeout=(분 단위 정수)
■fqdn: Host 이름에 Fully Qualified Domain Name을 사용할 것인지의 여부. 이 플래그를 사용하면, sudo수행시에 hostname을 DNS에 쿼리한다.
fqdn (또는 !fqdn)
■set_logname: runas user(타겟 유저라고도 함)의 LOGNAME과 USER 환경변수값을 가져오지 않고 현재 값을 유지한다.
set_logname (또는 !set_logname)
sample
* 가장 소극적인 보안책으로 사용할수 있는 sudoers 예제
* 다양한 용법과 문법의 예
출처 : http://lumitech.tistory.com/entry/sudoAndSudoer
인터넷을 통한 서비스를 위하여 설치된 서버에는 반드시 OS설치시부터 관리자 계정(root 또는 administrator)이 만들어져 있다. 이 계정의 권한은 직원이라 하더라도 함부로 알려줘서는 안되며, 관리자 권한이 필요한 업무를 보는 사람에게, 제한적으로 권한을 수행할 수 있도록 허용하는 보안정책이 필요하다. 작업용 공용계정을 사용하는 경우도 마찬가지이다.(하지만 작업용 공용계정을 없애는것이 보안의 첫걸음이다.)
이 기능을 훌륭히 수행해주는 sudo의 사용법에 대하여 요약해 보았다.
sudo
* 개발, 운영 등의 작업을 수행함에 있어, 로그인계정 외의 다른 계정의 권한이 요구될 때, 그 계정을 직접 사용하지 않고(혹은, 패스워드를 알아내지 않고), 본인의 로그인계정의 인증을 통해 해당 계정의 권한으로 작업을 수행할 수 있다.
* 용법
* 가장 간단한 방법은 sudo <command>이다. 이렇게 하면 <command>에 적은 쉘커맨드가 root권한으로 수행된다.
* root 계정이 아닌 다른 계정의 권한이 필요한 경우엔, sudo -u username <command> 로 수행하면 username 계정의 권한으로 <command>를 수행한다.
◦ sudo -u #uid <command> 와 같이 uid값을 사용할 수도 있다.
◦ 이 유저를 Runas user라고 한다.
* sudo로 su - (root계정의 로그인쉘 얻기)를 수행한 예
sudoers
* sudo를 사용하여 권한을 부여할 구체적인 설정을 하는 파일이 ''sudoers'' 파일이다. 시스템에 따라 약간씩 위치는 다르나, 이 파일을 편집할 권한을 얻으면 시스템의 모든 권한을 얻을 수도 있기 때문에 매우 높은 보안 레벨로 보호되어야 한다.
* sudo su - 또는 sudo visudo등의 커맨드를 허용하는 것은 매우 신중해야 한다.
* 이 파일의 편집은 visudo 명령을 실행하여 편집한다. visudo의 기본 편집기(보통은 vi 또는 nano)가 sudoers파일을 열은채로 실행된다.
* visudo가 사용할 기본 편집기 역시 sudoers파일에 설정할 수 있다.
* 각 Alias 설정은 문자열 단위로 매치시키기 때문에 주의깊게 작성해야 한다.
* sudo /usr/bin/su 는 가능하나, cd /usr/bin; sudo ./su는 불가능할 수 있다.
How to Write sudoers
* Alias 정의 섹션, Default 정의 섹션, Privilege정의 섹션으로 나누어 볼 수 있다.
* 라인당 하나의 정의
* Aliases
◦Alias에는 User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias의 4가지 Alias_Type이 있다.
◦모든 Alias에 대해 ALL은 항상 매치되는 와일드카드로 미리 정의되어 있다(아래 예제 참조)
◦각 Alias는 NAME = LIST의 형태로 만든다.
■NAME은 알파벳 대문자로 시작하여야 하고, 두번째 글자부터는 알파벳 대소문자와 숫자, 언더스코어문자('_')를 쓸 수 있다.
■LIST는 콤마(,)로 구분되고 공백은 무시된다.
■LIST의 item앞에 '!'(negate operator)를 쓰면 리스트에서 해당 아이템만을 배제시킨다.
예:ALL, !/bin/su # "/bin/su를 제외한 모두"라는 의미
ALL, !!/bin/su # "모두"의 의미, 짝수번 negate 의미 없다.[/CODE]
■같은 종류의 Alias는 콜론(:)으로 묶을 수 있다. 다른 라인에 새로운 정의로 포함시킬수도 있다.
◦Alias는 다음과 같은 형태가 된다.
■Alias_Type NAME = item1, item2, item3, item4
■Alias_Type NAME = item1, item2, item3 : Name = item4, item5
◦User_Alias
■sudo 권한을 적용할 유저의 집합을 정의한다.
■(sudoer 그룹명) = (List of login names)
■유저명 대신 %<group> 을 사용할 수도 있다.
■예: %admin # admin 그룹에 속하는 모든 유저
◦Runas_Alias
■어떤 유저 또는 그룹의 권한으로 명령을 수행할지를 지정할 수 있다.
■정의 방법은 User_Alias와 동일하나, #<uid> 의 형태도 사용할 수 있다.
■주의: root와 #0은 동일한 유저이지만, 문자열 매치를 하기 때문에 다른 것으로 간주된다. root, %0도 마찬가지.
◦Host_Alias
■hostname, IP address, Network address, 다른 Host_Alias를 묶어 호스트 집합을 만들 수 있다.
◦Cmnd_Alias
■권한을 허용할 커맨드를 나열하여 집합으로 만든다.
■커맨드는 full path로 적는다. 디렉토리명을 커맨드로 지정할 수 있다. 디렉토리를 지정하면 그 디렉토리이하의 모든 커맨드에 대해 허용된다.
* Defaults : 권한 부여의 기본 옵션을 지정한다.
◦라인당 하나의 Default_Entry를 정의 한다.
◦Default_Entry는 Default_Type Parameter_List로 정의한다.
◦Default_Type는 다음의 4가지 정의 방법이 있다.
■Defaults
■Defaults@Host_Alias
■Defaults:User_Alias
■Defaults>runas_username
◦Parameter_List는 Parameter의 리스트를 적는다. Parameter는 다음과 같은 형태가 있다.
■flag
■!flag
■flag=value
■flag+=value
■flag-=value
■other Parameter_Lists
◦여기서는 유용한 몇개 flag만 소개한다. 자세한 flags는 SUDOERS(5)를 참조한다 (이말을 쓰기 싫어서 작성한 문서에 쓸수 밖에 없다니;;;)
■lecture: 앞절의 예제 이미지와 같이 타인의 권한으로 수행할때 기억해야 할 것에 대한 짧은 경고문.
lecture=(never, once, always 중 하나)
■lecture_file: lecture를 보여줄 때, 이 파일을 보여준다.
lecture_file=(full path of lecture_file)
■timestamp_timeout: sudo를 수행한 후 다시 수행할 때, 패스워드를 다시 물어볼지를 결정하는 타임아웃값. 0이면 항상 물어본다.
timestamp_timeour=(분 단위 정수)
■editor: visudo에서 사용할 기본 에디터
editor=(/usr/bin/vim 등의 에디터 full path)
■passwd_tries: 비밀번호를 틀렸을 경우 다시 물어보는 횟수.
passwd_tries=(정수)
■passwd_timeout: 비밀번호 입력대기시간 타임아웃값. 0이면 무한정 기다린다.
passwd_timeout=(분 단위 정수)
■fqdn: Host 이름에 Fully Qualified Domain Name을 사용할 것인지의 여부. 이 플래그를 사용하면, sudo수행시에 hostname을 DNS에 쿼리한다.
fqdn (또는 !fqdn)
■set_logname: runas user(타겟 유저라고도 함)의 LOGNAME과 USER 환경변수값을 가져오지 않고 현재 값을 유지한다.
set_logname (또는 !set_logname)
sample
* 가장 소극적인 보안책으로 사용할수 있는 sudoers 예제
* 다양한 용법과 문법의 예
출처 : http://lumitech.tistory.com/entry/sudoAndSudoer
|
댓글목록
등록된 댓글이 없습니다.