すべてのコマンドがエイリアスとして定義されないようにする方法はありますか?
たとえば、ユーザーは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の影響を受けないようにする必要があります。もちろん、ユーザーは自分のbashを作成することができます。
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内の他のスクリプトまたはプログラムがそれを行うことを妨げません。これは、ユーザーの環境を慎重に作成する必要があることを意味します。具体的には、ユーザーがスタートアップファイルのPATHを変更できないようにする必要があります。これは、rbashが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]
条件付きMatchブロックでOpenSSH ForceCommandオプションを使用します。
chroot jailを使用してください。
Xen、OpenVZ、LXC、VMware、VirtualBox、またはその他のテクノロジーなどの仮想化を使用して、分離された環境を提供します。
脅威モデルを正確に定義したら、ユースケースに最も適切なコントロールを特定できます。エイリアシングを防止したい理由(たとえば、実際にどのような問題が解決されるのか)をより深く理解しないと、最も適切なコントロールを選択できません。
ムルの答えが示すように、これは全く無意味な努力です。しかし、いくつかのオプションがありますが、それらは完璧ではありません。
bash
マニュアルによると、関数は常にエイリアスよりも優先されるため、次のようにすることができます。
xieerqi@eagle:~$ function alias { echo "Aliases are no-no" ; }
xieerqi@eagle:~$ alias TEST='rm'
Aliases are no-no
関数定義をシステム全体に配置することもできますが.bashrc
、muruが指摘したように、スマートユーザーは別のソースを使用してエイリアスを取得する方法を見つけますbashrc
、たとえばファイルをます。
私が試したもう1つのアイデアは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
(すべての「Ubuntuのデフォルトコマンドの」後「で実行可能です)$PATH
組み込みを呼び出す前に」) alias
、しかし、他の人が指摘したように、あなたのユーザーが得ることができますその周り。別のユーザーセットを取得したり、教育したりしないのはなぜですか(「alias
コマンドをオーバーライドするを定義することは、自分を足で撃つための非常に良い方法であり、混乱を引き起こしls
ます(たとえば、なぜパスワードを要求するのですか?)」