わかりました。バイナリは別の場所にあります。。私が理解していないのは、なぜそれを実行するとatと表示されますがwhereis
、それで実行しようとするとI can't run itと表示されることです。which
type
vim
/usr/bin/vim
sudo
/bin/vim
リンクではなく、内容も同じです。しかし、sudo
私は処刑する権利があります/usr/bin/vim
、これは呼び出されません。なぜかわからない!
[user@host conf.d]$ sudo vim test.conf
[sudo] password for user:
Sorry, user user is not allowed to execute '/bin/vim test.conf' as root on host.domain.com.br.
[user@host conf.d]$ whereis vim
vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
[user@host conf.d]$ which vim
/usr/bin/vim
[user@host conf.d]$ type vim
vim is /usr/bin/vim
[user@host conf.d]$ ll /bin/vi*
-rwxr-xr-x. 1 root root 910040 Jun 10 03:56 /bin/vi
lrwxrwxrwx. 1 root root 2 Set 30 11:38 /bin/view -> vi
-rwxr-xr-x. 1 root root 2289656 Jun 10 03:56 /bin/vim
lrwxrwxrwx. 1 root root 3 Set 30 12:14 /bin/vimdiff -> vim
-rwxr-xr-x. 1 root root 2084 Jun 10 03:56 /bin/vimtutor
[user@host conf.d]$ ll /usr/bin/vi*
-rwxr-xr-x. 1 root root 910040 Jun 10 03:56 /usr/bin/vi
lrwxrwxrwx. 1 root root 2 Set 30 11:38 /usr/bin/view -> vi
-rwxr-xr-x. 1 root root 2289656 Jun 10 03:56 /usr/bin/vim
lrwxrwxrwx. 1 root root 3 Set 30 12:14 /usr/bin/vimdiff -> vim
-rwxr-xr-x. 1 root root 2084 Jun 10 03:56 /usr/bin/vimtutor
[user@host conf.d]$ md5sum /usr/bin/vim
e5a9c498add4fa49a39a720a826f954c /usr/bin/vim
[user@host conf.d]$ md5sum /bin/vim
e5a9c498add4fa49a39a720a826f954c /bin/vim
[user@host conf.d]$
答え1
検索パスに関するいくつかの基本
たとえば、スラッシュなしでコマンドを実行する場合、vim
シェルは実行するファイル(またはシェル組み込みコマンド/関数)を知る必要があります。環境変数で定義されている検索パスに沿ってそれを見つけますPATH
。このPATH
変数は、シェルが各パスでコマンド名を検索する順序でコロンで区切られたパスのリストです。
たとえば、デフォルトのPATH
Debian インストールは次のようになります。
/usr/local/bin:/usr/bin:/bin
/usr/bin/vim
この場合、およびの出力に示されているように最初に探します。which vim
type vim
sudo
env_reset
そしてoptionsを指定してコマンドを実行すると、検索パスが渡したコマンドをsecure_path
実行する前のsudo
内容にリセットされます。secure_path
これは、実行したコマンドにsudo
次のものがある可能性があることを意味します。その他検索パスとさまざまな実行可能ファイルは、コマンドを直接実行して見つけることができます。
たとえば、sudo
PATH
Debianの基本は次のようになります。
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
あなたのシナリオ
ここで何が起こるのかは、secure_path
前の順序を指定するか、後者が単に存在しないということです。この場合、シェルは存在するので、これを見つけて結局発見することになります。そして、ホワイトリストにしかない場合、前者は実行が許可されない可能性があります。/bin
/usr/bin
vim
/bin/vim
/usr/bin/vim
PATH
を使用して現在の状態を確認できますecho $PATH
。を使用して確認できますsudo
。管理者が許可専用ホワイトリストを設定した場合は、入力してコマンドを実行できます。PATH
sudo env | grep PATH
vim
sudo vim
:echo $PATH
絶対パス(たとえば)を指定して問題を解決できますsudo /usr/bin/vim
。
なぜsecure_path
存在するのですか?
についてはなぜ sudo
別のルートを設定し、次の攻撃シナリオを検討してください。
あなたのものはPATH
ただの環境変数です。これはさまざまな方法で設定でき、ユーザーには表示されない場合があります。誰でも書き込むことを許可する安全でないディレクトリがある可能性があります。誰かがこのような悪意のある実行可能ファイルを生成した場合、ls
それを実行するとls
実際のls
.
ただし、被害はお客様のアカウントがアクセスできるコンテンツに限定されます。今実行しているとします。リセットするのではなく、現在からインポートしているsudo ls
場合は、root権限で悪意のある実行可能ファイルを実行しています。自分のユーザーとして実行するよりもはるかに多くのダメージを与える可能性があります。PATH
PATH
PATH
これで、ファイルをファイルに挿入したり、ファイルを修正したりする攻撃者がすでにPATH
多くのダメージを与える可能性があると主張することができます。あなたの言葉が正しいかもしれません。の使用については両方とも意見が異なりますsecure_path
ので、ここでは詳しく説明しません。