AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 774302
Accepted
xpt
xpt
Asked: 2024-04-11 06:49:48 +0800 CST2024-04-11 06:49:48 +0800 CST 2024-04-11 06:49:48 +0800 CST

chown 无法取消引用,权限被拒绝

  • 772

鉴于,

touch /tmp/abc
ln -vs abc /tmp/def

$ ls -l /tmp/???
-rw-rw-r-- 1 ubuntu ubuntu 0 Apr 10 22:10 /tmp/abc
lrwxrwxrwx 1 ubuntu ubuntu 3 Apr 10 22:10 /tmp/def -> abc

为什么我得到:

$ sudo chown syslog: /tmp/def
chown: cannot dereference '/tmp/def': Permission denied

$ sudo chown --dereference syslog: /tmp/def
chown: cannot dereference '/tmp/def': Permission denied

参考:
chown(1):

--dereference

    影响每个符号链接的引用(这是默认值),而不是符号链接本身

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.6 LTS
Release:        20.04
Codename:       focal
linux
  • 1 1 个回答
  • 45 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2024-04-11T16:50:11+08:002024-04-11T16:50:11+08:00

    这个答案假设这是适当的:

    # sysctl fs.protected_symlinks 
    fs.protected_symlinks = 1
    

    root 用户(以下安全功能特别旨在影响)与任何其他用户一样,受到 sysctlfs.protected_symlinks中描述的影响proc(5):

    /proc/sys/fs/protected_symlinks(从 Linux 3.6 开始)

    当该文件中的值为 0 时,对后面的符号链接没有限制(即,这是 Linux 3.6 之前的历史行为)。当该文件中的值为 1 时,仅在以下情况下才会遵循符号链接:

    • 链接后面的进程的文件系统UID 与符号链接的所有者(UID) 匹配(如凭证(7) 中所述,进程的文件系统UID 通常与其有效UID 相同);

    • 该链接不在全局可写的粘性目录中;或者

    • 符号链接及其父目录具有相同的所有者 (UID)

    由于上述限制而无法遵循符号链接的系统调用会在 errno 中返回错误 EACCES。

    这里:

    • root != ubuntu : 失败
    • /tmp是一个粘性的世界可写目录:失败
    • /tmpdef 的所有者 (ubuntu) 与的所有者 (root)不同:失败

    因此EACCESS=权限被拒绝

    这里还有另外两种可行的情况:

    • 防止第一个条件失败

      sudo chown --no-dereference root: /tmp/def # this must be root, not syslog
      

      现在符号链接由 root 拥有,第一个条件不会失败,允许运行:

       sudo chown syslog: /tmp/def
      

      才能成功影响/tmp/abc.

      如果有这样的意图,def可以改回其以前的所有者或也可以syslog:

      sudo chown --no-dereference ubuntu: /tmp/def
      

      或者

      sudo chown --no-dereference syslog: /tmp/def
      
    • 防止第二个条件失败

      在非粘性目录中进行相同的实验(即使它是全局可写的):

      sudo mkdir -m 777 /tmp/notsticky
      sudo mv /tmp/abc /tmp/def /tmp/notsticky/.
      

      现在允许运行:

      sudo chown syslog: /tmp/notsticky/def
      

      如果有这样的意图,它们可以被移回:

      sudo mv /tmp/notsticky/abc /tmp/notsticky/def /tmp/
      sudo rmdir /tmp/notsticky
      

    此外,正如comment 中所建议的,通过从原始用户进行查找,可以再次防止第一个条件失败ubuntu,因为它已经是符号链接的所有者。例如使用:

    realpath -z /tmp/def | xargs -0 sudo chown syslog:
    

    \n或者如果目标文件名末尾没有特殊字符,例如换行符 (LF / )(这将被 shell 解释器删除),就像 OP 的情况一样,只需:

    sudo chown syslog: "$(realpath /tmp/def)"
    
    • 3

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve