Mountain Lionホストで、次のコマンドを使用してユーザーとしてログインCoguaro
しました。coconutpowder
bash
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を読む)とbash
defaultから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
どの変数がこの方法でエクスポートされたかを確認するには、出力を参照してください。