사용자가 인수(공백 포함)를 사용하여 명령을 실행할 수 있도록 허용

사용자가 인수(공백 포함)를 사용하여 명령을 실행할 수 있도록 허용

사용자가 특정 파일의 특정 문자열에 대해 grep(sudo를 통해) 및 grep을 실행할 수 있도록 허용하고 싶습니다. 이 사용자가 모든 파일에 대해 grep을 실행할 수 있도록 허용하고 싶지 않습니다. 사용자에게 파일에 대한 읽기 권한이 없으므로 sudo를 사용해야 합니다. 내 컴퓨터에 있는 다른 서비스의 로그 파일을 grep하기 위해 nagios 검사를 작성하려고 합니다.

하지만 작동하지 않습니다. sudo는 계속 비밀번호를 묻습니다.

sudo grep "string I want (" /var/log/thefilename.log내 명령은 다음과 같습니다. (예, 문자열에 원시 및 일부 공백이 포함되도록 grep하고 싶습니다 .)(

/etc/sudoers.d/user-can-grep다음과 같은 것이 있습니다.

user ALL=(root) NOPASSWD: /bin/grep "string I want (" /var/log/thefilename.log

sudoers 파일은 소유자가 소유 root:root하며 권한이 있습니다.-r--r-----

서버는 Ubuntu 신뢰할 수 있는 14.04.3 LTS입니다.

어떻게 해야 하나요?

답변1

  1. 스크립트 작성(루트로만 작성 가능)
  2. 해당 스크립트에서 grep필요한 작업을 수행하십시오.
  3. sudoers 구성에서는 스크립트에 대한 액세스만 허용합니다.
  4. 도구를 구성하거나 사용자에게 sudo를 통해 스크립트를 실행하도록 권장

디버깅이 더 쉽고, 특정 파일에 대한 특정 액세스를 잠그기가 더 쉬우며, 악용이 더 어렵습니다.

답변2

분명히 sudo는 명령을 sudoers 파일의 사양과 비교하기 전에 문자열로 병합합니다. 따라서 귀하의 경우에는 따옴표나 다른 형태의 이스케이프를 사용할 필요가 없습니다.

user ALL=(root) NOPASSWD: /bin/grep string I want ( /var/log/thefilename.log

편집하다: @user23013이 의견에서 지적한 것처럼 이는 모든 파일에서 "내가 원하는 문자열"을 grep하는 데 악용될 수 있습니다. (그리고 확장에 따라 "문자열 I" 및 "문자열"에도 사용할 수 있습니다.) sudo의 매개변수 검사를 고려하십시오. 사용하기 전에 조심스럽게!


또한 다음 호출은 동일합니다. 즉, 사용자를 특정 표현으로 제한할 수 없습니다.

sudo grep "string I want (" /var/log/thefilename.log
sudo grep 'string I want (' /var/log/thefilename.log
sudo grep string\ I\ want\ \( /var/log/thefilename.log

이는 따옴표와 이스케이프가 쉘에 의해 처리되고 결코 도달하지 않기 때문입니다 sudo.

답변3

파일에 액세스하려면 루트만 필요하므로 비슷한 것을 사용 cat하고 실행해야 하는 프로그램 tee에 파이프하는 것을 고려하십시오. grep예를 들어, sudo cat /file/path | grep …이 방법을 사용하면 꼭 필요한 곳으로 루트를 제한할 수 있습니다.

답변4

sudo훌륭하지만 때로는 가장 적합하지 않은 경우도 있습니다. 이를 위해 나는 상승된 권한을 허용하는 super.super

super.tab은 다음과 같습니다:

grepcmd "grep 'string I want (' /var/log/thefilename.log" user

로 호출됩니다 super grepcmd.

관련 정보