• [Python]Django项目运行中系统用户为非root用户,需要去执行sudo命令并且不用输入密码(提升权限)


    项目场景:

    项目场景:Django项目运行中系统用户为uwsgi用户(非root),需要去执行sudo命令并且不使用密码,下面以nginx -s reload为例


    问题描述

    Django项目运行中系统用户为uwsgi,需要去执行sudo命令并且不使用密码。

    # 重启nginx
    restart_nginx_res = subprocess.run(['nginx -s reload'], shell=True, stdout=subprocess.PIPE)
    debug("{}:return_code".format(restart_nginx_res.returncode))
    
    • 1
    • 2
    • 3

    原因分析:

    问题分析:普通用户需要使用sudo的时候会需要输入密码,提示下列信息:

    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:
    
        #1) Respect the privacy of others.
        #2) Think before you type.
        #3) With great power comes great responsibility.
    
    sudo: no tty present and no askpass program specified
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    解决方案:

    具体解决方案:修改Python代码并以root权限执行脚本或手动加上nginx执行权限

    # 重启nginx
    restart_nginx_res = subprocess.run(['sudo nginx -s reload'], shell=True, stdout=subprocess.PIPE)
    debug("{}:return_code".format(restart_nginx_res.returncode))
    
    • 1
    • 2
    • 3

    以root用户执行shell脚本

    #!/bin/bash
    # 将visudo自动配置
    grep 'uwsgi   ALL=(ALL)   NOPASSWD:/usr/sbin/nginx' /etc/sudoers > /dev/null 2>&1 || add_sudoer
    
    • 1
    • 2
    • 3

    或者

    [root@bogon NetworkRange]# visudo
    #加上nginx的执行权限
    uwsgi   ALL=(ALL)   NOPASSWD: /usr/sbin/nginx
    
    • 1
    • 2
    • 3
  • 相关阅读:
    Spring学习笔记(四)--spring配置文件schema约束
    05 网络和防火墙等其他
    Raft协议浅析
    C#餐饮收银系统
    python flask配置邮箱发送功能,使用flask_mail模块
    无需公网IP,实现外网远程访问管家婆ERP进销存系统的方法
    C++对多继承的理解
    使用 React Three Fiber 和 GSAP 实现 WebGL 轮播动画
    C. String Equality(思维)
    STL中set的基本概念与使用
  • 原文地址:https://blog.csdn.net/Richchigga/article/details/125453283