验证与包相关的所有文件和目录的所有权

验证与包相关的所有文件和目录的所有权

在 Redhat 中,我们可以使用以下命令验证与包相关的所有文件和目录的所有权:

# rpm -Va | grep '^......U'

Ubuntu 有没有等效的命令?我知道debsums相当于rpm -Va,但我不明白的意思grep '^......U'

答案1

如果deb软件包仍然位于 下/var/cache/apt/archives/,则可以使用dpkg -c <packagename>列出软件包的内容。软件包 apt-file_2.5.1_all.deb 的示例输出(我现在使用的是 Debian 系统):

drwxr-xr-x root/root         0 2012-06-03 10:32 ./
drwxr-xr-x root/root         0 2012-06-03 10:32 ./etc/
drwxr-xr-x root/root         0 2012-06-03 10:32 ./etc/apt/
-rw-r--r-- root/root      2144 2012-06-03 10:32 ./etc/apt/apt-file.conf
drwxr-xr-x root/root         0 2012-06-03 10:32 ./etc/bash_completion.d/
-rw-r--r-- root/root       748 2012-06-03 10:32 ./etc/bash_completion.d/apt-file
drwxr-xr-x root/root         0 2012-06-03 10:32 ./usr/
drwxr-xr-x root/root         0 2012-06-03 10:32 ./usr/bin/
-rwxr-xr-x root/root     10584 2012-06-03 10:32 ./usr/bin/diffindex-download
-rwxr-xr-x root/root      8762 2012-06-03 10:32 ./usr/bin/diffindex-rred
-rwxr-xr-x root/root     23919 2012-06-03 10:32 ./usr/bin/apt-file
-rwxr-xr-x root/root      6437 2012-06-03 10:32 ./usr/bin/rapt-file
drwxr-xr-x root/root         0 2012-06-03 10:32 ./usr/share/
drwxr-xr-x root/root         0 2012-06-03 10:32 ./usr/share/apt-file/
-rw-r--r-- root/root       558 2012-06-03 10:32 ./usr/share/apt-file/apt-file-update.update-notifier
-rwxr-xr-x root/root        98 2012-06-03 10:32 ./usr/share/apt-file/do-apt-file-update
-rwxr-xr-x root/root       370 2012-06-03 10:32 ./usr/share/apt-file/is-cache-empty
drwxr-xr-x root/root         0 2012-06-03 10:32 ./usr/share/man/
drwxr-xr-x root/root         0 2012-06-03 10:32 ./usr/share/man/man1/
-rw-r--r-- root/root      2628 2012-06-03 10:32 ./usr/share/man/man1/apt-file.1.gz
-rw-r--r-- root/root       905 2012-06-03 10:32 ./usr/share/man/man1/diffindex-download.1.gz
-rw-r--r-- root/root       646 2012-06-03 10:32 ./usr/share/man/man1/diffindex-rred.1.gz
-rw-r--r-- root/root      1023 2012-06-03 10:32 ./usr/share/man/man1/rapt-file.1.gz
drwxr-xr-x root/root         0 2012-06-03 10:32 ./usr/share/doc/
drwxr-xr-x root/root         0 2012-06-03 10:32 ./usr/share/doc/apt-file/
-rw-r--r-- root/root       401 2012-06-02 18:50 ./usr/share/doc/apt-file/README
-rw-r--r-- root/root       464 2012-06-02 18:50 ./usr/share/doc/apt-file/copyright
-rw-r--r-- root/root      8634 2012-06-03 10:28 ./usr/share/doc/apt-file/changelog.gz
drwxr-xr-x root/root         0 2012-06-03 10:32 ./var/
drwxr-xr-x root/root         0 2012-06-03 10:32 ./var/cache/
drwxr-xr-x root/root         0 2012-06-03 10:32 ./var/cache/apt/
drwxr-xr-x root/root         0 2012-06-03 10:32 ./var/cache/apt/apt-file/

您现在可以检查权限并进行相应的设置。

本网站有一个脚本(如下所示),您可以使用它根据系统中的软件包重新设置权限。
要将脚本的范围限制到单个.deb软件包,请将相关软件包复制到/var/cache/apt/archives/另一个文件夹,并将该文件夹放入ARCHIVE_DIR脚本的变量中。

#!/bin/bash
# Restores file permissions for all files on a debian system for which .deb
# packages exist.
#
# Author: Larry Kagan <me at larrykagan dot com>
# Since 2007-02-20
ARCHIVE_DIR=/var/cache/apt/archives/
PACKAGES=`ls $ARCHIVE_DIR`
cd /
function changePerms()
{
CHOWN="/bin/chown"
CHMOD="/bin/chmod"
PERMS=`echo $1 | sed -e 's/--x/1/g' -e 's/-w-/2/g' -e 's/-wx/3/g' -e 's/r--/4/g' -e 's/r-x/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g' -e 's/---/0/g'`
PERMS=`echo ${PERMS:1}`
OWN=`echo $2 | /usr/bin/tr '/' '.'`
PATHNAME=$3
PATHNAME=`echo ${PATHNAME:1}`
echo -e "CHOWN: $CHOWN $OWN $PATHNAME"
result=`$CHOWN $OWN $PATHNAME`
if [ $? -ne 0 ]; then
echo -e $result
fi
echo -e "CHMOD: $CHMOD $PERMS $PATHNAME"
result=`$CHMOD $PERMS $PATHNAME`
if [ $? -ne 0 ]; then
echo -e $result
fi
}
for PACKAGE in $PACKAGES;
do
if [ -d $PACKAGE ]; then
continue;
fi
echo -e "Getting information for $PACKAGE\n"
FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"`
for FILE in "$FILES";
do
echo "$FILE" | awk '{print $1"\t"$2"\t"$6}' | while read line;
do
changePerms $line
done
done
done

答案2

man rpm

输出的格式是 8 个字符的字符串,可能为“C“表示配置文件,然后是文件名。8 个字符中的每一个都表示文件属性与数据库中记录的属性值的比较结果。单个““(句号)表示测试通过,而单个““表示无法执行测试(例如文件权限阻止读取)。否则,(助记加粗的)字符表示相应--verify测试失败:

年代文件年代大小不同
......
ser 所有权不同

U输出的第六列表示用户所有权已发生变化(因此.您的 中的五grep)。

debsums我在各种实用程序中找不到任何类似的东西dpkg

我想知道使用 Debian 打包是否可以实现这一点,因为:

  1. 无论创建软件包时文件的所有者是谁,对于安装而言,它们的所有者都是root:root。只有模式保持不变。
  2. chmod使用脚本中的postinst(例如)设置所有权nslcd

唯一的方法是使用某种 IDS,例如 AIDE 或 OSSEC。

相关内容