루트가 아닌 사용자가 Linux 버퍼 캐시를 지우도록 하는 방법

루트가 아닌 사용자가 Linux 버퍼 캐시를 지우도록 하는 방법

Debian wheezy VM에서 실행되는 Python 스크립트에서 Linux 버퍼 캐시를 지워야 합니다.

저는 root 로 실행 중이지만 sync; echo 3 | sudo tee /proc/sys/vm/drop_caches루트 권한이 없는 사용자가 스크립트를 실행하고 있습니다.

나는 다음과 같은 가능성을 생각해 보았습니다.

  • 사용자에게 파일에 대한 쓰기 권한을 부여합니다. /proc/sys/vm/drop_caches (제가 할 때 허용되지 않기 때문에 작동하지 않는 것 같습니다 chmod 646 /proc/sys/vm/drop_caches.)
  • setuid를 on으로 설정하면 tee작동하지만 사용자는 계속할 수 있습니다.아페쉬*t그리고tee
  • 스크립트에서 setuid를 설정하고 스크립트에 대한 사용자의 쓰기 권한을 제거하여 사용자가 변경할 수 없도록 할 수 있습니다(그러나 다시 말하지만 사용자가 코드와 상호 작용할 수 있으므로 이는 좋지 않습니다).
  • 아니면 다음 내용을 포함하는 작은 bash 스크립트를 작성할 수도 있습니다.Linux 버퍼 캐시 지우기그런 다음 사용자에 대한 쓰기/읽기 권한, setuid를 제거하고 실행 권한을 추가합니다.

이 문제를 해결하는 가장 현명한 방법은 무엇입니까?

답변1

목록에서 네 번째 가능성(보안 디렉토리에 작은 setuid 스크립트 작성, 예를 들어 /usr/local/bin사용자가 변경할 수 없음)만 작동하고 안전할 수 있지만 요즘에는 자주 사용됩니다.배포판에 의해 비활성화되었습니다.

더 간단하고 더 나은 옵션은 /etc/sudoers에 다음 줄을 추가하는 것입니다( visudo예를 들어 이를 위해 사용).

YOURUSERNAME     ALL = NOPASSWD: /sbin/sysctl vm.drop_caches=3

그런 다음 다음 줄을 포함하십시오.

sudo /sbin/sysctl vm.drop_caches=3

귀하의 스크립트에서.

관련 정보