我正在使用 PyCharm 进行开发,开发一个使用 Python 的 scapy 模块进行端口扫描、嗅探流量和构建原始数据包的脚本。当然,这需要 root 权限,因此我以 root 身份运行 PyCharm(是的,我知道这会带来安全问题)。
问题是,当 PyCharm 联系公司许可证服务器时,它会提交当前用户名,当然,最终用户名是“root”,而许可证服务器拒绝了我的请求。如果我不以 root 身份启动 PyCharm,那么它会提交我的实际用户名并成功获得许可证,但我无法运行我的脚本,因为它需要 root 权限才能执行其操作。
有没有办法让 PyCharm 运行并将我的实际用户名提交给许可证服务器,然后拥有 root 权限,而不仅仅是编辑我的帐户来授予自己 root 权限?
答案1
如何以您自己的身份在本地机器上运行 PyCharm,并在容器内进行开发,例如由 Vagrant(PyCharm 原生支持)或 Docker(通过插件支持)提供的容器?
答案2
这对我有用(http://esmithy.net/2015/05/05/rundebug-as-root-in-pycharm/)。您实际上是为 python 创建了一个不同的解释器,它是一个使用 sudo 调用 python 的 shell 脚本。当它谈到创建 sudoers 文件 (/etc/sudoers.d/python) 时,我必须添加该行Defaults!/usr/bin/python2.7 !requiretty
以启用无需 tty 的执行。
答案3
虽然晚了三年,但标准 Linux(以及 BSD 和 MacOS)命令logname
会取得预期的结果。
My-Mac:~ devin$ logname
devin
My-Mac:~ devin$ sudo logname
devin
My-Mac:~ devin$ sudo su -
My-Mac:~ root# echo $USER
root
My-Mac:~ root# logname
devin
我相信logname
它查看了启动过程的 tty,所以我不确定这是否适用于完全无头的程序(例如在启动时运行的程序)。如果您启动然后通过 nohup 分离程序,它确实有效。
My-Mac:~ root# nohup logname
appending output to nohup.out
My-Mac:~ root# cat nohup.out
devin
答案4
我想sudo
非常适合。作为快速测试:
$ echo $USER
halosghost
$ sudo echo $USER
[sudo] password for halosghost:
halosghost
也就是说,我拥有更高的权限,但保留了我的用户身份。该-E
标志可能也特别有用。它确保在执行期间保留环境变量。