사용자가 입력한 명령이 적용되기 전에 이를 승인하는 방법이 있습니까?
예를 들어, 사용자가 명령을 입력하면 cp file1 file2
명령이 실행되지 않으며 , 사용자가 입력하는 명령을 "인증"하려면 루트/루트에 해당하는 사용자가 로그인해야 합니다.
이를 수행할 수 있는 도구/솔루션이 있습니까?
답변1
사용을 승인하려는 바이너리를 운영자에게 경고하고 요청된 작업을 저장하며 승인될 때까지 지연하는 래퍼로 교체할 수 있습니다. 그냥 실행을 제거그리고 읽어보세요(관련 사용자에 대해) 관련 프로그램의 권한을 부여하고 해당 사용자 경로 어딘가에 동일한 이름의 래퍼를 배치합니다. (해당 인터프리터에게 프로그램을 부여하여 프로그램 실행을 방지하려면 읽기 권한을 제거해야 합니다.)
그러나 이 세부 규정의 전반적인 아이디어는 무엇인지 묻고 싶을 수도 있습니다.보안SE. 나에게 그것은 해결되는 것보다 더 많은 문제를 일으키는 것 같습니다(어떤 문제라도 해결된다면). 제 생각에는 망치로 사과를 쳐서 오믈렛을 요리하려고 한다는 것입니다(예: 잘못된 도구를 잘못 사용하는 경우). 무언가를 성취하기 위한 장소).
답변2
거의 무의미하므로 명령을 승인하는 기본 메커니즘이 없습니다. 핵심 Unix 권한 메커니즘은 데이터에 대한 액세스를 보호하는 것입니다. 데이터를 읽을 수 있다면 원하는 대로 무엇이든 할 수 있습니다. 예를 들어, "읽기는 허용하지만 복사는 허용하지 않는다"(복사는 한 곳에서는 읽고 다른 곳에서는 쓰는 것)는 불가능합니다. 그런데 왜 시도할까요?
사용자가 파일에 액세스하는 것을 원하지 않으면 파일에 대한 액세스 권한을 부여하지 마세요.
때때로 사용자에게 파일에 대한 제어된 액세스 권한이 필요한 경우 이메일을 사용할 수 있습니다. "안녕하세요 Bob. wibble
어떤 이유에서인지 이 파일에 액세스해야 합니다. 파일을 보내주세요."
답변3
실행 전용으로 설정 sudo
하고물었다루트 사용자에게 보내는 명령
이것은 좋은 시작일 수 있습니다(루트로 로그인한 경우에만 작동함).
ps. 아직 테스트해보지 않아서 오류가 있을 수 있습니다.
function asksudo {
# for users
write root "asksudo from $(whoami):"
write root "\"$(whoami)\" \"$(PWD)\" && $*"
}
execsudo {
# to authorize root executes this with yes/no and the last line of the message
if [ "$1" = "no" ]
then
write $2 "Your command '${*:3}' has been denied" && exit 0
exit 1 # fails to send the message
fi
[[ "$1" != "yes" ]] && echo "invalid decision" && exit 1;
cd $3 && ${*:4}
write $2 "Your command '${*:3}' has been executed"
}