![是否有一个脚本在用户登录时以 root 身份运行?](https://linux22.com/image/833525/%E6%98%AF%E5%90%A6%E6%9C%89%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC%E5%9C%A8%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%97%B6%E4%BB%A5%20root%20%E8%BA%AB%E4%BB%BD%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
当用户登录时,我需要执行一个需要升级权限的命令。我不想授予该用户该命令的 sudo 访问权限。我只想为该用户运行此脚本,而不是为所有用户运行。
答案1
根据您的评论,听起来您希望用户“fred”不拥有常规 shell,而是在登录时运行脚本“foo”。如果您不希望 Fred 费尽心思逃离他的“沙盒”,这很容易做到。
$ cat ~fred/.bash_login
#!/bin/bash
exec /usr/local/bin/foo
## in ubuntu each user has a group of his "own"
$ sudo chown foo:fred ~fred ~fred/.bash_login /usr/local/bin/foo
## prevent fred from altering the files and directories we care about
$ sudo chmod g-w ~fred ~fred/.bash_login /usr/local/bin/foo
## make script foo run with user foo's privileges
$ sudo chmod u+s /usr/local/bin/foo
因此 fred 现在甚至不会得到 shell 提示,因为他的登录 shell 所做的第一件事就是用 foo 替换自己;当脚本 foo 退出时,fred 将被注销。Fred 缺乏爬出此沙箱的动力的原因是许多程序允许打开下级 shell,这将允许 fred 撤消此处显示的穷人锁定。
使用此方法以“root”而不是某些非超级用户 foo 可用于劫持 root,所以不要这样做。
答案2
我会使用chmod 6755 filename
(或者 6711,如果你不想被其他用户读取的话),然后将其放入 cron... 这应该可行,因为它是作为所有者运行此文件的权限。因此,如果您以 root 身份创建它,您应该能够像这样使用它...