`

用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编写bash shell脚本文件.sh 自动输入密码.在脚本中使用sudo命令,将密码保存在脚本中,不需要手动输入密码

    在某些场景下,我们可能需要在脚本中使用`sudo`命令来执行需要管理员权限的操作。通常,运行带有`sudo`的命令时,系统会提示用户输入密码。然而,为了实现自动化,我们不希望在脚本执行过程中手动输入密码。本文将...

    windows下的 Nsudo提权工具,支持system权限

    4. **命令行工具**:Nsudo提供了命令行界面,用户可以通过简单的命令行参数指定要执行的命令以及所需的权限等级,方便进行自动化脚本编写和远程操作。 5. **源代码开放**:Nsudo的源代码是公开的,开发者可以查看、...

    Python-SUDO通过叫喊来执行bash命令

    这时,我们通常会用到`sudo`(Superuser DO)这个命令,它允许用户以管理员权限运行程序。然而,在Python脚本中直接调用`sudo`并不直接,需要借助一些技巧。本文将深入探讨如何在Python中通过调用子进程来执行Bash...

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

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

    Termux-Sudo:惰性脚本,用于在Termux中安装Sudo

    Termux-Sudo脚本通过自动化这一过程,使得非技术用户也能轻松安装Sudo。 首先,按照描述中的步骤,你需要在Termux中安装Git,这是一个分布式版本控制系统,用于跟踪文件和目录的变化。执行`apt install git`命令...

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

    gsudo 是一个基于 Shell 脚本的工具,它允许用户以 root 权限运行图形化用户界面(GUI)应用程序,而无需通过传统的 sudo 或 su 命令。这个工具对于那些希望在不破坏系统安全性的前提下,方便地运行需要管理员权限的...

    Win系统提权工具NSudo v8.2.zip

    在日常使用中,我们常常会遇到需要管理员权限才能执行的操作,而NSudo则可以灵活地帮助我们在不同权限级别之间切换,提高工作效率,同时减少不必要的权限风险。 **NSudo的工作原理** NSudo的核心在于利用Windows的...

    软件自动化安装脚本

    在IT行业中,软件自动化安装脚本是提高效率和减少人为错误的重要工具,特别是在大规模系统部署时。本主题主要关注在Linux环境下使用Shell脚本来实现Java Development Kit (JDK) 和 PostgreSQL 数据库的自动化安装。 ...

    脚本应用.zip

    "脚本应用.zip"这个文件可能包含一系列用于特定目的的脚本程序,可能是为了简化日常操作、提高效率或解决特定的技术问题。"AUTHORIZED_USER="root""这部分描述提示我们,这些脚本可能涉及到Linux或者Unix系统的权限...

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

    在使用PyCharm进行Python编程时,有时会遇到需要以root权限运行脚本来完成特定任务的情况,比如访问某些受限资源或进行系统级别的操作等。然而,默认情况下,PyCharm和其他大多数IDE一样,并不会以root权限运行程序...

    通过SSHPASS执行命令及相关脚本

    标题中的“通过SSHPASS执行命令及相关脚本”是指在Linux环境下使用`sshpass`工具进行非交互式SSH登录并执行远程命令的技术。`sshpass`是一个命令行实用程序,它允许用户在不手动输入密码的情况下,通过SSH连接执行...

    Linux 中 root 与 sudo 的用法与区别.docx

    Linux 中 root 与 sudo 的用法与区别 在 Linux 系统中,root 和 sudo 是两个非常...我们建议使用 sudo 而不是直接使用 root 账户,是因为 sudo 可以提供更加细粒度的权限控制和日志记录功能,从而提高系统的安全性。

    Win系统提权工具 NSudo V8.2

    **NSudo V8.2:Windows系统权限提升工具详解** 在Windows操作系统中,有时为了执行特定的任务或修复系统问题,我们需要提升当前用户的...正确理解和使用NSudo,能有效提高工作效率,同时降低因权限不足导致的问题。

    Linux获取服务器硬件配置(CPU、内存、硬盘、主板)信息shell 脚本

    在Linux环境中,管理和维护服务器时,了解系统的硬件配置至关重要。这篇文档将详细解析一个用于获取Linux服务器硬件配置信息的...在日常运维工作中,能够熟练掌握并运用这些命令和脚本技巧,可以显著提高工作效率。

    linux 安装tomcat shell脚本

    Shell脚本是Linux系统中的一种批处理程序,它允许用户编写一系列命令并将其保存为一个文件,通过执行这个文件来完成自动化任务。编写Shell脚本通常涉及变量定义、条件判断、循环结构、函数定义等元素。在我们的场景...

    linux下升级更新程序和杀死程序以及解压脚本

    本文将详细讲解如何在Linux环境下进行软件更新、程序终止以及使用脚本进行文件解压缩。这些技能对于任何Linux用户或系统管理员来说都是至关重要的。 首先,让我们来看看如何升级和更新Linux系统中的软件。Linux系统...

    openoffice 自动安装脚本.zip

    自动安装脚本的核心原理是通过执行一系列命令来下载OpenOffice的安装包,然后调用系统内置的安装程序或者使用特定工具进行部署。例如,在Windows上,这可能是一个批处理文件(.bat),而在Linux系统中,可能是Bash...

    centos7开机自启动执行脚本

    在Linux系统中,CentOS 7是一个广泛应用的服务器操作系统,对于系统管理员来说,配置开机自启动脚本是一项基本任务,可以确保系统启动时自动运行特定的服务或程序。这里我们将详细探讨如何在CentOS 7中设置开机自...

    oracle自动安装脚本

    3. 执行脚本:使用命令行以root权限运行脚本,如`sudo bash script_name.sh`。 4. 监控安装:在安装过程中,脚本会提示输入必要的信息,如Oracle SID、全局数据库名、口令等。密切监控安装日志,以确保过程无误。 5....

Global site tag (gtag.js) - Google Analytics