我想创建一个具有特定权限的unix用户帐户:该用户必须能够安装软件,但不能删除软件。此外,当用户登录时,root 必须收到邮件中的通知。有可能的?
我正在运行 Debian。
答案1
至于将管理权限限制为仅安装软件,可以使用 sudo:只允许用户运行进行安装的包管理工具。大概你在 /etc/sudoers 中需要这样的东西:
Cmnd_Alias SWINST = /path/to/pkg-manager install_action *
power_user hostname= NOPASSWD: SWINST
这允许power_user
在计算机上hostname
运行/path/to/pkg-manager
带有第一个参数install_action
和任意附加参数的命令,而无需输入密码(例如对于 Debian,这将转换为/path/to/apt-get install *
,对于基于 SUSE 的发行版/path/to/zypper in *
)。
有两件事需要记住:
包管理器必须表现良好,因为它不能允许多个行动在一个命令行上传递给它(例如
pkg-manager install foo, remove bar
将完全破坏它)。由于包管理器也会处理冲突,即使只是安装也可能导致软件删除,因此如果可能的话,请使用禁用此功能的开关/配置(请参阅下面的 Craig 的评论)。您不得允许访问可以从本地文件安装包的低级包维护命令。这将允许用户准备一个权限升级包,安装它,然后你就可以挥手告别你的系统了。相反,您必须确保只能使用该命令安装受信任的软件。
对于桌面系统,现在经常使用PolicyKit基础设施,因此这将是另一种选择。
答案2
是的,可能的,在每行的最后一个选项中/etc/passwd
,您为每个用户指定 shell。您可以编写一个包装器,并使用您的包装器(可能是 shell 脚本)来代替默认 shell,例如bash
或。csh
您更改默认值:
mohsen:x:1000:1000:Mohsen Pahlevanzadeh,,,:/home/mohsen:/bin/bash
到:
mohsen:x:1000:1000:Mohsen Pahlevanzadeh,,,:/home/mohsen:/yourpath/yourshell.sh
然后你应该把两件事放进去yourshell.sh
:
- 用于邮寄到 root 的命令(
mail
,mutt command
... - 阅读手册) - 生成登录 shell
exec /bin/bash -l
答案3
这是我对解决方案的看法:
半特权用户运行一个名为“please-install.sh”的脚本。脚本的参数是包或程序名称。
#!/bin/bash
cat <<__EOF__ | mail -s "please install" root@localhost
When you get time, please install these programs for me:
$@
Thanks,
__EOF__
这样做的优点是,高度复杂的神经网络经过专门在问题领域的训练(并且在解决问题的任务中经过了数百万年的进化),可以评估所有安全性和其他实际影响,并以果断和速度对每个请求做出反应。这是应得的。例如:“不,我不会在我们的生产网络服务器上安装该 Bit-Torrent 客户端”。
如果您想变得更奇特,您可以使用 getopt 来允许用户指定优先级选项,例如 -l 或 --low、-h 或 --high、-u 或 --urgent。