sudo없이 루트가 아닌 사용자에게 명령 세트에 대한 액세스 권한 부여


13

내 컴퓨터의 루트가 아닌 사용자에게 sudo가 아닌 액세스 권한을 부여하고 싶습니다. 사용자 dns-manager가 있으며 그의 유일한 역할은 모든 BIND 명령 (rndc, dnssec-keygen) 등을 실행하는 것입니다.

이제 명령을 실행할 때마다 다음과 같이 입력합니다.

sudo rndc reload

이 sudo를 제거 할 수있는 방법이 있습니까?하지만 특정 명령 세트에서만 (dns-manager 전용)?


5
이와 같은 임의 액세스 제어는 거의 sudo목적입니다. 이것에 대한 당신의 사업 반대 의견은 무엇입니까 sudo?
MadHatter

1
@peterh 나는 나의 질문을 반복한다 : 임의 접근 제어 (즉, 부분 sysadm 위임)는의 역할이다 sudo. 반대는 무엇입니까?
MadHatter

3
그렇다면 암호 sudo는 어떻습니까? 또는 비밀번호로 sudo 를 사용하여 DNS 관리 도구를 실행하면named 그룹 또는 사용자 권한 또는 루트 권한으로 필요에 따라 작동 할 수 있습니다 .
MadHatter

4
@peterh "이런 식으로하는 좋은 이유"는 빠진 비트 일 것입니다. 일반적으로 이와 같은 질문 은 변명의 XY 문제인 것으로 밝혀졌으며 근본적인 문제를 이해하는 것이 문제를 완전하고 전문적으로 해결하는 데 중요하다는 것을 알게되었습니다.
MadHatter

2
@ peterh 우리가 서로 동의하는 것 같아요. 나도 OP가 그의 질문을 개선하는 것을보고 싶다. 그것에 드릴 다운하면 저자가 자신이 만든 상자 밖에서 생각하는 데 도움이되는 방법으로 저에게 효과적입니다. 그는 피하고 싶은 좋은 이유가있다 sudo. 우리에게 그것을 표현하려고 할 때, 그는 우리의 혼란을 없애거나 자신의 것 또는 둘 다를 해결할 수 있습니다!
MadHatter

답변:


31

귀하의 의견을 올바르게 이해하면 여기서 문제는 sudo 기본값으로 요청하는 비밀번호를 입력 할 수있는 연결을 통해 명령이 발행된다는 것입니다. 또한 많은 OS 배포판에서 sudo는 기본적으로이 프로그램에는없는 TTY를 요구합니다.

그러나 sudo는 매우 세분화 된 권한 구조를 가질 수 있으므로 한 명 이상의 사용자가 암호 및 TTY없이 하나의 특정 명령을 실행할 수 있습니다. 아래에는 필요에 따라이를 구성하는 세 가지 방법이 나와 있습니다. 어느 것을 선택하든 사용자는 이제 sudo rndc reload비밀번호를 입력하지 않고도 명령을 실행할 수 있습니다.

(또한,이 불필요 할 수도 있지만 ... 제발 당신이 백업으로 되돌릴 경우에있어 루트 개방을 필요로 쉘을 유지하기, 편집하기 전에 당신의 sudoers 파일의 백업 복사본을 만들 기억하고 편집을 그것을 사용하는 visudo대신에 sudo vi /etc/sudoers더 잘 가지고 반대보다 그들을 필요로하지 ... 희망이 예방 조치가 필요 할 것이다.하지만!)

1. 요청에 대해 TTY가 필요하지 않은 경우

가장 쉬운 방법은 (있는 경우) 확인 라인으로 시작 있는지 확인하는 것입니다 TTY 요구 사항을 제거하기 Defaults/etc/sudoers단어를 포함하지 않는 requiretty대신, 그것은 포함한다 - !requiretty. 그러나 이렇게하면 sudo 명령에 tty가 필요 하지 않습니다 .

또한 라인을 추가해야합니다

rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program

2.이 사용자를 제외한 모든 사용자에게 TTY가 필요한 경우

다음과 같이이 한 명의 사용자에 대한 기본값을 설정하여 수행 할 수 있습니다.

Defaults:rndcuser        !requiretty
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program

3.이 한 명의 사용자가이 한 가지 명령을 제외한 모든 명령에 대해 TTY를 요구하려면

sudoers 파일의 구문으로 인해 조금 더 복잡합니다. 명령에 대한 명령 별명을 작성하고 다음과 같이 해당 명령 별명에 대한 기본값을 설정해야합니다.

Cmnd_Alias RNDC_CMD = /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
Defaults!RNDC_CMD !requiretty
rndcuser ALL = (root) NOPASSWD: RNDC_CMD

물론 암호가없는 경우에도 sudo를 직접 사용할 수없는 경우 sudo를 사용하여 명령을 호출하는 래퍼 스크립트와 결합 할 수 있습니다.
Jenny D

4

예. sudo는 매우 유연하게 구성 할 수 있습니다. 그럼에도 불구하고, 언급해야합니다. 이러한 유형의 솔루션은 매우 안전한 것으로 간주되어서는 안되며 다른 통제 수단이있는 협력적인 환경에서만 사용해야합니다. 인터넷에서만 알고있는 고객에게는 그렇게하지 않아야합니다.)

sudo 설정은 /etc/sudoers대부분의 시스템에 있습니다. 인터넷 검색이나 man sudo명령으로 구문을 찾을 수 있습니다 .

이 파일을 직접 편집해서는 안됩니다. 그렇게하면 보안 경쟁 조건이 발생할 수 있습니다. 대신 환경 변수를 visudo감싸는 명령 인 명령을 사용하십시오 $EDITOR.


sudo를 구성한 후에는 보이는 명령을 쉽게 감쌀 수 있습니다. 매우 간단합니다 :

  1. sudo 랩퍼 스크립트 목록을위한 디렉토리를 작성하십시오 (fe /usr/local/dnsadmin/bin).
  2. sudo없이 사용할 수있게하려는 명령에 대한 랩퍼 스크립트를 작성하십시오. 예를 들어 다음과 같이 매우 간단한 명령 /usr/local/dnsadmin/bin/rndc입니다.

    #!/bin/bash exec /usr/bin/sudo /usr/sbin/rndc "$@"

  3. 이 디렉토리를 PATH환경 변수로 가져 오십시오 (예 : 시스템 전체 또는 로컬 .profile).


호기심에서-왜 exec명령을 직접 호출하는 대신 쉘 스크립트에서 사용 하시겠습니까? (나는 그것이 틀렸다고 말하는 것이 아닙니다. 나는 당신이 왜 그것을 할 수 있는지 알고 싶어서 무언가를 배울 수도 있습니다)
Jenny D

2
암호가없는 sudo 비트로 끝났습니다. 래퍼 스크립트 아이디어는 훌륭합니다.
Anss

2
@JennyD :-) 안정성과 성능 때문에. 의 경우 exec호출 된 명령이 쉘 대신 대체됩니다. 껍질이 사라질 것입니다. exec가 없으면, 쉘은 해당 명령을 시작한 다음 종료를 기다렸다가 종료합니다. 이 두 번째, exec-less는 필요하지 않은 여러 협력 프로세스를 의미합니다. 그러나 큰 차이는 없습니다. exec가 없으면이 기능이 제대로 작동합니다.
peterh-Reinstate Monica

@JennyD 나의 간청 :-)
peterh-Reinstate Monica

@ Snowbody 고마워요! 매우 큰 영광입니다.
peterh-Reinstate Monica

2

이것은 특정한 경우에 일반적인 해결책 rndc은 아니지만 전혀 필요하지 않습니다 sudo.

rndcnamed비밀 키를 사용하여 로컬 소켓 또는 원격 포트를 통해 모든 프로세스 와 통신 할 수 있습니다 . 기본적으로 (또는 적어도 내가 사용하는 배포판 인 데비안의 경우)이 파일을 찾을 수 있으며 /etc/bind/rndc.key일반적으로 user bind와 group 만 읽을 수 있습니다 bind.

해당 키 파일 (또는 동일한 사본)에 대한 읽기 액세스 권한이있는 사용자는 rndcBIND 서버를 제어하는 ​​데 사용할 수 있으므로이 경우 가장 쉬운 해결책은 사용자를 bind그룹에 추가하는 것 입니다.

놀라운 수의 공통 데몬에는 비슷한 설정이 있습니다 (개인적으로 powerdns의 가능성을 여전히 파악하고 있지만 지금까지는 유망합니다). 원하지 않으면 sudo달성하려는 것이 사례별로 가능한지 확인해야합니다.


-1

sudo를 사용하여 일부 명령에 대한 루트를 부여하고 싶지 않습니다. 대신 일반 명령을 루트 권한으로 실행할 권한을 높이기 위해 [명령을 래핑 할 수있는] 특정 프로그램을 chmod 4750으로 만들 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.