루트가 아닌 사용자가 Linux 버퍼 캐시를 비울 수 있도록 하는 방법

루트가 아닌 사용자가 Linux 버퍼 캐시를 비울 수 있도록 하는 방법

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

루트로 실행 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 스크립트를 작성할 수도 있습니다.리눅스 버퍼 캐시를 비우세요그런 다음 쓰기/읽기 권한을 제거하고 setuid를 제거하고 사용자에 대한 실행 권한을 추가합니다.

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

답변1

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

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

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

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

sudo /sbin/sysctl vm.drop_caches=3

귀하의 스크립트에서.

관련 정보