Shell 为权限创建排除用户列表-Unix

Shell 为权限创建排除用户列表-Unix,shell,unix,aix,Shell,Unix,Aix,我有一个奇怪的要求,我只想限制少数ID执行“chmod”命令 #which chmod /usr/bin/chmod #ls -lrt /usr/bin/chmod -r-xr-xr-x 1 bin bin 10700 Jun 20 2012 /usr/bin/chmod 它对所有用户都具有执行权限。我们是否可以创建一个排除组,并以某种方式进行配置,使权限仅对那些用户撤销 我的选择是创建一个组,其中所有ID都不包括我要放入异常的ID,并更改权限,如 -r-

我有一个奇怪的要求,我只想限制少数ID执行“chmod”命令

#which chmod
/usr/bin/chmod
#ls -lrt /usr/bin/chmod
-r-xr-xr-x    1 bin      bin           10700 Jun 20 2012  /usr/bin/chmod
它对所有用户都具有执行权限。我们是否可以创建一个排除组,并以某种方式进行配置,使权限仅对那些用户撤销

我的选择是创建一个组,其中所有ID都不包括我要放入异常的ID,并更改权限,如

-r-xr-xr--    1 bin      New-grp          10700 Jun 20 2012  /usr/bin/chmod

我不想使用这个选项,因为在我的服务器中有很多用户,需要很长时间才能获得批准。请建议其他方法。

您可以为其设置ACL。试试这个:

我不得不质疑你想要完成什么

你看,
chmod
二进制文件实际上只存在于钩住系统调用。在操作系统中内置了一个系统调用,名为cunningly
chmod()
,用于更改文件权限

#包括
int chmod(常量字符*路径名,模式);
int fchmod(int fd,mode_t mode);
#包括/*AT_*常数的定义*/
#包括
int fchmodat(int dirfd,const char*路径名,mode\u t mode,int标志);
等等

尝试通过更改
chmod
命令的权限来锁定此功能是一个非常糟糕的主意,因为充其量只能得到一种错误的安全感
chmod
运行时不需要任何提升的权限,因此任何用户都可以复制自己的版本并运行它

或者使用编译器编写自己的

或者使用perl内置程序

或者其他各种机制,基本上意味着这除了有点刺激之外,不会有太大的效果


你到底想完成什么?您可能正在查看某种强制访问控制,这意味着您需要查看selinux

您可以通过创建另一个组并修改其权限,同时从中删除其成员来完成此操作。您可以使用ACL来完成此操作。这将覆盖特定用户或组的权限。这些机制并不是完全标准化的——POSIX.1e团队从未接受过他们提出的标准(假设它达到了实际提出的程度),尽管有些系统确实支持一些相近的标准。感谢Jonathan Leffler,将尝试此选项。也许SELinux可以帮助您?请小心操作-通过限制对
chmod
的访问,您不一定会阻止人们执行
chmod
操作,这可以通过系统调用实现。请记住,并非所有文件系统都支持ACL。
   #include <sys/stat.h>

   int chmod(const char *pathname, mode_t mode);
   int fchmod(int fd, mode_t mode);

   #include <fcntl.h>           /* Definition of AT_* constants */
   #include <sys/stat.h>

   int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);