【发布时间】:2016-02-07 19:05:59
【问题描述】:
我目前正在编写一个 ksh 脚本,我在其中检查粘滞位以查看非特权用户是否可以执行某些命令。我想知道是否有更有效的方法来检查它。任何帮助表示赞赏。
【问题讨论】:
-
你说粘性位;那是 01000 位。您是否正在考虑设置 UID (04000) 和设置 GID (02000) 位?这真的很棘手。 PATH 上的目录中的任何可执行文件都可以在不指定任何路径的情况下执行(例如,只需键入
ls)。但是系统上的任何可执行文件都可以通过指定适当的路径来执行——当然,这取决于访问权限。然后你会遇到别名和函数的问题:它们算数吗?那么,您确定要在机器上的所有文件系统中搜索可执行文件,因为其中任何一个都可以运行吗? -
目前我有一个执行
ls -ltra x的脚本,结果将是-rwxrwx--- 1 user xyz ....x。我的目标是确保只有 root 可以执行某些命令(lssec、chsec 等)。我正在为脚本提供一些元数据(-r-xr--r--)并对位进行字符串比较。您认为有更有效或更好的方法来做到这一点吗?如果您还有问题,请告诉我。感谢您的回复。 -
Don't parse the output from
ls是的,有一些工具是为这类事情设计的,虽然我不知道它们中的任何一个到底有多好,就像 JonathanLeffler 说的那样,这样做是非常 取决于您要准确测试的内容。 -
我的最终目标是检查在这个文件上正确设置了什么样的权限。我会问自己的问题是:root 可以执行此操作吗?某些团体可以执行此操作吗?任何用户都可以执行此操作吗?我只是在检查普通用户是否运行此命令会发生什么?当前的脚本结构使用 ls 选项,但我考虑过的另一个选项实际上是执行命令并从 stderr 中查看是否得到
Execution Permission Denied。但是,我正在运行主脚本,它以 sudo 运行大约 200 个脚本。 -
那么问题就变成了如何告诉主脚本只运行某些脚本作为 sudo。我尝试实现我在 Stackoverflow 上找到的解决方案之一,该解决方案说要使用 sudo -u 命令,但我不知道这是否是个好主意。每个脚本执行不同的任务,从检查 CPU 数量到确保文件系统配置正确。我对 ksh 和 AIX 还很陌生,所以它们不是最好的脚本。我试图尽可能多地理解。感谢您提供任何帮助并感谢您的回复。