linux下权限问题,如何让无root管理员权限的用户执行需root权限执行的脚本文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下权限问题,如何让无root管理员权限的用户执行需root权限执行的脚本文件相关的知识,希望对你有一定的参考价值。
例如我有一个脚本文件,这个脚本文件里的命令能否执行成功取决于是否是具有root权限。
而现在我需要让这个sh脚本文件供普通用户执行(不是管理员用户),那么应当如何做?
当然其中不能让普通用户提权为root权限,什么使用sudo命令以及输入密码之类的。
希望有能者回答。
注意:不是如何提升普通用户的权限!而且是普通用户(不是可以网上的所谓的可以使用sudo的普通用户 似乎什么时候听说过chmod 4755可以使得任何人执行这个文件时有与文件所有者相当的权利。但是好像shell脚本文件行不通。但又有人说只要用c写一个封装程序,封装程序调用shell脚本。然后在设置这个封装程序为suid。那么什么是封装程序,怎么封装?如何调用shell脚本。
这样吧,以调用封装程序mount /dev/sda5 /media/d下为例帮帮我。详细地举举例子。(前一个不知怎么回事就被采纳了,可能点错了,觉得百度应当加上一个点击采纳还要在确定一下的功能)
看了前面几位回答者我觉得应当采取一种简单的方法。
看你的意图允许任何人挂载/dev/sda5并且访问它
那么可以如此,任何人都可以挂载硬盘而无需密码,包括其他的/dev/sda6之类的
首先新建一个组,然后让每一个人都在这个组里(添加组及设置组的成员有图形界面较简单,省略),假设为newnew
设置方法
sudo gedit /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla里面会有(第一个代码块),如下内容加上第三行后如发炮制加上(第二个代码块)
[Mounting, checking, etc. of internal
drives]
Identity=unix-group:admin
Action=org.freedesktop.udisks.filesystem-*;org.freedesktop.udisks.drive-ata-smart*
ResultActive=yes
[Change CPU Frequency
scaling]
Identity=unix-group:admin
Action=org.gnome.cpufreqselector
ResultActive=yes
[Setting the
clock]
Identity=unix-group:admin
Action=org.gnome.clockapplet.mechanism.*
ResultActive=yes;unix-group:newnew
由此任何人都可以挂载硬盘了。但问题还没解决
挂载后普通用户是没有读权限的。在此要设置/media/d(假设/dev/sda5挂载在这里)为任何人可读
sudo chmod 777 /media/d如此任何人都可以相当于在这个文件夹下建立读取删除执行文件了,当然里面的子文件夹和子文件另有设置的除外。
当然,也有可能有些其它的”盘“(严格来讲linux中没有盘的概念)挂载之后就有可读可写可执行的权限,但你又不希望这个盘有这样的权限。则另外设置其为相应的权限。
具体见chmod命令
如此这个问题得一解决。虽说与问题中所说的suid,脚本文件中离得较远,但终归解决了问题。
程序之类的东西应当是本着解决问题的原则。然后才是怎样最优化解决问题。
那么4755中的4代表SUID,是一个特殊的权限,科普(4为SUID,2为SGID,1为SBIT)
关于SUID举个简单的例子,首先大家都知道普通用户都可以利用/usr/bin/passwd修改密码,而密码储存的文件/etc/shadow,那么可以先看看这2个文档的权限设置
ll /usr/bin/passwd
-rwsr-xr-x 1 root root 27936 Aug 11 2010 /usr/bin/passwd
ll /etc/shadow
-r-------- 1 root root 911 Jul 10 19:20 /etc/shadow
可以看到/etc/shadow这个文档属主是root用户,其他用户是没有任何权限的,那么为什么其他用户还能修改密码呢,原因是/usr/bin/passwd这个文档中有个s的权限,这就是SUID的作用,
1、SUID仅对二进制程序有效
2、执行者需要对该程序具有x的权限
3、本权限仅在执行程序的过程中有效
4、执行者具有该程序拥有者(属主)的权限
很明显/usr/bin/passwd是一个二进制程序,还给了其他用户x权限,而且带上s权限,那么其他用户执行这个程序就能拥有属主root的权限了追问
关键是已经用root用户设置chmod 4755 a.sh了ll查看它如下
-rwsr-xr-x 1 liusm liusm 25 7月 11 09:51 a.sh*
然后普通用户执行却是
mount: 只有 root 才能进行此操作
看来之前所看到的suid对于脚本文件无效是正确的。
这下怎么办?
是的,第一点已经说过了,SUID仅对二进制程序有效,脚本非二进制程序,所以无效。如果脚本想实现普通用户具有root的执行权限,只能通过sudo
参考技术B 在你要执行的命令前加上sudo,例如sudo vi /etc/vimrc 可以对vim的配置进行修改
切换到shell文件的目录 可以使用
建立test.sh 文件 sudo vi test.sh
sudo chmod u+x test.sh
sudo ./test.sh
如果要学习的话,建议系统的看一下《鸟哥私房菜》(基础版),有助于学习和理解 参考技术C 这就是linux的可爱之处,要是没有如此严格的权限设置,就跟windows没什么区别了(何况win7以后,微软在这方面也有长足进步).
要自动运行,加到init.d里面去 参考技术D chmod 777 不行吗?追问
不行,试了,没用
追答sodu chmod 777 abc.sh
不行?
Linux运维人员共用root帐户权限审计
在中小型企业,公司不同运维人员基本都是以root 账户进行服务器的登陆管理,缺少了账户权限审计制度。不出问题还好,出了问题,就很难找出源头。
这里介绍下,如何利用编译bash 使不同的客户端在使用root 登陆服务器使,记录各自的操作,并且可以在结合ELK 日志分析系统,来收集登陆操作日志
1、下载编译bash
wget http://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
tar -xvf bash-4.4.tar.gz
cd /root/bash-4.4
2、 先修改下config-top.h 大概在103,116行附近 (取消注释) 由于c 语言中 注释是/**/ ,所以不要删除错了。修改如下:
#define SSH_SOURCE_BASHRC
#define SYSLOG_HISTORY
3 修改下bashhist.c 文件,让终端上的命令记录到系统messages 中,并且以指定的格式。并传入获得的变量。修改后的内容如下:
4 配置安装路径,编译安装,编译到/usr/local/目录下
./configure --prefix=/usr/local/bash4-4/
make && make install
5、编译完成后,将新的bash 追加到 /etc/shells 中,并修改root用户的登陆shell 环境为新编译的shell
6、注销当前root用户,重新登陆后,查看/var/log/messages,如下就可以看到记录了操作命令
以上是关于linux下权限问题,如何让无root管理员权限的用户执行需root权限执行的脚本文件的主要内容,如果未能解决你的问题,请参考以下文章