모든 명령이 별명으로 정의되지 않도록 방지 rm별칭 이름으로 다른

모든 명령이 별명으로 정의되지 않도록하는 방법이 있습니까?

예를 들어, 사용자는 rm별칭 이름으로 다른 명령 (Ubuntu 기본 명령) 을 정의 할 수 없어야합니다 .



답변

사용자가 선호하는 별칭을 정의하지 못하게 할 방법이 없습니다. 치다:

  1. 에서 별칭을 사용 중지합니다 /etc/bash.bashrc. 원하는 곳 어디에서나 가능합니다.
  2. 당신은 모든 별칭의 언급 삭제 /etc/bash.bashrc, 모든 ~/.bashrc~/.bash_aliases스크립트를 통해. 별명을 다른 파일에 넣고 소싱합니다.
  3. PROMPT_COMMAND특정 별칭을 비활성화 하는 명령을 실행 합니다. 그들은 재정의하거나 정의를 해제 PROMPT_COMMAND합니다.
  4. DEBUG별명을 트랩 및 정의 해제합니다. 그들은 함정을 제거합니다.
  5. 당신은 루트에 대한 호출에서 소스 된 모든 파일을 chown. 이들은 다른 파일을 사용하여 처음 실행하는 명령으로 수동으로 소싱합니다.
  6. 당신은 내장 명령을 해제 unset, builtinenable; 기능을 만드십시오alias ; declare -rf alias사용자가 기능을 수정하지 못하게하기 위해; 함수를 내 보냅니다. 그들은 실행 /bin/bash으로 --rcfile하고--init-file 내장 명령은 이제 것을 가능하게 새로운 쉘을 시작합니다.

컴파일 타임에 별칭을 비활성화 할 수 있습니다. bash를 최신 상태로 유지하고 다음 Shellshock의 영향을받지 않는 것은 사용자의 몫입니다. 물론 사용자는 자신의 배쉬를 만들 수 있습니다.


답변

TL; DR

사용자가 별칭을 만들지 못하게하는 유일한 방법은 별칭을 지원하지 않는 쉘을 제공하는 것입니다. 이것은 일반적으로 X / Y 문제입니다. 여기서 X는 실제로 사용자에게 공유 시스템의 쉘이 제공된 후 사후 에 문제를 해결하기보다는 적절한 제어 또는 아키텍처로 해결해야하는 위협 모델입니다 .

아래에서는 기술적으로 올바른 답변과 이로 인해 해결되지 않을 문제에 대한 지침을 제공합니다. 또한 대체 제어에 대한 추가 지침을 제공합니다.

Bash Restricted Shell 사용

rbash를 사용자의 로그인 쉘로 지정 하여 Bash의 제한된 쉘 을 사용할 수 있습니다 . 예를 들면 다음과 같습니다.

foo:x:2001:2001:restricted user:/home/foo:/bin/rbash

그런 다음 다른 사람의 셸을 손상시키지 않으면 서 사용자의 기본 제공 별칭 을 비활성화해야합니다 . 예를 들어, /etc/profile.d/rbash.sh 와 같은 파일에 다음을 추가 할 수 있습니다 .

# Limit effect to users in a specific UID range.
if ((UID >= 2000)) && ((UID < 3000)); then
    # Check shell options; disable alias builtins when shell is restricted.
    if [[ $- =~ r ]]; then
        enable -n alias
        enable -n unalias
    fi
fi

경고

사용자를 chroot jail에 넣거나 다른 쉘에 대한 액세스를 포함하지 않는 수정 된 PATH 를 제공하지 않는 한, 사용자 bash가 프롬프트 에서 간단히 입력 하고 무제한 쉘을 얻는 것을 막을 수있는 것은 없습니다 .

또한 설계 상 제한된 쉘은 디렉토리 변경과 같은 많은 일반적인 활동을 방지합니다.

$ cd /tmp
rbash: cd: restricted

그러나 PATH의 다른 스크립트 나 프로그램이 그렇게하는 것을 막지는 않습니다 . 이는 사용자 환경을 신중하게 조작해야하며, 특히 rbash가 PATH를 읽기 전용으로 설정하더라도 초기화 후에 수행 하기 때문에 시작 파일에서 PATH 를 수정하지 못하도록해야합니다 .

더 나은 선택

rbash를 사용하더라도 광범위한 제어 세트의 일부로 수행해야합니다. 몇 가지 예는 다음과 같습니다.

  • 의 방지가 아닌 기술적 인 사용자가 실수로 같은 기본 별칭을 제공하여 호출 위험한 명령 rm -i, mv -icp -i/etc/bash.bashrc의 파일.

    • 원래 예를 들어, 아마도 가장 합리적인 솔루션 일 것입니다.
    • 원하는 enable -n alias경우 이것을 결합 할 수 있습니다 .
    • 이것은 알 수없는 사용자가 별칭을 변경하는 것을 방지하지는 않지만, 기술이 아닌 사용자가 관심있는 작업을 수행하지 못하게하는 것으로 충분할 수 있습니다.
  • 파일 및 디렉토리를 보호하기위한 기존 Unix 권한 또는 POSIX ACL

  • 단일 비 대화식 명령을 수행하는 로그인. 예를 들면 다음과 같습니다.

    foo:x:2001:2001:run foo.sh:/home/foo:/usr/local/bin/foo.sh
  • 키별 SSH 강제 명령을 사용하십시오. 예를 들면 다음과 같습니다.

    # ~foo/.ssh/authorized_keys
    command="/usr/local/bin/foo.sh" [remainder of line]
  • 조건부 일치 블록과 함께 OpenSSH ForceCommand 옵션을 사용하십시오 .

  • gitolite 또는 scponly 와 같은 특수 도구를 사용 하여 특정 사용 사례에 맞게 사용하십시오.

  • chroot jail을 사용하십시오 .

  • Xen, OpenVZ, LXC, VMware, VirtualBox 또는 기타 기술과 같은 가상화를 사용하여 분리 된 환경을 제공하십시오.

위협 모델을 정확하게 정의하면 사용 사례에 가장 적합한 제어를 식별 할 수 있습니다. 앨리어싱을 방지하려는 이유 (예 : 실제 문제가 해결 되는 이유)에 대한 이해가 없으면 가장 적절한 컨트롤을 선택할 수 없습니다.


답변

muru의 답변에서 알 수 있듯이 이것은 무의미한 노력입니다. 그러나 몇 가지 옵션이 있지만 완벽하지는 않습니다.

bash매뉴얼 에 따르면 함수는 항상 별칭보다 우선하므로 다음을 수행 할 수 있습니다.

xieerqi@eagle:~$ function alias { echo "Aliases are no-no" ; }
xieerqi@eagle:~$ alias TEST='rm'
Aliases are no-no

함수 정의를 시스템 전체에 배치 할 수 .bashrc있지만, muru이 지적한 것처럼 똑똑한 사용자는 bashrc예를 들어 다른 파일을 소싱하여 별칭을 얻는 방법을 찾을 수 있습니다.

내가 연주 한 또 다른 아이디어는 enable내장되어 있습니다.
alias내장 쉘이며 내장 기능을 활성화 또는 비활성화 할 수있는 bash멋진 enable명령이 있습니다. 예를 들어, 여기 내가 비활성화되어 alias있습니다.

xieerqi@eagle:~$ enable -n alias
xieerqi@eagle:~$ alias
No command 'alias' found, did you mean:
 Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ alias TEST='rm'
No command 'alias' found, did you mean:
 Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ enable alias
xieerqi@eagle:~$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
xieerqi@eagle:~$ 

여기서도 시스템 전체 bashrc를 사용하는 것이 옵션입니다.


답변

당신은 (에 정의 /etc/profile라는 함수) alias검증 당신이 (아마 사용하여 원하는 작업을 수행 type -p(모든 “우분투의 기본 명령”후가 “에서 실행됩니다) $PATH내장을 호출하기 전에”) alias다른 사람들이 지적 밖으로을 가지고, 사용자가 얻을 수있는,하지만 그 주위. 다른 사용자 집합을 얻거나 교육하지 않는 이유는 무엇입니까 ( ” alias명령을 재정의 하는 것을 정의하는 것이 매우 중요 ls합니다. 예를 들어, 암호를 묻는 메시지가 표시되는 이유는 무엇 입니까?)?