我对系统进行了一般的审计,发现一些软件包老化了,比如OpenSSH和相关的,所以我去了apt-get update然后升级。
不幸的是,它似乎正确地获得包(下载),但无法完成升级过程。 这里是我最近的命令行显示这个错误的一个确切的副本,请注意,软件包已经从此前的testing下载,所以它需要检索零字节(注意我是根:)
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上使用的服务器版本,它会迫使我做一些远程升级或者什么第一? 这只是一些简单的权限问题?
最近我做了一件事情,我已经按照审计指南的build议在/ 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
更新:现在是这个build议修复权限后:
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创build的脚本,然后导致一些错误(13和49是行号)。 具体来说,脚本无法执行dpkg命令。
find你的系统上的dpkg ,确保它在你的$PATH (或者至less在apt-get可以find的地方),并确保它是可执行的( chmod +x )。
我遇到了同样的问题。 我读过/ var可以挂载noexec,显然它不能,如从fstab中删除noexec并重新启动apt-get开始再次工作。
谁是拥有/ tmp的主用户? 不是/ tmp通常是世界可写的,我的设置为:
drwxrwxrwt 17 root root 4.0K 2011-07-06 11:43 tmp
你应该可以修改你的许可:
chown root:root /tmp chmod g+w,o+w /tmp
这会将所有者和组更改为root ,然后允许该组成员的写入权限,以及其他权限。