모든 명령이 별명으로 정의되지 않도록하는 방법이 있습니까?
예를 들어, 사용자는 rm
별칭 이름으로 다른 명령 (Ubuntu 기본 명령) 을 정의 할 수 없어야합니다 .
~/.bashrc
.
모든 명령이 별명으로 정의되지 않도록하는 방법이 있습니까?
예를 들어, 사용자는 rm
별칭 이름으로 다른 명령 (Ubuntu 기본 명령) 을 정의 할 수 없어야합니다 .
~/.bashrc
.
답변:
사용자가 선호하는 별칭을 정의하지 못하게 할 방법이 없습니다. 치다:
/etc/bash.bashrc
. 원하는 곳 어디에서나 가능합니다./etc/bash.bashrc
, 모든 ~/.bashrc
및 ~/.bash_aliases
스크립트를 통해. 별명을 다른 파일에 넣고 소싱합니다.PROMPT_COMMAND
특정 별칭을 비활성화 하는 명령을 실행 합니다. 그들은 재정의하거나 정의를 해제 PROMPT_COMMAND
합니다.DEBUG
별명을 트랩 및 정의 해제합니다. 그들은 함정을 제거합니다.unset
, builtin
및 enable
; 기능을 만드십시오alias
; declare -rf alias
사용자가 기능을 수정하지 못하게하기 위해; 함수를 내 보냅니다. 그들은 실행 /bin/bash
으로 --rcfile
하고--init-file
내장 명령은 이제 것을 가능하게 새로운 쉘을 시작합니다.컴파일 타임에 별칭을 비활성화 할 수 있습니다. bash를 최신 상태로 유지하고 다음 Shellshock의 영향을받지 않는 것은 사용자의 몫입니다. 물론 사용자는 자신의 배쉬를 만들 수 있습니다.
unalias alias
.
\unalias unalias
됩니다.
사용자가 별칭을 만들지 못하게하는 유일한 방법은 별칭을 지원하지 않는 쉘을 제공하는 것입니다. 이것은 일반적으로 X / Y 문제입니다. 여기서 X는 실제로 사용자에게 공유 시스템의 쉘이 제공된 후 사후 에 문제를 해결하기보다는 적절한 제어 또는 아키텍처로 해결해야하는 위협 모델입니다 .
아래에서는 기술적으로 올바른 답변과 이로 인해 해결되지 않을 문제에 대한 지침을 제공합니다. 또한 대체 제어에 대한 추가 지침을 제공합니다.
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 -i
및 cp -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 옵션을 사용하십시오 .
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
를 사용하는 것이 옵션입니다.
rm
목록을 확인합니다. 목록이 꽤 클 것으로 생각하면 시작하는 데 시간이 오래 걸리고 사용자는 많은 불만을 제기하고 시스템 관리자로서 당신을 미워할 것입니다 :)
당신은 수 (에 정의 /etc/profile
라는 함수) alias
검증 당신이 (아마 사용하여 원하는 작업을 수행 type -p
(모든 "우분투의 기본 명령"후가 "에서 실행됩니다) $PATH
내장을 호출하기 전에") alias
다른 사람들이 지적 밖으로을 가지고, 사용자가 얻을 수있는,하지만 그 주위. 다른 사용자 집합을 얻거나 교육하지 않는 이유는 무엇입니까 ( " alias
명령을 재정의 하는 것을 정의하는 것이 매우 중요 ls
합니다. 예를 들어, 암호를 묻는 메시지가 표시되는 이유는 무엇 입니까?)?