Ubuntu

Ubuntu:無法 apt-get 升級伺服器,dpkg 權限被拒絕,即使是 root?

  • September 9, 2011

我已經對系統進行了一般審計,發現一些軟體包正在老化,例如 OpenSSH 和相關的,所以我去 apt-get update 然後升級。

不幸的是,它似乎可以正確獲取軟體包(下載),但是無法完成升級過程。這是我最近顯示此錯誤的命令行的精確副本,請注意軟體包已經從之前的測試中下載,因此它需要檢索零字節(注意我是 root :)

root@foobar:~# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
 apt apt-utils at bind9-host binutils bsdutils curl dhcp3-client dhcp3-common
 dnsutils dpkg-dev ifupdown initscripts krb5-multidev language-pack-en
 language-pack-en-base libapache2-mod-php5 libapr1 libapr1-dev
 libavahi-client3 libavahi-common-data libavahi-common3 libbind9-60 libblkid1
 libc-bin libc-dev-bin libc6 libc6-dev libcurl3 libcurl3-gnutls libdbus-1-3
 libdns64 libgssapi-krb5-2 libgssrpc4 libisc60 libisccc60 libisccfg60
 libk5crypto3 libkadm5clnt-mit7 libkadm5srv-mit7 libkdb5-4 libkrb5-3
 libkrb5-dev libkrb5support0 liblcms1 libldap-2.4-2 libldap2-dev liblwres60
 libmysqlclient-dev libmysqlclient16 libnss3-1d libpam-runtime libpam0g
 libpango1.0-0 libpango1.0-common libplymouth2 libpq-dev libpq5 libssl-dev
 libssl0.9.8 libtiff4 libudev0 libuuid1 libxml2 libxml2-dev linux-libc-dev
 login logrotate mount mysql-client mysql-client-5.1 mysql-client-core-5.1
 mysql-common mysql-server mysql-server-5.1 mysql-server-core-5.1 nginx ntp
 ntpdate openjdk-6-jre-headless openjdk-6-jre-lib openssh-client
 openssh-server openssl opera passwd perl perl-base perl-modules php-pear
 php5 php5-cli php5-common php5-dev php5-gd php5-mysql plymouth postfix rsync
 rsyslog sudo sysv-rc sysvinit-utils tzdata tzdata-java udev update-inetd
 upstart util-linux uuid-dev vsftpd xkb-data
112 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0B/124MB of archives.
After this operation, 3,506kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Extracting templates from packages: 100%
Preconfiguring packages ...
/tmp/ifupdown.config.188089: 13: dpkg: Permission denied
/tmp/openssh-server.config.188701: 49: dpkg: Permission denied
Could not exec dpkg!
E: Sub-process /usr/bin/dpkg returned an error code (100)

我完全不確定我做錯了什麼,這個版本是 Ubuntu 的 10.04.2 LTS,它當然是我在 VPS 上使用的伺服器版本,它會強迫我做一些 dist-upgrade 什麼的第一的?這只是一些簡單的權限問題嗎?

在此之前我最近做了一件事,我按照審計指南的建議在 /tmp 中設置了粘性位,所以我不能允許其他使用者修改該文件夾中其他使用者的文件(它只是一個文件夾),我是想知道是不是這樣,或者我需要以不同的方式執行它..

肯。

根據以下評論的要求,

ls -la 輸出:

root@foobar:~# ls -la /tmp
total 20
drwxr-xr-t  5 mainuser mainuser 4096 2011-07-06 03:17 .
drwxr-xr-x 23 root   root   4096 2011-07-05 04:39 ..
drwxr-xr-x  2 root   root   4096 2011-06-17 03:30 hsperfdata_root
drwxrwxrwt  2 root   root   4096 2011-06-15 03:47 .ICE-unix
-rw-------  1 root   root      0 2011-07-05 04:13 lsat1.lsat
drwxrwxrwt  2 root   root   4096 2011-06-15 03:47 .X11-unix

更新:現在是在建議修復權限之後:

total 20
drwxrwxrwt  5 root root 4096 2011-07-06 03:50 .
drwxr-xr-x 23 root root 4096 2011-07-05 04:39 ..
drwxr-xr-x  2 root root 4096 2011-06-17 03:30 hsperfdata_root
drwxrwxrwt  2 root root 4096 2011-06-15 03:47 .ICE-unix
-rw-------  1 root root    0 2011-07-05 04:13 lsat1.lsat
drwxrwxrwt  2 root root 4096 2011-06-15 03:47 .X11-unix

問題仍然存在。

問題很可能與位於 /tmp 中的文件無關;這些是apt-get創建的腳本,然後會導致一些錯誤(13 和 49 是行號)。具體來說,腳本無法執行該dpkg命令。

在您的系統上查找dpkg,確保它在您的系統中$PATH(或者至少在某個apt-get可以找到它的地方),並確保它是可執行的(chmod +x)。

我遇到了同樣的問題。我讀過 /var 可以掛載 noexec,顯然它不能,因為從 fstab 中刪除 noexec 並重新啟動 apt-get 再次開始工作。

引用自:https://serverfault.com/questions/287443