![특정 명령어 사용 금지](https://linux55.com/image/94301/%ED%8A%B9%EC%A0%95%20%EB%AA%85%EB%A0%B9%EC%96%B4%20%EC%82%AC%EC%9A%A9%20%EA%B8%88%EC%A7%80.png)
클러스터에서 도구를 개발합니다. 각 사용자는 자신의 에 로그인 노드를 가지고 있습니다 .bash_profile
.특정 도구를 실행하면 안 되는 로그인 노드가 있습니다. 사용자가 특정 노드에서 이러한 도구를 사용하지 못하게 하려면 어떻게 해야 합니까?
지금까지 나는 원래 도구를 재정의하여 함수에서 도구 명령을 재정의하는 것을 고려했습니다.
$ tool # Launches the tool normally.
$ vim common-env.sh # Is sourced in each user's .bash_profile
function tool() {
if [ $(is_in_forbiden_node) -eq 0 ]; then
echo "You have to leave node X before launching this command!"
return 1 # Forbids the use of the original tool.
else
command tool # Launches the original tool normally.
fi
}
export -f tool
이것은 효과가 있지만 완벽하지는 않습니다. 사용자는 다음을 입력하여 이 제한을 피할 수 있습니다.
$ command tool
또는:
$ /usr/bin/env tool
대안은 무엇입니까? 나는 시스템 관리자가 아니므로 관리자 권한이 필요한 모든 작업은 나에게 도움이 되지 않습니다.
답변1
새 그룹을 만들고, 실행 파일에 새 그룹을 부여하고, 실행 파일에서 실행 비트(및 읽기 권한)를 제거합니다.
이것은 "게임" 프로그램에 대한 일반적인 접근 방식이지만 여러분이 찾고 있는 것과 매우 유사하다고 생각합니다.
답변2
집행권이 없으면 남은 유일한 자리는 tool
자기 자신뿐이다. 특히, tool
허용된 노드에서 실행되고 있는지 확인해야 합니다.
이 검사를 수행하는 방법에 주의해야 합니다. 예를 들어 환경 변수는 신뢰할 수 없습니다. 또한 허용되는 경우 도구를 확인하고 실행하는 셸 스크립트와 같은 래퍼는 사용자가 실제 도구를 먼저 호출할 수 있으므로 작동하지 않습니다.