在药房,某些药物被放置在延时保险箱中,这意味着检索请求和保险箱能够打开的时间之间存在固定的延迟(例如可能 15 分钟)。我想知道是否可以使用文件的编辑权限来执行此操作,即使您是 root,也会强制执行延迟。
而且,如果这是不可能的,是否可以以延时方式加密文件?比“暴力破解需要大约 n 年”更优雅和精确的东西。
答案1
您在一个中澄清了评论那
有一个用户偶尔需要 root 访问权限,我不希望他们能够修改计算机上的特定文件,直到他们至少拥有n分钟可能会考虑一下。
我可能会通过多种方式之一来解决这个问题。我认为这是一个应该考虑进行编辑的单个文件。
考虑一个脚本/usr/local/bin/myedit
。将用户添加到组中myeditors
,或者如果它实际上只是一个用户,请将%myeditors
值更改为用户名。使用visudo
将此行添加到sudoers
文件中
%myeditors ALL=(ALL) NOPASSWD: /usr/local/bin/myedit
现在创建脚本/usr/local/bin/myedit
,记住使其可执行(chmod a+x /usr/local/bin/myedit
)。
#!/bin/bash
#
# THIS SCRIPT RUNS AS ROOT
#
# %myeditors ALL=(ALL) NOPASSWD: /usr/local/bin/myedit
########################################################################
# User configurable values
target='/usr/local/etc/specialfile' # The file to be edited
delay=600 # Delay in seconds
########################################################################
# Here we go
#
progName="${0##*/}"
# Reset PATH to known quantity
export PATH=/usr/local/bin:/bin:/usr/bin
# Force the script to run with sudo
[[ $(id -u) != 0 ]] && exec sudo "$0" "$@"
printf 'Waiting %d seconds...' $delay
sleep $delay && echo
read -t 60 -p "Are you sure you still want to edit $target (y/N)? " YN
[[ "${YN,,}" =~ ^(y|yes)$ ]] || exit 1
umask 0022
tmpf=$(mktemp -d "/tmp/${progName}_XXXXXXXXXX")
cp -f "$target" "$tmpf"
# Revert to the original user account to edit the temporary file
chown "$SUDO_USER" "$tmpf"
sudo -u "$SUDO_USER" "${EDITOR:-vi}" "$tmpf"
# Apply changes
if [[ -f "$tmpf" ]] && ! cmp -s "$target" "$tmpf"
then
echo 'Applying changes'
cp -pf "$target" "$target.old"
cp -f "$tmpf" "$target"
fi
# All done
rm -f "$tmpf"
exit 0
调用命令没有 sudo
(虽然用不用也没关系):
myedit