- 浏览: 403640 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
冯大圆__渐成胡子渣:
写得很详细,想请求一下,bundler install的时候设 ...
Rails Assets Pipeline -
DaSunWarman:
...
#!/usr/bin/env 脚本解释程序的作用 -
alexag:
...
javascript立即执行函数与函数声明和函数表达式 -
houxm:
你也可以使用更简单的方式(只要在元素上添加 data-togg ...
bootstrap 小tip -
jaycongwen:
帮我看看啊,我刚学wen@wen-desktop:~$ cd ...
cannot load such file -- openssl
用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 这个命令可以看到
一,为什么要用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 这个命令可以看到
发表评论
-
#!/usr/bin/env 脚本解释程序的作用
2014-02-08 14:59 25655#!/usr/bin/env 在linux的一些bash的脚本 ... -
vim 分屏方法
2012-02-25 01:21 1775使用分屏命令: :new 创建空白分屏 :split 对当 ... -
ubuntu开启SSH服务
2011-09-16 11:09 1378SSH分客户端openssh-client和openssh-s ... -
Ubuntu Linux系统下apt-get命令详解
2011-09-16 02:28 1062整理了Ubuntu Linux操作系统下apt-get命令的详 ... -
Unable to lock the administration directory (/var/lib/dpkg/), is another process
2011-09-16 02:17 6151通过终端安装程序sudo apt-get install ** ... -
linux sh,bin文件的安装方法
2011-09-11 13:00 2138记下在Ubuntu下安装*.sh和*.bin的简单方法。 * ... -
nginx高并发配置
2011-08-23 21:38 1410nginx配置及说明: worker_processes 8 ... -
Nginx Configure 配置详解
2011-08-23 21:33 1705Nginx 使用 Unix 下常用的 './configure ... -
linux shell 简单介绍
2011-08-21 20:55 1520Linux 系统结构: 硬件->Kernel(驱动程序 ... -
RPM APT YUM
2011-08-05 02:04 2484RPM 是 Red Hat Package Manager ... -
unix shebang 符号
2011-11-22 22:09 1605在计算机科学中,Shebang(也称为Hashbang)是一个 ... -
ubuntu安装nginx+passenger
2011-07-13 00:07 22091、安装passenger gem install passe ... -
/etc/profile 和/etc/environment
2011-07-06 01:07 2008先将export LANG=zh_CN加入/etc/profi ... -
第一次使用ubuntu11.0.4
2011-07-05 00:51 1252因为是第一次使用ubuntu11.0.4,所以对 ... -
linux 下memcached安装配置
2011-06-29 17:58 1421最近在研究怎么让Discuz!去应用Memcache去做一些事 ... -
linux 家目录下的.bashrc 与.profile文件的区别
2011-06-29 17:45 3384今天在干活时因为经常要重启nginx服务器,命令实在是冗长麻烦 ... -
添加非root用户为sudo用户
2011-04-13 14:33 2952第一种方法: 添加sudo ... -
Linux下cron的使用
2011-04-07 23:16 939cron是一个linux下的定时 ... -
关于初次使用ubuntu的相关记录
2011-03-19 01:29 955初次接触ubuntu的时候啥也不知道,所以总是什么都是一塌糊涂 ...
相关推荐
Linux下获取root权限的c程序 传递euid和egid给脚本,使脚本具有特殊用户的权限 使脚本实现类于设置了stick位的效果 shell, python, perl等脚本、程序不能取得suid,因为这些脚本程序需要解释器-/bin/bash, /usr/bin/...
gsudo:一个简单的脚本,具有root用户访问权限来运行GUI应用程序
在跟随他操作到最后时发现无法继续,就干脆用简单粗暴的方式,以sudo启动IDE: sudo ./pycharm.sh 启动后需要手动导入项目与解释器,不然代码无法运行。 导入解释器后即可运行代码 ps:执行sudo ./pycharm.sh指令...
该修补程序包括为全局软件包(默认值:〜/ .npm-packages)创建一个新的本地目录,配置节点以使用它并修复权限。 修复后,将备份现有的全局软件包并重新安装。 该脚本是的改进版本,基于指南 。 用法: 下载: ...
作为 Linux 中最常使用的重要实用程序之一,Sudo 几乎安装在每一款 UNIX 和 Linux 发行版上,以便用户调用和实施核心命令。 然而近期曝出的一个提权漏洞,却直指 sudo 的一个安全策略隐患 —— 即便配置中明确不允许...
那么用root权限编辑以下文件: sudo vim /etc/rc.local 如果没有 rc.local 请看 这篇文章 在exit 0上面编辑启动脚本的命令 /usr/bin/python3 /home/selfcs/auto.py > /home/selfcs/auto.log 最后重启Linux,脚本就...
具有管理权限的电子子流程 运行具有管理特权的子进程,并在必要时通过图形OS对话框提示用户。 对于运行需要sudo的本机Electron应用程序的后台子进程很有用。 Windows ,将与本机User Account Control (UAC)提示符...
将以上脚本保存到test.sh脚本文件中,并赋予可执行权限:sudo chmod +x test.sh 执行脚本:bash test.sh 控制台输出: 输出到控制台,并且写入日志文件: 执行脚本,会在当前目录下生成 log20190826.log文件,打开...
脚本不会释放任何临时文件,所有内含 vbs、powershell 代码直接执行,所有操作(创建计划任务、“安装” sudo 插件)均可以无痕卸载。 但是,要运行某个程序时,需要在 Temp 创建一个名为 ~sUdoAC_task<编号>.TMP...
比如用sudo的时候,脚本里的~或$HOME指代用户文件夹的这个变量,到底是应该指向我真正的用户文件夹如/home/pi呢,还是指向了超级管理员的用户文件夹/root/呢? 实际上它指向了/root/文件夹,这是我们绝对不想要的。...
使用这个命令 - $ git clone https://github.com/gnithin/app-stall.git###Running apps-stall 要执行它,您需要在 bash 中运行此命令 - $ sudo ./script.sh需要使用sudo,因为安装需要超级用户权限。 就是这样,...
您将需要已安装mysql或mariadb并对其进行配置以进行网络访问您将需要以具有sudo访问权限(最好是sudo NOPASSWD访问权限)的用户身份运行它该脚本确实希望防火墙和selinux能够运行并强制执行CentOS7安装程序...
要求: Java运行时环境 ... 检查脚本用户的权限。 配置阶段中指定的每个文件夹都必须可供他使用。 编辑脚本进行配置(请参阅配置部分) (可选的) 我强烈建议使用crontab自动执行某些过程。 我更喜
解压:tar -zxvf jexus-5.1.tar.gz 安装: Jexus安装非常简单,仅仅就是一个复制、粘帖和注册全局程序集的...C、请查看 jws.start、jws.stop、jws.restart、jws.regsvr这几个脚本文件的权限,确定是否具有可执行权限
Qbus客户端-服务器安装程序 在Linux机器(raspberryPi)上使用的Client Server应用程序安装程序。 你为什么需要这个? 自Qbus最初开发以来,它是一个封闭的系统。 此应用程序使CTD控制器... 授予安装程序可执行权限:
ZLEVOClient v0.2 Readme 编译: 编译需要libpcap库,一般Linux发行版里面安装libpcap-dev包即可,... 如果是以后台方式启动的,可另外使用-l参数运行zlevoclient,当然也需要root权限,便能通知原程序下线并退出了。
这是使.sh文件可执行的方法: 您可以右键单击该文件,然后转到“权限”选项卡,然后选中“允许以程序形式执行文件”复选框。 或者使用以下终端命令使文件可执行: chmod + x /path/to/your/filename.sh 谢谢JC5提供...
这是我用linux脚本写的网络下载工具(linux shell脚本),把“我要下载”这个文件复制到/usr/bin目录下,并在命令行下允许如下命令以修改该文件的权限: sudo chmod +x /usr/bin/我要下载 之后,在终端下运行如下...
NBA 计时赛 这个工具是一个任务调度器,在 2014-15 赛季每场 NBA 比赛结束后自动运行脚本。...如果您收到某种“权限被拒绝”消息,请在运行上述 bash 脚本之前尝试输入以下内容: sudo chmod +x 如果要直接