Sudo/ko

명령은 일반 사용자가 암호를 입력하지 않고도 가능하게 루트 권한으로 몇가지(또는 전부의)명령을 실행하는 등의 상황에서 권한 상승을 설정하는 간단하고 안전한 수단을 제공합니다.

일부 사용자에게 루트 권한을 전부 주지 않고도 시스템의 관리 과정을 수행하도록 하려면 sudo를 사용하는 것이 가장 탁월한 선택입니다. sudo를 통해서라면 누가 무엇을 할 수 있을지 통제할 수 있습니다. 이 안내서에서는 이 멋진 수단에 대한 간단한 소개를 드리고자 합니다.

이 글은 간단한 소개글을 의도합니다. 꾸러미는 여기서 언급한 내용보다 훨씬 더 강력한 기능을 보유하고 있습니다. 다른 사용자 처럼 파일을 편집하는 기능, 스크립트 내에서 실행하는(따라서 백그라운드에서 실행하거나 키보드 대신 표준 입력을 통해 암호 입력을 받을 수 있음), 등의 기능이 있습니다.

더 많은 내용은 sudo 와 sudoers 설명서 페이지를 읽어보십시오.

활동 기록
의 또 다른 장점은 프로그램을 실행하는 어떤 시도 과정(성공/실패)을 기록할 수 있다는 점입니다. 누가 10시간동안 삽질하도록 치명적인 실수를 했는지 추적할 때 유용합니다 :&#41;

권한 부여
시스템 관리자는 꾸러미로 사용자들이 보통 실행하지 말아야 할 하나 이상의 프로그램을 실행할 수 있도록 권한을 줄 수 있게 합니다. 사용할 때와는 달리 는 누가, 언제 각각의 명령을 실행할 수 있는지 세밀하게 관리할 수 있습니다.

로 누가 프로그램을 실행할 수 있는지 분명한 목록을 만들 수 있습니다. setuid 비트를 설정하면 어떤 사용자든(어떤 그룹의 사용자든, 권한 설정에 따라) 이 프로그램을 실행할 수 있습니다. 사용자가 프로그램을 실행하려 할 때 암호를 입력하라고 요구(할 수 있거나 해야)합니다.

설정은 파일에서 관리합니다. 이 파일은, 또는 사용하고자 하는 편집기로 편집해서는 안됩니다. 이 파일의 내용을 바꾸려면 를 사용하십시오.

기본 문법
를 다루는데 있어 상당히 어려운 부분은 문법입니다. 기본 문법은 다음과 같습니다:

이 문법은 에게 가 인증하였으며,   시스템에서 로그인한 사용자가 명시한  의 어떤 명령이든 루트 권한으로 실행할 수 있음을 말합니다. 좀더 실제적인 예제를 들면 확실히 이해할 수 있을지도 모르겠습니다. 다음 예제에서는 larry 사용자가 localhost에 로그인하면 를 실행할 수 있습니다:

A more real-life example might make this more clear: To allow the user to execute  when he is logged in on :

사용자 이름은 그룹 이름으로 분류할 수 있습니다. 이 경우  기호로 시작하는 그룹 이름을 적어야합니다. 예를 들어 wheel 그룹의 임의의 사용자에게 실행을 허용하려면:

(각각의 명령에 대해 단일 항목을 넣는 대신)여러 명령을 한줄에 적어 실행을 허용하도록 할 수 있습니다. 예를 들면 동일한 사용자에게 뿐만 아니라 와  명령을 루트 권한으로 실행하도록 허용한다면:

도구 자체 뿐만 아니라 명령을 정확하게 지정할 수도 있습니다. 각 도구별로 명령 옵션 지정 셋을 제한할 때 유용합니다. 도구는 sudoers 파일에서 쉘 방식 와일드카드(메타 또는 글롭 문자)를 명령행 인자로 경로 이름에서와 같이 사용할 수 있게 합니다. 참고로 정규 표현식은 아닙니다.

시험을 위해 다음 명령을 입력해보겠습니다:

에서 요구하는 암호는 사용자 자신의 암호입니다. 여러분이 깜빡하고 열어둔 터미널로 인해 다른 사람이 악의 목적으로 오남용을 방지하도록 확인합니다.

는  변수값을 대체하지 않음을 알고 계셔야 합니다. 명령 다음에 적은 명령은 여러분의 환경을 기준으로 다룹니다. 에 있는 도구를 실행하려는 경우, 다음과 같이 전체 경로를 지정하여 에 알려야합니다:

LDAP 기본 문법
LDAP 기능을 지원하려면 및  USE 플래그가 필요합니다.

LDAP에 sudo를 사용하면 마찬가지로 LDAP 서버의 설정을 읽습니다. 따라서 다음 두개의 파일을 편집해야합니다.

또한 sudo 에 다음 LDAP 항목을 추가해야 합니다.

sudoer LDAP 설정은 다른 설정을 하는 파일과 비슷합니다. 아래 링크에 있는 sudo LDAP 글을 더 읽어보십시오.

별칭 사용
좀 더 거대한 환경에서는 모든 사용자(또는 호스트, 명령)를 계속해서 적어넣어야 하는데 그걸 다 하기엔 벅찹니다. 관리를 쉽게 하기 위해 aliases를 정의할 수 있습니다. aliases를 선언하는 형식은 약간 단순합니다:

어디에 있든, 항상 동작하는 별칭은  입니다(별칭인 것과 아닌 것을 쉽게 구분하기 위해 대문자 사용을 추천합니다). 확실히 짐작한 바와 같이  별칭은 모든 설정에서 쓸 수 있는 별칭입니다.

별칭의 용례로서, 어떤 사용자가 로컬에 접속했을 때 을 실행할 수 있도록 허용하려면:

다른 예제로는 larry 사용자가 로그인한 장소, 장치가 어딘지 여부와는 상관 없이 명령을 루트 권한으로 실행할 수 있게 하려면:

프로그램을 관리하는 프로그램(와 같은 것)을 시스템에서 실행할 수 있는 여러 사용자를 정의하고 루트를 제외한 어떤 사용자의 암호든 바꿀 수 있는 관리자 그룹을 정의할 수 있다는게 얼마나 재밌을까요?!

비 루트 실행
루트가 아닌 사용자중에서 각기 다른 프로그램을 실행하는 사용자를 다르게 할 수도 있습니다. (예를 들어 웹 서버 의 경우) 각기 다른 사용자에게 프로그램을 실행하게 하고 이 사용자들에게 관리 절차상 필요한 일을 수행할 수 있게 허용한다(이를테면 좀비 프로세스 죽이기 정도)면 꽤 흥미로울 수 있습니다.

에는 명령을 나열하기 전에  과   사이에 사용자를 나열하십시오:

larry가 apache 사용자 또는 gorg 사용자처럼 도구를 실행하도록 하려면:

이 설정으로 해당 사용자는 명령을 실행하여 프로그램을 실행하고자 하는 사용자를 선택할 수 있습니다:

지시어를 활용하면 프로그램을 실행할 사용자의 별칭을 설정할 수 있습니다. 앞서보았던  지시자에게도 이러한 활용법은 완전히 같습니다.

암호 및 기본 설정
기본적으로 는 사용자 자신의 신원을 자신의 암호를 통해 증명하라고 요청합니다. 암호를 입력하면 에서는 사용자 자신의 암호를 다시 입력하지 않고 작업에 집중할 수 있도록 5분동안 기억합니다.

물론 이 동작을 바꿀 수 있습니다: 에서  지시어로 사용자에 대한 기본 동작 설정을 바꿀 수 있습니다.

기본 5분값을 0(기억하지 않음)으로 바꾸려면:

로 설정하면 (시스템을 다시 부팅하기 전까지) 암호를 무한대 시간동안 기억합니다.

다른 설정에도 마찬가지로 명령을 실행할 때 사용자의 암호를 요구하며 사용자 자신의 암호를 요구하지 않는 다른 설정도 있습니다. 를 활용하면 됩니다. 또한, 다음 예제에서 ( 작업에 실패하기 전에 사용자가 몇번 다시 암호를 입력할 수 있는지) 기본값인 3 대신에 재시도 횟수를 로 설정했습니다.

그래픽 도구를 실행할 수 있게  변수 설정을 유지하는 또 다른 재밌는 기능도 있습니다:

지시자를 활용하면 여러 기본 설정을 바꿀 수 있습니다. sudoers 설명서 페이지 표시를 실행하고 를 검색해보십시오.

허나 어쨌든간에 암호를 제공하지 않고 명령 세트를 실행할 수 있게 하려면, 다음과 같이  지시자를 붙여 명령 기입을 시작해야합니다:

배시 자동 완성
sudo에 bash 명령 완성 기능을 사용하려는 사용자는 다음 명령을 한번 실행하십시오.

Z쉘 명령 완성
sudo에 zsh 명령 완성 기능을 사용하려는 사용자는 와 에 각각 다음 내용을 설정할 수 있습니다

위 내용으로 바꾸면,, , 위치에 있는 값은 'sudo' 다음에 놓은 명령에 대한 명령 완성 기능을 쉘에서 사용할 수 있습니다.

권한 확인
자신의 권한을 알아보려면 를 실행하십시오:

에 암호를 입력할 필요가 없는 명령이 있다면, 항목에 있는 명령에 암호를 요구하지 않습니다. 그렇지 않아 항목에 없어 기억하지 않으면 암호를 물어봅니다.

암호 입력 제한 시간 미리 연장
기본적으로 사용자가 로 자신의 암호로 진입하면 5초간 기억합니다. 사용자가 이 기간보다 더 길게 세션을 유지하길 바란다면 에서 암호를 다시 묻기 전에 명령을 실행하여 타임 스탬프를 다시 설정하고, 5분을 다시 세도록 할 수 있습니다.

반대로, 명령으로 타임스탬프를 없앨 수 있습니다.