`

用sudo提高脚本程序的权限

 
阅读更多
用sudo提高脚本程序的权限

一,为什么要用sudo?
   sudo可以提高脚本程序的权限,例如:我们曾经遇到过这种问题,
   有一些文件需要通过web程序删除,但这些文件apache又没有权限访问,
   所以删除不了,给用户使用程序带来不便
   所以,这时需要借助于sudo来提高权限
  
   备注:
   1,apache为何没有权限?
     我们先来看一下apache的用户是谁?
     执行:ps auxfww
     可以看到:
     root       601  0.0  0.0 16092   80 ?        S     2008   0:56 /usr/sbin/httpd
     nobody   27493  0.0  0.2 19032 2468 ?        S    Feb08   0:14  \_ /usr/sbin/httpd
     nobody   27494  0.0  0.4 18392 4472 ?        S    Feb08   0:13  \_ /usr/sbin/httpd
     nobody   27495  0.0  0.3 18364 3252 ?        S    Feb08   0:19  \_ /usr/sbin/httpd
     nobody   27496  0.0  0.3 23888 3216 ?        S    Feb08   0:09  \_ /usr/sbin/httpd
  
     当前的apache的用户是nobody,
     此设置是由apache的配置文件httpd.conf所设置的

     接下来一个问题:我们何不把apache的用户设置root?
     这样太不安全,因为使用sudo就意味着风险,我们把权限提得越高,出现错误的可能性就越大,也就越危险

   2,apache和脚本是什么关系?
     这个要看安装时的设置,因为现在一般是把php安装为apache的一个模块,
     所以通过web访问php时,php的执行用户就是apache中所设置的用户

二,如何安装sudo?
   一般情况下,sudo作为发行版的标准配置已经默认安装,
   但也有未安装的情况,此时安装sudo这个rpm包即可
   也可用yum进行安装
   [root@dev ~]# yum install sudo

三,如何使用sudo?
   我举一个例子:用来删除无权限访问的图片
 
   分成三步:第一步:写一个bash脚本
          第二步:让sudo允许使用bash脚本
          第三步:在php程序中调用

   1,先写bash脚本:
      [root@store root]# vi /usr/sbin/delpic.sh
       #!/bin/bash
       rm -f $1.jpg
 
      修改权限使可被执行
      [root@store root]# chmod 755 /usr/sbin/delpic.sh

      说明:   delpic.sh中
             $1是从命令行接收到的第一个参数

   2,在修改sudo的配置文件/etc/sudoers之前,需要先使此配置文件可以被编辑
 
     我们看一下它的属性设置
     [root@store root]# ls -l /etc/sudoers
     -r--r-----    1 root     root          622 Aug 31  2007 /etc/sudoers
  
     下面设置属性,使/etc/sudoers可以被编辑,当然,编辑完成后还需要把权限恢复为原样
     [root@store root]# chmod 777 /etc/sudoers

     可以编辑了:
     [root@store root]# vi /etc/sudoers
     添加一行:
     nobody ALL = NOPASSWD: /usr/sbin/delpic.sh

     完成后再恢复配置文件原有的属性
     [root@store root]# chmod 440 /etc/sudoers

    说明:
    添加到配置文件中的一行命令起什么作用?
    注意sudoers的语法:

    授权用户  主机=命令动作
    此三个对象,缺一不可

    第一栏: nobody
           此栏标明sudo的应用对象,当前例子是nobody这个用户
           备注:如果是用户组,请在前面添加%号
           例如:
           %admin表示admin这个用户组

    第二栏: ALL=
           此栏指定当前规则所适用的主机,设置为ALL时表示是所有主机
           等号后面可以跟上 用户或用户组,如果省略掉用户或组,表示默认切换到root用户
           所以此处等价于:ALL=(root)
         
           再看一个例子:ALL=(ALL)
           这个就表示能切换到所有用户
         

    第三栏: NOPASSWD: /usr/sbin/delpic.sh
           此栏指定sudo所指定用户可以执行的命令,如有多个命令,可以在此处用逗号隔开

           NOPASSWD:   表示无需输入密码进行验证
           注意:如不加此项,则默认是需要输入密码验证的

           如果是执行某个目录下所有的命令,可以利用通配符
           例如: /usr/sbin/*
   
    综述上面的内容:
    nobody这个用户可以切换到root执行 /usr/sbin/delpic.sh这个命令,并且在切换时无需输入密码

   3,在php程序中调用我们所创建的bash脚本
      delpic.php
     <?php
       //得到文件路径
       $filepath = $_GET['filepath'];
     
       //删除文件:
       system("sudo /usr/sbin/delpic.sh $filepath");

     ?>

     注意:
     从php中调用我们所写的bash脚本时,需要在命令行前面添加 sudo


四: sudo配置文件中其他项的说明:
    /etc/sudoers中默认有一行命令是未被注释掉的

    root    ALL=(ALL)     ALL
    它的作用:## Allow root to run any commands anywhere
     即:允许 root以任何用户的身份在任何主机上运行任何命令

五: 编辑/etc/sudoers的专用命令
   编辑/etc/sudoers很麻烦,需要反复修改权限,
   我们可以使用visudo进行编辑,这样可以避免修改权限,
   当然,前提是要切换到root超级用户下
   [lhd@localhost ~]$ su root
   密码:
   [root@localhost lhd]# ll /etc/sudoers
   -r--r----- 1 root root 3161 2008-05-05 /etc/sudoers
   [root@localhost lhd]# visudo

六:多学一点内容:
   如果我想在一行规则之中定义多个用户,多个主机,多个命令,应该怎么样写?有无简单的写法?
   答案是:我们可以使用别名,
   什么是别名?可以这样理解:别名就是定义了变量,然后在规则中引用变量

   看例子:
   fedora 10上面附带的
   Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
   Cmnd_Alias关键字用来声名命令的别名
              STORAGE是别名的名字,实际代表的命令是/sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

   再看两个
   Host_Alias     MAILSERVERS = smtp, smtp2                          
   主机别名的声明                                      
   User_Alias ADMINS = jsmith, mikem  
   用户别名的声明
 
   实际应用的例子:
   %sys ALL = STORAGE
   sys这个组可以切换为root超级用户执行STORAGE这个别名所代表的命令

   别名的应用很灵活,用法也很多,如有需要,请大家自己参考手册进行更深入的学习
   别名的用法执行 man sudoers 这个命令可以看到
分享到:
评论

相关推荐

    linux 权限 c,Linux下获取root权限的c程序

    Linux下获取root权限的c程序 传递euid和egid给脚本,使脚本具有特殊用户的权限 使脚本实现类于设置了stick位的效果 shell, python, perl等脚本、程序不能取得suid,因为这些脚本程序需要解释器-/bin/bash, /usr/bin/...

    gsudo:一个简单的脚本,具有root用户访问权限来运行GUI应用程序

    gsudo:一个简单的脚本,具有root用户访问权限来运行GUI应用程序

    Pycharm以root权限运行脚本的方法

    在跟随他操作到最后时发现无法继续,就干脆用简单粗暴的方式,以sudo启动IDE: sudo ./pycharm.sh 启动后需要手动导入项目与解释器,不然代码无法运行。 导入解释器后即可运行代码 ps:执行sudo ./pycharm.sh指令...

    npm-global-no-sudo:该脚本解决了当您需要使用“ sudo”安装npm全局软件包时遇到的问题。

    该修补程序包括为全局软件包(默认值:〜/ .npm-packages)创建一个新的本地目录,配置节点以使用它并修复权限。 修复后,将备份现有的全局软件包并重新安装。 该脚本是的改进版本,基于指南 。 用法: 下载: ...

    Linux曝出Sudo提权漏洞 任意用户亦可运行root命令

    作为 Linux 中最常使用的重要实用程序之一,Sudo 几乎安装在每一款 UNIX 和 Linux 发行版上,以便用户调用和实施核心命令。 然而近期曝出的一个提权漏洞,却直指 sudo 的一个安全策略隐患 —— 即便配置中明确不允许...

    Linux下Python脚本自启动和定时启动的详细步骤

    那么用root权限编辑以下文件: sudo vim /etc/rc.local 如果没有 rc.local 请看 这篇文章 在exit 0上面编辑启动脚本的命令 /usr/bin/python3 /home/selfcs/auto.py &gt; /home/selfcs/auto.log 最后重启Linux,脚本就...

    electron-sudo:从https复制

    具有管理权限的电子子流程 运行具有管理特权的子进程,并在必要时通过图形OS对话框提示用户。 对于运行需要sudo的本机Electron应用程序的后台子进程很有用。 Windows ,将与本机User Account Control (UAC)提示符...

    shell脚本按当前日期输出日志的实现

    将以上脚本保存到test.sh脚本文件中,并赋予可执行权限:sudo chmod +x test.sh 执行脚本:bash test.sh 控制台输出: 输出到控制台,并且写入日志文件: 执行脚本,会在当前目录下生成 log20190826.log文件,打开...

    sUdoAC:UAC跳过工具和sudo命令

    脚本不会释放任何临时文件,所有内含 vbs、powershell 代码直接执行,所有操作(创建计划任务、“安装” sudo 插件)均可以无痕卸载。 但是,要运行某个程序时,需要在 Temp 创建一个名为 ~sUdoAC_task&lt;编号&gt;.TMP...

    linux Bash脚本判别使用者的身份方法示例

    比如用sudo的时候,脚本里的~或$HOME指代用户文件夹的这个变量,到底是应该指向我真正的用户文件夹如/home/pi呢,还是指向了超级管理员的用户文件夹/root/呢? 实际上它指向了/root/文件夹,这是我们绝对不想要的。...

    app-stall:用于一次性安装广泛使用的应用程序的 bash 脚本

    使用这个命令 - $ git clone https://github.com/gnithin/app-stall.git###Running apps-stall 要执行它,您需要在 bash 中运行此命令 - $ sudo ./script.sh需要使用sudo,因为安装需要超级用户权限。 就是这样,...

    centos7-gitlab:仅一些脚本可帮助在CentOS 7上安装GitLab

    您将需要已安装mysql或mariadb并对其进行配置以进行网络访问您将需要以具有sudo访问权限(最好是sudo NOPASSWD访问权限)的用户身份运行它该脚本确实希望防火墙和selinux能够运行并强制执行CentOS7安装程序...

    Minecraft-Sheller:Shell脚本旨在允许Minecraft服务器管理的自动化

    要求: Java运行时环境 ... 检查脚本用户的权限。 配置阶段中指定的每个文件夹都必须可供他使用。 编辑脚本进行配置(请参阅配置部分) (可选的) 我强烈建议使用crontab自动执行某些过程。 我更喜

    Jexus-5.8.2

    解压:tar -zxvf jexus-5.1.tar.gz 安装: Jexus安装非常简单,仅仅就是一个复制、粘帖和注册全局程序集的...C、请查看 jws.start、jws.stop、jws.restart、jws.regsvr这几个脚本文件的权限,确定是否具有可执行权限

    QbusClientServer-Installer:Qbus Client Server应用程序的安装脚本

    Qbus客户端-服务器安装程序 在Linux机器(raspberryPi)上使用的Client Server应用程序安装程序。 你为什么需要这个? 自Qbus最初开发以来,它是一个封闭的系统。 此应用程序使CTD控制器... 授予安装程序可执行权限:

    zlevoclient-0.8-bin_i386.tar.gz

    ZLEVOClient v0.2 Readme 编译: 编译需要libpcap库,一般Linux发行版里面安装libpcap-dev包即可,... 如果是以后台方式启动的,可另外使用-l参数运行zlevoclient,当然也需要root权限,便能通知原程序下线并退出了。

    LinuxScripts:Linux升级和各种Linux任务的脚本

    这是使.sh文件可执行的方法: 您可以右键单击该文件,然后转到“权限”选项卡,然后选中“允许以程序形式执行文件”复选框。 或者使用以下终端命令使文件可执行: chmod + x /path/to/your/filename.sh 谢谢JC5提供...

    deepin linux 下的网络下载工具“我要下载"-能下载浏览器/迅雷下载失败的文件

    这是我用linux脚本写的网络下载工具(linux shell脚本),把“我要下载”这个文件复制到/usr/bin目录下,并在命令行下允许如下命令以修改该文件的权限: sudo chmod +x /usr/bin/我要下载 之后,在终端下运行如下...

    NBA_cron:在每场 NBA 比赛结束后自动运行脚本的任务调度程序

    NBA 计时赛 这个工具是一个任务调度器,在 2014-15 赛季每场 NBA 比赛结束后自动运行脚本。...如果您收到某种“权限被拒绝”消息,请在运行上述 bash 脚本之前尝试输入以下内容: sudo chmod +x 如果要直接

Global site tag (gtag.js) - Google Analytics