분명히 sudo
그런 경우에 나에게 가장 적합한 선택이 될 것입니다. 주요 포인트가 나타납니다 대부분의 (실제) 관리자가 실제로 사용하지 않는 것이 될 수 /etc/sudoers
최대한 가능한 범위 ( User_Alias
, Runas_Alias
, Host_Alias
, Cmnd_Alias
).
대부분의 관리자는 기존 규칙 중 일부만 사용 하고 사용자를 추가하거나 더 나쁜 sudo
것은 규칙이 일반적으로 우분투 설정에 존재하는 그룹에 사용자를 추가 하는 것입니다 ( %sudo
...). 물론 이것은 각 사용자에게 무료 통치권과 수퍼 유저 계정의 모든 권한을 부여합니다.
당신의 의견을 감안할 때 :
그래서 나는 그들을 추가했다 /etc/sudoers
나는 또한 당신이 그것을 가능한 한 사용하지 않는 것으로 생각합니다.
당신과 같은 시나리오에서 나는 말 그대로 Bob이 제한해야 할 몇 가지 행동을 스크립팅합니다. 실제로 이것은 내가 관리하는 서버에서 수행 한 작업으로, 두 명의 특정 사용자가 호스트에서 특정 KVM 게스트를 재부팅 할 수 있도록합니다. 스크립트에는 인터프리터에 대한 절대 경로가있는 해시 뱅이 포함되어 있으며 (예 : #!/bin/dash
대신 #!/usr/bin/env bash
) 특권 작업 ( /bin/dash
또는 /bin/sh
)을 위해 다른 곳에서 사용되는 셸로 실행될 수 있습니다. 그것들은 단지 예방책입니다. 그 외에는 바이너리에 대한 모든 절대 경로를 하드 코딩하고 가능한 한 적은 수를 사용해야합니다. 예를 들어 bash
/ 를 사용할 때 s보다 s를 dash
선호합니다 (참조 ). 변수에 절대 경로를 할당하고 해당 변수를 기반으로 프로그램을 참조하여이를 유지 관리 할 수 있습니다 (builtin
command
man bash
$VIRSH
) 대신 /usr/bin/virsh
. 가능하면 외부 스크립트 코드를 검사 한 후 호출하십시오. 특히 권한있는 컨텍스트에서 호출해야하는 경우. 필자의 경우 sshd
공개 키 인증 을 통해서만 컴퓨터에 연결하기 때문에 사용자를 특정 루트 디렉토리 및 특정 SSH 하위 시스템으로 제한 합니다. 분명히 당신은 그것을 필요로하지 않습니다.
확인에 확인 chown root: <the-script>; chmod u=rw,a=,a+rx <the-script>
사람 만 방지하기 위해 root
그것으로 땜질에서 적절한합니다. 또한 조심 setuid
하고 setgid
비트 (대상 바이너리 활성화 find
를 발견 할 수 있습니다). 스크립트가에있는 순간을 가정 해 봅시다 /usr/sbin/priv-action
.
이제를 수정하십시오 /etc/sudoers
. noexec
명시 적으로 허용 된 것 이외의 이진을 방지하는 데 사용할 수 있습니다. 여기에 설명하는 것뿐만 아니라 실제로 추가 설정이 많이 있습니다. 반드시 상담하십시오 man sudoers
.
이제 파일 의 사용자 이름 ( User_Alias
)을 선호 sudoers
하지만 Group_Alias
( man sudoers
) 또는 실제 시스템 그룹 (예 :)을 사용할 수도 %sudo
있습니다.
# The list is comma-separated: bob,alice,...
User_Alias LIMITED_ADMINS=bob
그런 다음 특정 스크립트를 실행할 수 있도록 명령 별칭을 추가하십시오.
# The list is comma-separated: /usr/sbin/priv-action,/bin/bash,...
Cmnd_Alias PRIV_ACTION=/usr/sbin/priv-action
마지막으로 할 수 있도록 마법 라인을 제공 bob
(또는 오히려 아래에 나열된 사용자 LIMITED_ADMINS
) 스크립트를 통해 권한이있는 명령을 실행할 :
LIMITED_ADMINS ALL=(root) PRIV_ACTION
이전의 별칭 정의와 달리 해당 줄에는 설명이 필요합니다. 먼저 "사용자 사양"라인 평균의 부품을 살펴 보겠습니다. 여기 man sudoers
도움이됩니다 :
사용자 사양의 기본 구조는 who where = (as_whom) what
입니다.
예제 라인 (대부분의 우분투 설정에서 발견) :
root ALL=(ALL) ALL
즉, 이름이 지정된 사용자 root
( #0
UID에 연결하는 데 사용 0
)는 모든 호스트에서 모든 사용자 컨텍스트에서 실행될 수 있지만 비밀번호를 묻는 메시지가 표시됩니다 (기본 동작 가정). NOPASSWD
마지막 태그 앞에 태그를 추가하면 비밀번호를 요청하지 않고도 동일한 작업을 수행 ALL
할 수 root
있습니다 (예 :) root ALL=(ALL) NOPASSWD:ALL
. ALL
다양한 별명 유형에 대한 고유 한 와일드 카드 별명입니다.
그러나 밥에게 다시 :
LIMITED_ADMINS ALL=(root) PRIV_ACTION
의 bob
다른 나열된 구성원이 User_Alias LIMITED_ADMINS
모든 호스트에서 (있는 ALL
그대로) 사용자 root
(그룹을 암시하지만 제공 할 수 있음 man sudoers
)로 실행되도록 허용합니다 Cmnd_Alias PRIV_ACTION
. 더 좋아집니다. 이 스크립트를 작성한다고 가정하면 다양한 매개 변수를 허용하여 여러 스크립트를 작성하지 않아도됩니다. /etc/sudoers
기꺼이 쉘과 유사한 와일드 카드를 사용하여 전달할 수있는 인수의 가능성을 제한합니다.
나는 관리자가 사용 sudoers
하는 방식을 사용하지 않는다는 것을 일관되게 발견했다. 그래서 나는 두 권의 책 "Linux Server Hacks"와 "Linux Server Hacks Volume Two"에서 각각의 "Hack"을 높이 평가했다. 이 훌륭한 시설의보다 정교한 사용.
보안 사례에 도움이되지 않는 모든 종류의 복잡한 해결책을 제시 할 수는 있지만 기본적인 어휘를 말하면 /etc/sudoers
상당히 마술적인 업적을 수행 할 수 있습니다. :)
NB : /etc/sudoers.d/
기울어 진 느낌이들 경우 아래에 새 파일을 만들 수도 있습니다 . 이것은 당신 /etc/sudoers
의 라인을 포함 한다고 가정합니다 :
#includedir /etc/sudoers.d