>

man 페이지에 정의 된 인수 방식을 포함하여/bin/date 명령에 대한 사용자 또는 그룹의 모든 루트 액세스 권한을 부여하고 싶습니다.

/etc/sudoers 를 이해합니다  명시 적 명령 정의를 기대하므로 현재 다음과 같은 내용이 있습니다.

%some_group ALL=(root) NOPASSWD: /bin/date

예 : some_group의 모든 사용자가 다음을 실행할 수 있기를 바랍니다.

sudo /bin/date +%T "12:34:56"

수 많은 다른 인수 조합

제 질문은 정규식이나 안전 (안전을 강조합니다!) 와일드 카드를 사용하여 더 세밀한 세분성을 얻는 방법이 있습니까?

업데이트

Cmnd_Alias와 비슷한 것을 달성했습니다. 이것이 작동하지 않는 이유는 sudo 의 내부 작업에 대해 자세히 읽을 시간이없는 신비입니다.  그리고 sudoers.

구문이 받아 들여지지 않았지만 다음과 같이 필요한 것을 달성했습니다.

Cmnd_Alias DATE=/bin/date
%some_group ALL=(root) NOPASSWD: DATE

이것은 정의 된 그룹의 구성원으로서 필요한 것을 정확하게 수행했습니다.

  • 답변 # 1

    이 작업을 수행하기 위해 sudo 명령을 사용할 수 있습니다. 다음과 같은 규칙을/etc/sudoers 파일에 추가하면 다음과 같습니다.

    일반 사용자 계정에서 root 또는 sudo를 사용하는 경우 :

    $ sudo visudo
    
    

    이것은 /etc/sudoers 를 열 것입니다  vi/vim 파일. 열면 다음 줄을 추가하십시오.

    Cmnd_Alias NAMEOFTHIS=/bin/date
    ALL ALL=NOPASSWD: NAMEOFTHIS
    
    

    여기서 "users"는 모든 사용자가 속해있는 유닉스 그룹입니다. groups <username> 를 사용하여 어떤 그룹 사용자가 있는지 확인할 수 있습니다.  명령 또는 /etc/groups 를 봐  그리고 /etc/passwd  파일.

    이러한 섹션이 있으면 위의 규칙을 다음과 같이 추가합니다 :

    ## The COMMANDS section may have other options added to it.
    ##
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    # my extra rules
    Cmnd_Alias NAMEOFTHIS=/bin/date
    ALL ALL=NOPASSWD: NAMEOFTHIS
    
    

  • 답변 # 2

    GNU/Linux를 사용하고 있고 "new"(sic) pam_cap.so 를 느끼는 경우  특정 사용자에게 CAP_SYS_TIME 를 줄 수 있습니다  일반 사용자가 sudo 없이 시스템 시간을 변경하도록해야합니다.  또는 su . 기본적으로 세션 모듈로 구성하지만 인증 중입니다 ( ssh  또는 login  또는 무엇이든), /etc/security/capabilities.conf 하려는 사용자/기능을 추가하십시오.  그런 다음 setcap CAP_SYS_TIME+ei /bin/date 를  그리고 당신은 잘 지내요. pam_cap은 아직 그룹을 만들 수 없으므로 원하는 각 사용자에 대해 복사/붙여 넣기를해야합니다.

    모든 시스템 사용자가 시스템 시간을 변경할 수있게하려면 모든 pam_cap을 잊고 setcap CAP_SYS_TIME+ep /bin/date 를 수행하면됩니다.  이것은 본질적으로 setuid 비트를 이진에 추가하기위한 Capabilities의 아날로그입니다 (유사하게도 스크립트에서 수행 할 수없고 실행 파일 기능 플래그에 쓰고 setuid/setgid 비트는 커널에 의해 지워집니다).

    date  sudo를 통해 실행하는 것이 안전합니다 (오른쪽 대체를 제외하고는 간단한 유틸리티를 악용 할 수있는 방법은 많지 않지만 공격자는 루트에만 쓰기 권한이있는 디렉토리에 쓸 수있는 방법을 찾아야합니다) 가능하지만 기능은 최종 사용자에게 권한을 부여하는 것이 더 매끄럽게 보이도록합니다 ( "이것에 대해 sudo해야한다고 생각할 필요가 없습니다"). (당신은 그들에게 특정한 높은 특권 세트를 부여받습니다). sudo는 setuid 전용 메커니즘이며 (적어도 당분간)이 파일이나 실행 파일의 관점에서만 생각할 수 있으며 파일이 수행 한 모든 파일 (이진 또는 스크립트 작성)은 모든 루트 권한으로 수행 할 수 있습니다. 사용자에게 실행 파일에 대한 액세스 권한을 부여한 이유와 관련이없는 권한까지

    setuid는 기본적으로 대부분의 GNU/Linux 및 Unix 구현에서 나가는 오래된 오래된이전메커니즘입니다. 새에게 전체 루트 액세스 권한을 부여하는 것이 사용자가 시스템 시간을 변경하도록하려는 경우 왜 CAP_SYS_ADMIN 또는 CAP_NET_ADMIN을 제공합니까? 물론 나는 /bin/date 를 악용하는 방법을 생각할 수 없다  악의적 인 행동을 취하지 만 대부분의 익스플로잇은 발견되고 시연 될 때까지 직관적이지 않습니다 (소프트웨어에 명백한 익스플로잇이 포함되어 있지 않기를 바랍니다).

    * BSD 또는 Solaris를 사용하는 경우 "capabilities"는 이미 해당 플랫폼의 보안 관련 메커니즘의 이름이므로 "capabilities"대신 "Privileges"라는 개념과 동일한 개념을 갖습니다 (대략 LxC 및/또는 SELinux와 유사합니다. 구현 세부 사항은 권한과 Linux 기능간에 차이가 있지만 기본 개념은 동일합니다 (Solaris 11이 "루트 역할의 보안"보안 모델을 구현하는 방법이기도 함).

관련 자료

  • 이전 .desktop - * 폴더에서 특정 파일을 삭제하는 Bash 명령
  • 다음 keyboard shortcuts - GNU 화면에서 'tab'과 'shift + tab'을 바인딩하는 방법은 무엇입니까?