この試練を経た後もまだbashを使用していますか?

この試練を経た後もまだbashを使用していますか?

Mountain Lionホストで、次のコマンドを使用してユーザーとしてログインCoguaroしました。coconutpowderbash

Coguaro:~ coconutpowder$ echo $0
-bash

高い権限でコマンドを実行する必要があるため、切り替えを試みましたがsu許可rootされていません。

Coguaro:~ coconutpowder$ su -
Password:
su: Sorry

やめれば十分だ。私はそのmanページを読んでsuこれを得ました:

PAM is used to set the policy su(1) will use.
In particular, by default only users in the ``admin'' or ``wheel''
groups can switch to UID 0 (``root'').

su私はこれを行うことが許可されているどのグループにも属していないことを確認しました。

Coguaro:~ coconutpowder$ id
uid=502(coconutpowder) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts)

suしたがって、コマンドを再実行して前にaを付けると、sudo次のようになります/etc/sudoers

/etc/sudoers: coconutpowder ALL=(ALL) ALL

Coguaro:~ coconutpowder$ sudo su -
Coguaro:~ root# echo $USER $0 $BASH_VERSION
root -sh 3.2.48(1)-release
Coguaro:~ root# 

今私は私が見ていることを実際に実行しているので、問題があると思われるシナリオに直面しています。shこれは最終的に私のログインシェルですが、以前のログインで設定された環境変数がrootあり、BASH_VERSIONそのメカニズムを通過しましたsudo。間違っていたら訂正してください。

これは、次のような一部のシェル検出トリックが破損していることを意味します。

if [ ${BASH_VERSION-not_running_within_bash} = not_running_within_bash ]; then
  # ...
fi

su私はそれを正しく実行する方法を知りませんし、決定するroot方法があります。確認する私がそれを使用するかどうかbash。スクリプトは、一部の値が無効な場合にファイルシステムパスを破損する可能性があるBash配列を広く使用しています。他の場所で言及したハッキン​​グが少しのハッキング(?!)であることがわかったので、最初にps -p $$ログインする必要があり、自分でcoconutpowder行うことができないことを考慮して、達成したいタスクを実行するための最良の方法を探しています。root

誤ってユーザー切り替えを行う場合、問題は他の側が電流のみを検出することに関連していると思います(代わりに「基本」または「割り当てられた」)シェル。

これまで$ 0の解析を準備しており、-ログインシェルを表すプレフィックス文字を削除することもできます。

suログイン方法root(例:$ HOME / .profileを読む)とbashdefaultからdefaultに直接切り替える方法を知らない限り、shこれは変更できません。

ベストアンサー1

今、私は実際に見ているものを見るためにshを実行しているので、問題があると思うシナリオに直面しています。結局、これは私のrootログインシェルですが、以前のログインでBASH_VERSION環境変数が設定されています。そしてsudoを通してメカニズムを渡しますか?間違っていたら訂正してください。

幸いなことに、あなたは間違っていました。同様の環境変数は次のとおりですBASH_VERSION置く、しかし出口したがって、子プロセスには存在しません。

出力比較:

set | grep ^BASH

そして

env | grep ^BASH

setどちらもenv環境変数を表示します。変数をset表示できる組み込みシェルですBASH_*env外部プログラムなので、BASH_*変数がまったく表示されないことがわかります。

もしあなたならしたこれらの変数を子プロセスにエクスポートするには、手動で実行すると次の場所に表示されますenv

$ export BASH_VERSION
$ env | grep ^BASH
BASH_VERSION=4.2.36(1)-release

しかし、このように手動でエクスポートしない限り、存在することはBASH_VERSION実際にbashを実行していることを意味するとかなり確信で​​きます。また、export -pどの変数がこの方法でエクスポートされたかを確認するには、出力を参照してください。

おすすめ記事