这是我的脚本:
script.sh:
sudo cat /etc/passwd-
如果我处于sudo会话中(例如,几分钟前我用sudo运行了另一个命令),现在运行
script.sh
该脚本将获得sudo访问.但是,如果我运行cat / etc / passwd- /,则会收到拒绝权限错误.
作为用户,我不希望script.sh能够这么简单地获得超级用户特权(例如,没有我通过sudo script.sh授予超级用户特权的访问权).
这是预期的行为吗?
它是可配置的吗?
我认为该行为与sudo su完全相似,例如,可能使超级用户可以访问您在该会话中运行的任何脚本,但更糟糕的是,因为您甚至可能不知道它,也不知道它何时结束(至少不是没有手动检查)
解决方法:
Is this expected behaviour ?
是的,确实是一种预期的行为.用户对sudo缓存的凭据负责.
Is it configurable ?
是的,它是可配置的.
而且我认为您的安全隐患是有效的.如果脚本是使用显式sudo命令编写的,则在之前(在一定的超时时间内)运行sudo命令的终端中运行script.sh将赋予脚本超级用户特权.
通过使用以下命令运行它,可以避免以sudo运行时不提示输入密码的任何脚本:
sudo -k script.sh
无论先前的任何sudo命令或会话如何,它都会要求输入密码.
And to run script.sh without sudo i.e with just script.sh and still prompt
for password for the sudo command/s:
您可以永久更改超时值(sudo保持会话的持续时间):
运行sudo visudo
然后更改行:
Defaults env_reset
至
Defaults env_reset,timestamp_timeout=0
保存并退出(先按ctrl X,然后按Y)
这将确保sudo每次运行时都要求输入密码.
或者,如果您不想永久更改它,并且希望您的脚本至少一次提示输入密码(同时保持会话状态),那么可以像这样更改脚本:
sudo -k first-command-with-sudo
sudo second-command
sudo third
and so on
无论先前的任何sudo命令或会话如何,此脚本都会提示输入密码至少一次.
如果您不知道(或无法访问)脚本script.sh的内容(它里面可以有sudo命令)
并且您想确保任何sudo命令一定会至少提示您输入一次密码,然后在运行脚本之前运行sudo -K(大写K).
现在,如果您运行script.sh且其中包含sudo命令,则肯定会提示您输入密码.
标签:bash,shell,permissions,sudo,linux
来源: https://codeday.me/bug/20191120/2042439.html