web-dev-qa-db-ja.com

Sudo特権でのpyCharmでのデバッグ?

Sudo pycharm.shを実行して、pyCharmでrootアクセスを必要とするコードをテストしましたが、これは、私がそうすることをお勧めする方法ではありません。

PyCharmでpythonインタープリターをSudoとして実行することで、Sudo特権でデバッグできることを知っていますが、どうすればよいですか?

15
Dayan

「Sudo python」を実行して引数を転送するシェルスクリプトを作成し、そのスクリプトをPyCharmのPythonインタープリターとして構成します。

このシェルスクリプトの名前はpythonで始まる必要があります(ソース: http://forum.jetbrains.com/message/PyCharm-424- )。

8
yole

それだけの価値があるので、私は次のようにpythonスクリプトを(Ubuntu 16.04で)Sudo特権で実行しました:

  1. スクリプトの最初の行で、次のようにインタープリターを定義します。

    #!/usr/bin/Sudo python

  2. スクリプトを実行可能にします。

    chmod +x myscript.py

  3. pythonインタープリターを自分で指定せずに、スクリプトを直接実行します:

    ./myscript.py

  4. スクリプトはSudoパスワードを要求し、昇格された特権で実行を続けます。
4

私はこの問題を解決する別の方法に遭遇したので、それを共有しようと思いました(この回答は、他の回答の代わりのようなものです).

このソリューションは、ルートモードでpycharmアプリケーション全体ではなく、特定のPythonスクリプト(pycham IDE内))のみを実行することによって問題を「攻撃」することをここで言及する価値があります。

1)無効にする Pythonを実行するにはパスワードが必要:

これは、/ etc/sudoers.d/pythonファイルを編集することで実現されます。次のように、そのファイルにエントリを追加する必要があります。

ユーザーHost =(root)NOPASSWD:full_path_to_python、例えば:

guya ubuntu = (root) NOPASSWD: /usr/bin/python

ノート:

userは次のコマンドで検出できます:whoami

Hostは次のコマンドで検出できます:hostname

2)作成 "Sudoスクリプト":このスクリプトの目的は、python rootユーザーとして実行する特権を与えることです。

Python-Sudo.shというスクリプトを作成し、それに以下を追加します。

#!/bin/bash
Sudo /usr/bin/python "$@"

このパスは、前のフェーズと同様にPythonへのパスです。

次のコマンドを使用して、このスクリプトに実行権限を与えることを忘れないでください:chmod

chmod +x python-Sudo.sh

)使用python-Sudo.sh pycharmインタープリターとしてのスクリプト:

Pycharm内に移動:File --> Settings --> Project interpreter

右上の「設定」アイコンをクリックし、「ローカルを追加」をクリックします。

ブラウザオプションで、以前に作成したpython-Sudo.shスクリプトを選択します。これはPyCharmにpythonスクリプトをrootとして実行する特権を与えます。

4)デバッグテスト:あとは、実際にpycharm IDEの特定のPythonスクリプトをデバッグするだけです。これは、右クリックして簡単に実行できます。デバッグするスクリプト->ヒットDebug sample_script_to_debug.py

それがお役に立てば幸いです。このアプローチに誤りがあるかどうかをお知らせください。

乾杯、

男。

3
Guy Avraham

Raspberry PiでBluetooth関連のコードをデバッグしようとすると、同じ問題が発生しました。デバイスでリモートデバッグを実行しているので、デバイスは開発専用です。そのような場合、私の控えめなオプションでは、ssh rootログインを許可する必要があります。これにより、PyCharmがrootユーザーを使用するように構成でき、Sudoを使用する必要がなくなります。それが私が選択したソリューションです。

次の手順はRaspberry Piを対象としていますが、手順はどのLinuxディストリビューションでも同じです。

まず、公開鍵をauthorized_keysに追加します。

cat ~/.ssh/id_rsa.pub | ssh pi@raspberrypi "mkdir -p ~/.ssh && cat >> 
~/.ssh/authorized_keys"

次にRaspberry Piにログインします。

ssh pi@raspberrypi

コンソールを取得したら、キーをrootディレクトリにコピーします。

Sudo mkdir /root/.ssh
Sudo cp authorized_keys /root/.ssh/

最後にsshd_configを編集してPermitRootLogin without-passwordを追加します。

Sudo vim /etc/ssh/sshd_config

任意のエディターを使用します。

これで、Raspberry Piの内部でrootとしてsshを実行できます。

ssh root@raspberrypi

代わりにrootまたはpiユーザーを使用すると、BlueZで必要なルート権限を使用して、リモートからでもコードを実行できます。

2
noun

この問題を解決するには、家に/usr/bin/python3をコピーしてから、cap_net_bind_service機能を設定します。

cp /usr/bin/python3 ~/python35-setcap
Sudo setcap 'cap_net_bind_service=+ep' ~/python35-setcap

そして~/python35-setcapをpycharmでpythonインタプリタとして使用します。

このようにすると、下位のポートをバインドできますが、python 3プログラムはそれを実行できません。pycharmはスクリプトを強制終了できます。さらにセキュリティが必要な場合は、実行権限を自分に制限することもできます。

2
Robin Thoni

PyCharmの新しいバージョンでは、Pythonインタープリターをルートで実行するように構成されています。回避策は必要ありません。下の画像を参照してください。チェックボックスをオンにします:このインタープリターを使用して、Sudo経由でルート権限でコードを実行します

enter image description here

1
phapli

ターミナル:

Sudo ./Pycharm

このようにして、スーパーユーザーとしてPyCharmを起動できます

0
Richard

私は指示に従います ここ と成功。しかし、Sudoを使用すると、PYTHONPATHが無効になるという問題があります。で編集すると

Sudo visudo -f /etc/sudoers.d/python

それを追加してください:

user Host = (root) NOPASSWD:SETENV: /home/yizhao/anaconda3/bin/python

また、スクリプトは次のようになります。

#! /bin/bash
Sudo PYTHONPATH=$PYTHONPATH /home/name/anaconda3/bin/python "$@"
0
user547960

よりクリーンなソリューションを探していて、毎回パスワードを入力してもかまいません。

Run Configuration>Edit Configurationsに移動します

「実行」の下で、出力コンソールで端末をエミュレートするオプションをチェックします。

これにより、Pythonスクリプトをデバッグしながら、現在のユーザーを維持し、必要に応じてスクリプトにSudo特権を昇格させることができます。また、複数の仮想環境で作業する場合に、異なる仮想環境を維持しやすくなります。プロジェクト。

enter image description here

0
HyperionX