Debugging in pyCharm with sudo privileges?

2019-03-18 09:20发布

I've tested code that requires root access in pyCharm by running sudo pycharm.sh but this is not the way I would recommend of doing so.

I know it's possible to debug with sudo privileges by running the python interpreter as sudo in pyCharm but how do we do this?

标签: linux pycharm
6条回答
贼婆χ
2楼-- · 2019-03-18 09:51

I solved this problem by copying /usr/bin/python3 in my home, then setting cap_net_bind_service capability:

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

And then using ~/python35-setcap as python interpreter in pycharm.

This way, you can bind lower ports, but not any python 3 program can do it, and pycharm can still kill your script. You could also restrict execute permission to yourself if you want more security.

查看更多
一纸荒年 Trace。
3楼-- · 2019-03-18 09:54

I have encounter another way to solve this issue so I thought to share it (this answer is more like an alternative for the other answers).

It is worth to mention here that this solution "attacks" the problem by running only a certain Python script (within the pycham IDE) in root mode , and not the entire pycharm application.

1) Disable requiring password for running Python:

This will be achived by editing the /etc/sudoers.d/python file. What we need to do is to add an entry in that file as follows:

user host = (root) NOPASSWD: full_path_to_python, for example:

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

NOTES:

user can be detected by the command: whoami

host can be detected by the command: hostname

2) Create a "sudo script": The purpose of this script is to give python privilege to run as root user.

Create a script called python-sudo.sh , and add the following into it:

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

Note again that the path is the path to your Python as the previous phase.

Don't forget to give execution permissions to this script using the command: chmod

chmod +x python-sudo.sh

3) Use the python-sudo.sh script as your pycharm interpreter:

Within pycharm go to: File --> Settings --> Project interpreter

At the right top hand side click the "setting" icon, and click "Add local".

In the browser option choose the python-sudo.sh script we have created previously. This will give PyCharm the privilege to run a python script as root.

4) Debug the test: All there is left to do is actually debug the specific Python script in the pycharm IDE. This can be done easily via Right-click on the script to debug --> hit Debug sample_script_to_debug.py

Hope it was helpfull and let me know if there are any mistakes in this approach.

Cheers,

Guy.

查看更多
姐就是有狂的资本
4楼-- · 2019-03-18 10:04

Create a shell script that does "sudo python" and forwards the arguments, and configure that script as a Python interpreter in PyCharm.

Name of this shell script should start with python (source: http://forum.jetbrains.com/message/PyCharm-424-3).

查看更多
戒情不戒烟
5楼-- · 2019-03-18 10:04

For what it's worth, I've managed run a python script with sudo priviledges (on Ubuntu 16.04) like this:

  1. In the very first line in the script, define the interpreter like this:

    #!/usr/bin/sudo python

  2. Make the script executable:

    chmod +x myscript.py

  3. Run the script directly, without specifying the python interpreter yourself:

    ./myscript.py

  4. The script will ask for sudo password and continue running with elevated priviledges.
查看更多
唯我独甜
6楼-- · 2019-03-18 10:06

Terminal:

sudo ./Pycharm

this way you can start PyCharm as SuperUser

查看更多
我欲成王,谁敢阻挡
7楼-- · 2019-03-18 10:12

I have encountered the same problem trying to debug Bluetooth related code on a Raspberry Pi. I suppose, since you're doing remote debug on the device, that the device is for development use only. In such a case, in my humble option, you should permit ssh root login, so you can configure PyCharm to use the root user and you don't need to sudo. That's the solution I have chosen.

The following instructions are for a Raspberry Pi, but the procedure is the same for any Linux distribution:

First of all, add your public key to the authorized_keys:

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

Then login into the Raspberry Pi:

ssh pi@raspberrypi

Once you have a console copy your key into the root directory:

sudo mkdir /root/.ssh
sudo cp authorized_keys /root/.ssh/

Finally edit sshd_config adding PermitRootLogin without-password:

sudo vim /etc/ssh/sshd_config

Use your preferred editor.

Now you are able to ssh inside the Raspberry Pi as root:

ssh root@raspberrypi

Using root instead or pi user, give you the ability to run your code, even remotely, with root privileges, as required by BlueZ.

查看更多
登录 后发表回答