为什么 uname -a 不返回一个有用的标识符

Sea*_*ean 4 distros linux version utilities

我将命令输入uname -a到我大学的服务器中并得到了这个:

2.6.18-274.3.1.el5 #1 SMP Tue Sep 6 20:14:03 EDT 2011 i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

他们是否试图隐藏服务器运行的 Linux 版本?或者它显示的内核意味着它们不是?因为当我uname -a在 Linux 盒子上输入时,它显示我正在运行 Ubuntu。我只是想弄清楚他们是否出于安全原因想要保密。

Gil*_*il' 10

的输出uname并非设计为神秘的;它没有显示您认为有用的信息的原因是它的目的是显示机器和内核标识,而不是操作系统标识。您仍然可以大致猜测 Linux 发行版,因为编译内核的人倾向于在内核发行版名称 ( uname -r) 或版本 ( uname -v) 中包含一些信息,以便支持人员可以判断您是否正在运行官方内核以及哪个。比如这里,.el是RHEL使用的,版本包含编译日期。

没有POSIX级别的操作系统标识,因为大多数 unices 在内核版本和操作系统版本之间具有一对一的映射关系。在 Linux 上情况并非如此,其中相同的内核在多个发行版之间共享,甚至在多个操作系统之间共享(GNU/X11/Apache/Linux/TeX/Perl/Python/FreeCiv,通常简称为“Linux”,还有Android其他不太知名的系统)。

Linux标准基础指定一个lsb_release表示返回有关分发信息命令。lsb_release -irlsb_release -d显示您想要的分发信息。

现在大多数 Linux 发行版都有这个lsb_release命令。如果你的没有,那不是出于安全目的:试图隐藏分发是没有意义的;如果您可以看到系统上的文件,您可以通过各种方式判断(通过检查已安装的软件包、将系统文件与已知值进行比较等等)。对攻击者特别有用的唯一信息是知道存在哪些安全漏洞,这实际上不是分发的函数,而是已应用或未应用哪些安全更新的函数(同样,可以在各种方式——包括启动漏洞利用并希望它有效,所以试图隐藏它没有任何意义)。缺乏lsb_release 可能是由于缺乏标准化:每个发行版都以不同的方式存储其版本号。