代码之家  ›  专栏  ›  技术社区  ›  kmh

sudo还是不sudo?[副本]

  •  0
  • kmh  · 技术社区  · 6 年前

    这个问题已经有了答案:

    最终目标是在Redhat机器上的shell脚本内部运行这个命令。我在Ubuntu机器上使用这个脚本已经很多年了,但是我在Redhat上的特权更少了。我将在下面描述我尝试的解决方案,但我想先提出问题。

    read -r val1 val2 val3 <<<$(python3 script_name.py "$json_args")
    

    在RedHat中,我不得不安装python/pip3.5作为sudo…这样地。。。

    sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
    sudo yum -y install python35u
    sudo yum -y install python35u-pip
    sudo pip3.5 install --upgrade pip
    
    sudo pip3.5 install boto3
    sudo pip3.5 install awscli --upgrade --user
    

    不同的机器可能有不同的python版本,所以我为 python3 在.bash_配置文件中,相同的shell脚本可以在任何地方工作。

    echo 'alias python3="python3.5"' >>~/.bash_profile
    

    现在。。。一切都被巨蟒锁住了…我可以进口Boto3,但不能用…从python3命令行演示…

    >>> import boto3
    >>> boto3.__version__
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: module 'boto3' has no attribute '__version__'
    

    所以我试着用“sudo”来运行python3,但是…

    sudo: python3: command not found
    

    所以我给bashrc加了个别名…

    echo 'alias sudo="sudo "' >>~/.bashrc
    

    伟大的!现在一切似乎都正常了!我终于可以运行我最初想要的命令(见下文)。

    sudo python3 script_name.py args
    

    或者更具体地说( 注意添加的 sudo 与我的介绍相比……

    read -r val1 val2 val3 <<<$(sudo python3 script_name.py "$json_args")
    

    在指挥线上表现出色!

    …直到我把它放进一个shell脚本。现在我又回到原来的错误…

    sudo:python3:找不到命令
    

    我试过各种各样的东西…正在将“sudo”别名放入脚本中…把它放在/root/.bashrc中…其他一些随机的事情。

    在这一点上,我怀疑我也可以用sudo来运行bash脚本…但这开始导致各种其他问题,我怀疑这是一个相当糟糕的安全实践。我觉得我已经偏离了轨道,这里有一些更聪明的解决方案。

    有什么主意吗

    • 如何在没有sudo的情况下运行python3.5并使其工作
    • 如何获得 sudo python3 在shell脚本中工作而不以sudo形式运行shell脚本?

    提前谢谢

    编辑

    根据以下@julianloaiza和@terryacmen的建议, chown -R 允许我运行python3而不使用 苏多 …但当我这样做的时候,Boto3不能再授权我了。检查 sys.path 从python的角度来看,只有一个区别…那是

    • '/root/.local/lib/python3.5/site-packages'
    • 带/不带sudo有: '/home/ec2-user/.local/lib/python3.5/site-packages'

    两者都有 '/usr/lib/python3.5/site-packages' 最后一个(包含我显式安装的libs)。

    可能会发生什么… /root/.local/lib/python3.5/site-packages 没有关于awscli或boto的内容… /home/ec2-user/.local/lib/python3.5/site-packages 里面有“awscli”和“botocore”的东西。也一样 /usr/lib/python3.5/site-packages …它也有boto3和其他libs,我明确地输入。

    python可能会因为查找而感到困惑吗? /home/ec2-user/.local/lib/python3.5/site-packages 之前 /usr/lib/python3.5/站点包 当我没有以“sudo”身份登录时?

    2 回复  |  直到 6 年前
        1
  •  1
  •   jww avp    6 年前

    您可以尝试更改文件夹所有权,

    sudo chown -R ec2-user:ec2-user /usr/lib/python2.7
    sudo chown -R ec2-user:ec2-user /usr/lib64/python2.7
    
        2
  •  1
  •   Terry Carmen    6 年前
    sudo: python3: command not found
    

    它找不到您的Python版本。

    您需要指定python二进制文件的完整路径:

    read -r val1 val2 val3 <<<$(sudo /location/of/your_python script_name.py "$json_args")
    

    一旦运行了它,如果Python找不到它的依赖项,可以添加

    import sys
    sys.path.append('/location/of/your_python_libs')
    

    到您的python代码

    至于sudo,您可以选择修复代码、目录和用户,这样它就不需要根目录,或者继续使用sudo。这不是一个好的实践,但在一天结束的时候,它们是你的系统和决定。