我对系统进行了全面审核,发现一些软件包已经老化,例如 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
但问题仍然存在。
答案1
问题很可能不是出在 /tmp 中的文件上;而是apt-get
创建脚本,然后导致一些错误(13 和 49 是行号)。具体来说,脚本无法执行命令dpkg
。
在您的系统上查找dpkg
,确保它在您的系统中$PATH
(或者至少在某处apt-get
可以找到它),并确保它是可执行的(chmod +x
)。
答案2
我也遇到了同样的问题。我读到过 /var 可以 noexec 挂载,但显然它不能,因为从 fstab 中删除 noexec 并重新启动后,apt-get 又开始工作了。
答案3
这是谁主要用户谁拥有 /tmp?/tmp 通常不是所有人都可写的吗?我的设置如下:
drwxrwxrwt 17 root root 4.0K 2011-07-06 11:43 tmp
您应该能够使用以下命令修改您的许可:
chown root:root /tmp
chmod g+w,o+w /tmp
这会将所有者和组更改为根,然后允许成员写入权限团体,并且其他的。