延时文件编辑

延时文件编辑

在药房,某些药物被放置在延时保险箱中,这意味着检索请求和保险箱能够打开的时间之间存在固定的延迟(例如可能 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

相关内容