visudo를 사용하여 다시 시작, 중지 및 종료 권한을 제거하는 방법은 무엇입니까?

visudo를 사용하여 다시 시작, 중지 및 종료 권한을 제거하는 방법은 무엇입니까?

사용자 Rick에게 다시 시작 권한을 박탈하려고 합니다. 나는 시도 !했고 NOEXEC. 다른 방법이 있나요?

Rick   ALL = (ALL)  !/sbin/reboot
Rick   ALL = NOEXEC: /sbin/reboot

답변1

당신은 할 수 없습니다. 특정 명령을 제외한 모든 명령을 실행할 수 있는 사용자 권한을 할당하기 위해 "부정적인 sudo"를 만드는 것은 실제로 불가능합니다. 이는 사용자가 이러한 제한을 쉽게 우회할 수 있기 때문입니다.

  • 거부된 명령을 쉘 스크립트에 삽입하고 실행함으로써
  • 거부된 명령을 다른 이름으로 복사하여
  • 다음과 같은 명령을 실행합니다(귀하의 경우 init 6, telinit 6, shutdown -r nowsystemctl isolate reboot.target모두 재부팅을 수행하고 명령을 거부하지 않습니다).
  • 거부된 명령을 실행하여exec
  • 텍스트 편집기나 다른 프로그램에서 셸을 이스케이프하여
  • 아니면 단순히 루트 사용자로 전환하여su

이는 맨페이지에도 언급되어 있습니다 sudoers.

SECURITY NOTES
   Limitations of the ‘!’ operator
     It is generally not effective to “subtract” commands from ALL 
     using the ‘!’ operator.  A user can trivially circumvent this by copy-
     ing the desired command to a different name and then executing that.  
     For example:

     bill    ALL = ALL, !SU, !SHELLS

     Doesn’t really prevent bill from running the commands listed in SU
     or SHELLS since he can simply copy those commands to a different
     name, or use a shell escape from an editor or other program.  
     Therefore, these kind of restrictions should be considered advisory at
     best (and reinforced by policy).

     In general, if a user has sudo ALL there is nothing to prevent 
     them from creating their own program that gives them a root shell (or
     making their own copy of a shell) regardless of any ‘!’ elements 
     in the user specification.

대신, 사용자에게 필요한 제한된 명령 집합을 식별하고 해당 명령에만 액세스 권한을 부여해야 합니다.

NOEXEC단순히 쉘 이스케이프를 비활성화한다고 해서 다른 모든 회피 방법이 차단되는 것은 아닙니다.

관련 정보