这个恰当的错误信息(“以root身份执行非沙盒下载...”)是什么意思?

我在Synaptic Manager更新后明白了。
最近我从16.10干净地安装了Ubuntu 17.04。
错误信息:
W: Download is performed unsandboxed as root as file '/var/cache/apt/archives/partial/samba-libs_2%3a4.5.8+dfsg-0ubuntu0.17.04.1_i386.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

2你正在以非root用户身份运行一个需要root权限的进程... - George Udosen
3据已知,问题1522675在与开发人员长时间讨论后已经得到修复。请耐心等待几个小时或一两天。 - N0rbert
这在Ubuntu的Docker容器中也会发生。对于这种情况,你可以忽略警告信息。 - wisbucky
1除非你有意这样做,否则不要从非常规文件夹中执行“sudo apt source”命令。你将会在根目录收到这条消息,那里可能是你正在使用grep/ack/find等命令查找东西的地方。 - mckenzm
9为什么这个问题到现在还没有解决,都已经快5年了?我刚刚又遇到了这个问题,有没有办法以root身份执行apt的所有操作?它已经需要root权限才能执行任何操作,为什么在下载时要降低权限?完全没有道理。 - Markus Bawidamann
完全可以理解取消下载权限的做法。比如说,HTTP代码中可能存在一些错误。 - undefined
5个回答

通常apt使用用户_apt来下载软件包。在您的情况下,_apt没有对/var/cache/apt/archives/partial/或现有文件/var/cache/apt/archives/partial/samba-libs_2%3a4.5.8+dfsg-0ubuntu0.17.04.1_i386.deb具有写权限,因此它以root身份下载了该文件。
请确保/var/cache/apt/archives/partial/及其所有子目录都对_apt可写,例如通过运行以下命令:
sudo chown -Rv _apt:root /var/cache/apt/archives/partial/
sudo chmod -Rv 700 /var/cache/apt/archives/partial/

5我在使用vagrant虚拟机外的挂载文件夹时遇到了这个问题,所以挂载的文件夹始终属于用户vagrant,无法更改。我该如何解决这个问题呢?也许只需禁用警告,因为在我的测试虚拟机中,如果apt由root运行,这不是一个问题。 - rubo77
1@rubo77 - 这个方法对我解决了这个问题:https://github.com/fgrehm/vagrant-cachier/issues/175#issuecomment-292630871 - 在synced_folder_opts中设置一个明确的所有者。 - Henk
在“chowning”和“chmoding”之后,运行以下命令也帮助了我: sudo chmod -Rv 755 /root/.synaptic/tmp。之后,再也没有错误了! - Ev-
1有趣...在我的情况下,我习惯于使用apt-get install <full-path-to-dot-deb>来安装自己的软件包,目前只在21.10版本中遇到这个错误。当然,这个文件是受到保护的,因为我拥有它。 - Alexis Wilke
2这里有一个更简单的解决方案:https://askubuntu.com/a/1416892/297529 - markling
文件权限问题针对_apt用户。只需在安装之前将下载的软件包文件移动到/tmp即可。 - undefined

tl;dr 不要理会与apt相关的“W: ... _apt ...”警告行。它们并不致命,大部分情况下你无法修复这个问题,而且无论是否有警告,你都会得到相同的结果。


即使实施了Florian Diesch在这里提供的好答案,我仍然收到这个警告。当我尝试下载源代码时,使用apt-get source ...,甚至尝试以root身份下载,比如使用sudo或su时,我都会收到这个警告(Debian 10.4和apt 1.8.2.1)。
网络上关于这个警告信息的问题很多,有许多不同的解决方案。显然,自从apt工具改用_apt进行沙盒安全操作以来,大量的人们一直在遇到麻烦。
似乎在进行这个_apt更改之后,有很多东西出了问题,但尚未完全修复。
让我们再次来分解这个问题:
首先,以W: 前缀开头的适当结果行只是警告。警告意味着某些异常情况,但并不会阻止程序继续运行。(参考:ref: Kusalananda
正如Florian指出的那样,“apt使用用户_apt来下载软件包”。看起来这是一个情况,即名为root的用户无法做到名为_apt的用户所能做的事情。

一个部分的解决方案(你真的不想使用):

你必须确保你所在的文件夹(即源代码将要放置的位置)是由_apt:root拥有的。因此,如果你运行$ mkdir temp; sudo chown _apt:root temp; sudo -s# cd temp; apt-get source ...,警告将不再出现。

当然,一旦完成后,你需要为这个基础文件夹设置更合理的所有权,因为被 _apt:root 拥有是很奇怪的。

有无警告消息结果是否相同?

# -- TEST 1:  get source into folder owned by user ------------
$ mkdir temp1;
$ cd temp1; sudo apt-get source gnupg2     # gives warning message:
...
W: Download is performed unsandboxed as root as file 'gnupg2_2.2.12-1+deb10u1.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)


# -- TEST 2:  get source into folder owned by root ------------
$ cd ..; sudo -s
# mkdir temp2;
# cd temp2;      apt-get source gnupg2     # gives warning message:
...
W: Download is performed unsandboxed as root as file 'gnupg2_2.2.12-1+deb10u1.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)


# -- TEST 3:  get source into folder owned by _apt:root -------
# cd ..
# mkdir temp3; chown _apt:root temp3
# cd temp3;      apt-get source gnupg2     #    no warning message now!


# == COMPARE the results ======================================
$ cd ..
$ sudo diff -r temp1 temp2                 # no differences
$ sudo diff -r temp1 temp3                 # no differences

所以无论有没有警告,结果都是一样的!
我忍不住要加一句玩笑话,这里讨论的APT并不是指那最可怕的东西:高级持续性威胁

我之前的回答在这里(是)

...直到现在,一直为我解决了这个问题,但现在我可以看到,这是不够的:

用这个来修复它:

sudo chown -R _apt:root /var/lib/apt/lists

看看


  • 需要将lists目录本身,而不仅仅是其内容,的所有者设置为_apt(即这是一个默认根所有权失败的重要文件分支!)

  • 当我删除lists,然后用sudo mkdir lists; apt update重新创建它时,可能出现了这个问题,这是在其他地方建议的。

  • 此解决方案可能是作为其他解决方案的补充因为我首先尝试了一堆其他方法。


Debian 10.2 Stretch。
# apt-get --version
apt 1.8.2 (amd64)
Supported modules:
*Ver: Standard .deb
*Pkg:  Debian dpkg interface (Priority 30)
 Pkg:  Debian APT solver interface (Priority -1000)
 Pkg:  Debian APT planner interface (Priority -1000)
 S.L: 'deb' Debian binary tree
 S.L: 'deb-src' Debian source tree
 Idx: Debian Source Index
 Idx: Debian Package Index
 Idx: Debian Translation Index
 Idx: Debian dpkg status file
 Idx: Debian deb file
 Idx: Debian dsc file
 Idx: Debian control file
 Idx: EDSP scenario file
 Idx: EIPP scenario file

1非常感谢你详细的回答,Elliptical view。真的非常感激。这应该是默认的接受答案! - xpt
1一行命令:mv package.deb /tmp; cd /tmp; sudo apt install package.deb - undefined

我在Debian Stretch上也遇到了这个问题(在Xen虚拟机的新安装上),结果发现是sudo的问题。

无法在机器上执行任何sudo命令。

更确切地说,系统的根目录/的权限设为700(drwx------)。将/的权限修改为755(chmod 755 /)即可解决问题。


谢谢,我在一个非特权的LXC容器中遇到了这个问题。原因和你提到的一样:容器的rootfs权限设置为750,但需要设置为755。 - Claudio Kuenzler
今天在Debian 11的chroot环境中遇到了这个问题,这是唯一有效的解决方案。 - Rui F Ribeiro

使文件本身可被“_apt”用户阅读。例如:
chmod 777 ./pdfsam-visual_2.1.4_amd64.deb

看一下文件本身的权限...
$ ls -l ./pdfsam-visual_2.1.4_amd64.deb 
-r-------- 1 john john 105659960 Apr  4 11:57 ./pdfsam-visual_2.1.4_amd64.deb

现在再次发送消息...
N: Download is performed unsandboxed as root as file
 'pdfsam-visual_2.1.4_amd64.deb' couldn't be accessed 
by user '_apt'. - pkgAcquire::Run (13: Permission denied)

错误是因为用户 _apt 想要访问本地文件。所以您只需要授予对该文件的访问权限。例如:
现在,如果您移除并重新安装,错误将会消失。
sudo apt remove pdfsam-visual
sudo apt install ./pdfsam-visual_2.1.4_amd64.deb

这里最简单的解决方案是:
只需使用旧版的apt-get:
apt-get --download install xzy
幸运的是,旧版的apt-get没有这个奇怪的bug。
Apt需要root权限才能执行任何操作,然后为了什么?下载???而所有的安装都是以root权限进行的?完全没有意义。
奇怪的是:apt没有强制标志,一个都没有,这非常奇怪。 再加上它不能用于所有脚本编写,所以是一大步退步。为什么我们不能有一个更好的、100%功能完善的apt-get替代品呢?