사용자가 점 슬래시를 통해 디렉토리에서 명령을 실행하는 것을 방지하는 방법은 무엇입니까?

사용자가 점 슬래시를 통해 디렉토리에서 명령을 실행하는 것을 방지하는 방법은 무엇입니까?

디렉토리의 점-슬래시 표기법으로 명령 실행을 제한할 수 있는지 아는 사람이 있습니까?

환경은 Linux의 bash입니다.

예를 들어, 디렉토리가 있습니다 /usr/local/app/bin. In은 /usr/local/app/binfoo라는 명령입니다. 일부 사용자의 경우 로그인 중에 foo에 대한 별칭을 만들어 foo를 다른 곳으로 리디렉션합니다.

/usr/local/app/bin나는 이러한 사용자가 CD를 사용하여 foo를 직접 실행하는 것을 원하지 않습니다 .

$ ./foo

이러한 사용자는 /usr/local/app/bin에서 다른 명령을 실행할 수 있어야 하지만, 그렇게 하는 것이 차단된 경우 ./.

마지막으로, 내 목표는 특정 사용자가 대화형으로 로그인했을 때 foo를 대화형으로 실행하지 못하도록 제한하는 것입니다. 예를 들어 (대략) .bashrc에서는 다음과 같습니다.

if [ -z "$PS1" ]; then
:
else
alias foo="echo access denied!"
fi

이는 사용자가 ./를 사용하여 /usr/local/app/bin에서 foo를 직접 실행할 수 없으면 작동합니다. 파일은 실행 가능해야 하지만 전체 경로가 사용되는 경우에만 가능합니다. 누군가가 이것을 달성하는 영리한 방법을 알고 있기를 바랍니다.

답변1

얼마나 깊이 가고 싶은지에 따라 모든 것이 가능합니다. 쉘, 커널을 해킹하거나 selinux 또는 AppArmour에 들어가고 싶지 않다고 가정해 보겠습니다. 아니요, 파일 시스템 권한이나 acl을 변경하지 않고는 사람들이 foo(./foo 또는 다른 방법을 통해)를 실행하는 것을 막을 수 없습니다.

Linux에서는 실행 파일이 파일 권한 및 posix acl을 기반으로 실행됩니다. 실행할 수 있으면 실행할 수 있으며, 전체 경로로 실행해야 하는지 여부는 실행 파일 자체에서만 확인할 수 있습니다. 단순한 경로 문제라면 이를 셸로 감싸서 $0 매개변수를 확인할 수 있지만, 안전을 위해 이는 실마리가 있는 사람이라면 누구나 몇 초 안에 해결할 수 있는 난독화일 뿐입니다.

그렇지 않으면 이는 acl과 사용자 및 그룹 실행 가능성을 통해 처리됩니다. 그러나 사용자 계정, 파일 시스템 ACL 및 그룹을 관리해야 합니다.

일반적으로 파일은 관리자 계정이 소유하므로 대부분의 사용자 계정은 그룹 또는 기타 권한을 통해 작업을 수행합니다.

"기타"에서 실행 권한을 제거합니다.

chmod o-x /path/to/foo

foo의 그룹 멤버십을 신뢰할 수 있는 그룹으로 이동하고 그룹 실행 권한이 설정되었는지 확인하세요.

chgrp trusted /path/to/foo
chmod g+x /path/to/foo

이제 모든 사용자를 추가해야 합니다.~해야 한다foo를 신뢰할 수 있는 그룹으로 실행하는 기능.

for eachUser in a potentially a big long list of user accounts
do
    usermod --append --groups trusted $eachUser
done

이로 인해 발생하는 관리 오버헤드는 기존 Unix 권한이 그토록 나쁜 이유입니다.

posix acl의 경우 실행 권한 없이 사용자를 파일에 간단히 추가할 수 있습니다. 액세스 제어 목록을 읽으려면 getfacl을 사용하십시오.

for eachUser in a smaller list of restricted users
do
    setfacl -m user:$eachUser:000 /path/to/foo
done

acl 항목은 사용자 계정에 대한 것이므로 기본 사용자/그룹/기타 파일 시스템 권한보다 우선하며 사용자에게는 파일에 대한 권한이 없습니다. 다른 모든 사람은 정상적으로 파일을 사용할 수 있습니다.

그러나 수학적으로 더 나은 접근 방식은 제한된 모든 계정을 그룹에 넣은 다음 단일 사용자가 아닌 권한 없이 그룹을 파일에 추가하는 것입니다.

관련 정보