你能让“dd”命令安全吗?

你能让“dd”命令安全吗?

我们都(或认识有人)无意中滥用了destroy-diskdd) 命令。存在哪些方法(如果有)可以按以下或类似方式更改命令: 如果/dev/sda作为输出文件 ( of=/dev/sda) 给出,则命令不会运行或提示您确认,例如“您确定吗”?

.bashrc 您能使用您的文件实现类似的目标吗?

一般来说,有没有办法在传递某些参数时停止某些命令的运行?

编辑:该命令以 root 身份运行。

答案1

正如 Arkadiusz 所说,您可以创建一个包装器:

dd() {
  # Limit variables' scope
  local args command output reply

  # Basic arguments handling
  while (( ${#} > 0 )); do
    case "${1}" in
    ( of=* )
      output="${1#*=}"
      ;;
    ( * )
      args+=( "${1}" )
      ;;
    esac
    shift || break
  done

  # Build the actual command
  command=( command -- dd "${args[@]}" "of=${output}" )

  # Warn the user
  printf 'Please double-check this to avoid potentially dangerous behavior.\n' >&2
  printf 'Output file: %s\n' "${output}" >&2

  # Ask for confirmation
  IFS= read -p 'Do you want to continue? (y/n): ' -r reply

  # Check user's reply
  case "${reply}" in
  ( y | yes )
    printf 'Running command...\n' >&2
    ;;
  ( * )
    printf 'Aborting\n' >&2
    return
    ;;
  esac

  # Run command
  "${command[@]}"
}

例子:

$ dd if=/dev/urandom of=file.txt bs=4M count=5
Please double-check this to avoid potentially dangerous behavior.
Output file: file.txt
Do you want to continue? (y/n): y
Running command...
5+0 records in
5+0 records out
20971520 bytes (21 MB, 20 MiB) copied, 0.443037 s, 47.3 MB/s

修改它以满足您的需求(使其符合 POSIX 标准,检查其他条件等)。

答案2

AFAIK,非超级用户无法覆盖/dev/sda.如果您不能信任被授予超级用户访问权限的操作员,那么您将面临比 更大的问题/bin/dd

相关内容