/usr/bin/vim および /bin/vim

/usr/bin/vim および /bin/vim

わかりました。バイナリは別の場所にあります。。私が理解していないのは、なぜそれを実行するとatと表示されますがwhereis、それで実行しようとするとI can't run itと表示されることです。whichtypevim/usr/bin/vimsudo/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変数は、シェルが各パスでコマンド名を検索する順序でコロンで区切られたパスのリストです。

たとえば、デフォルトのPATHDebian インストールは次のようになります。

/usr/local/bin:/usr/bin:/bin

/usr/bin/vimこの場合、およびの出力に示されているように最初に探します。which vimtype vim

sudoenv_resetそしてoptionsを指定してコマンドを実行すると、検索パスが渡したコマンドをsecure_path実行する前のsudo内容にリセットされます。secure_pathこれは、実行したコマンドにsudo次のものがある可能性があることを意味します。その他検索パスとさまざまな実行可能ファイルは、コマンドを直接実行して見つけることができます。

たとえば、sudo PATHDebianの基本は次のようになります。

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

あなたのシナリオ

ここで何が起こるのかは、secure_path前の順序を指定するか、後者が単に存在しないということです。この場合、シェルは存在するので、これを見つけて結局発見することになります。そして、ホワイトリストにしかない場合、前者は実行が許可されない可能性があります。/bin/usr/binvim/bin/vim/usr/bin/vim

PATHを使用して現在の状態を確認できますecho $PATH。を使用して確認できますsudo。管理者が許可専用ホワイトリストを設定した場合は、入力してコマンドを実行できます。PATHsudo env | grep PATHvimsudo vim:echo $PATH

絶対パス(たとえば)を指定して問題を解決できますsudo /usr/bin/vim


なぜsecure_path存在するのですか?

についてはなぜ sudo別のルートを設定し、次の攻撃シナリオを検討してください。

あなたのものはPATHただの環境変数です。これはさまざまな方法で設定でき、ユーザーには表示されない場合があります。誰でも書き込むことを許可する安全でないディレクトリがある可能性があります。誰かがこのような悪意のある実行可能ファイルを生成した場合、lsそれを実行するとls実際のls.

ただし、被害はお客様のアカウントがアクセスできるコンテンツに限定されます。今実行しているとします。リセットするのではなく、現在からインポートしているsudo ls場合は、root権限で悪意のある実行可能ファイルを実行しています。自分のユーザーとして実行するよりもはるかに多くのダメージを与える可能性があります。PATHPATH

PATHこれで、ファイルをファイルに挿入したり、ファイルを修正したりする攻撃者がすでにPATH多くのダメージを与える可能性があると主張することができます。あなたの言葉が正しいかもしれません。の使用については両方とも意見が異なりますsecure_pathので、ここでは詳しく説明しません。

関連情報