在 /tmp Ubuntu 22.04 上执行“exec”时权限被拒绝

在 /tmp Ubuntu 22.04 上执行“exec”时权限被拒绝

我有下面的脚本,它在 Ubuntu 18.04 上运行良好

#!/bin/bash
set -euo pipefail
# This form is convenient for locking a file without spawning a
# subprocess. The shell opens the lock file for reading and
# writing as file descriptor 9, then flock is used to lock the
# descriptor.
# Source: https://man7.org/linux/man-pages/man1/flock.1.html
ansible_path="/tmp/ansible-pull.lck"
touch -a $ansible_path
chown ubuntu:ubuntu $ansible_path
exec 9<>$ansible_path
flock -n 9

当我在 Ubuntu 22.04 上执行脚本时,出现错误

sudo ./deploy.sh
./deploy.sh: line 11: /tmp/ansible-pull.lck: Permission denied

错误行是:exec 9<>$ansible_path。我认为这是 /tmp 文件夹的问题,因为更改了它ansible_path才能/var/ansible-pull.lck正常工作。但我不知道 /tmp 有什么问题,它没有挂载到任何文件系统

mount |grep tmp
devtmpfs on /dev type devtmpfs (rw,relatime,size=475076k,nr_inodes=118769,mode=755,inode64)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,inode64)
tmpfs on /run type tmpfs (rw,nosuid,nodev,size=192760k,nr_inodes=819200,mode=755,inode64)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k,inode64)
tmpfs on /run/snapd/ns type tmpfs (rw,nosuid,nodev,size=192760k,nr_inodes=819200,mode=755,inode64)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=96376k,nr_inodes=24094,mode=700,uid=1000,gid=1000,inode64)

18.04 和 22.04 之间的 /tmp 目录可能存在不同吗?

答案1

默认情况下,/tmp目录具有粘性位。这意味着,只有该目录中文件的所有者才能修改它们。

由于您将所有者更改为ubuntu,因此任何尝试编辑该文件的人(甚至是用户)都将收到权限被拒绝错误root

针对您的情况,您有几种选择。

  1. 删除该chown ubuntu:ubuntu $ansible_path线。
  2. 移除粘性位/tmp(不推荐!)。
  3. 创建一个目录/tmp并在该目录中创建文件

參考文獻:/tmp 中的权限被拒绝

相关内容