1#!/bin/sh 2 3################################################################################# 4# 5# Lynis 6# ------------------ 7# 8# Copyright 2007-2013, Michael Boelen 9# Copyright 2007-2021, CISOfy 10# 11# Website : https://cisofy.com 12# Blog : http://linux-audit.com 13# GitHub : https://github.com/CISOfy/lynis 14# 15# Lynis comes with ABSOLUTELY NO WARRANTY. This is free software, and you are 16# welcome to redistribute it under the terms of the GNU General Public License. 17# See LICENSE file for usage of this software. 18# 19################################################################################# 20# 21# Operating System detection 22# 23################################################################################# 24# 25 # Check operating system 26 case $(uname) in 27 28 # IBM AIX 29 AIX) 30 OS="AIX" 31 OS_NAME="AIX" 32 OS_VERSION=$(oslevel) 33 OS_FULLNAME="AIX ${OS_VERSION}" 34 CPU=$(uname -p) 35 HARDWARE=$(uname -M) 36 FIND_BINARIES="whereis -b" 37 SYSCTL_READKEY="" 38 ;; 39 40 # Mac OS X and macOS 41 Darwin) 42 OS="macOS" 43 if [ -x /usr/bin/sw_vers ]; then 44 OS_NAME=$(/usr/bin/sw_vers -productName) 45 OS_VERSION=$(/usr/bin/sw_vers -productVersion) 46 OS_VERSION_NAME="unknown" 47 OS_FULLNAME="macOS (unknown version)" 48 case ${OS_VERSION} in 49 10.0 | 10.0.[0-9]*) OS_FULLNAME="Mac OS X 10.0 (Cheetah)" ;; 50 10.1 | 10.1.[0-9]*) OS_FULLNAME="Mac OS X 10.1 (Puma)" ;; 51 10.2 | 10.2.[0-9]*) OS_FULLNAME="Mac OS X 10.2 (Jaguar)" ;; 52 10.3 | 10.3.[0-9]*) OS_FULLNAME="Mac OS X 10.3 (Panther)" ;; 53 10.4 | 10.4.[0-9]*) OS_FULLNAME="Mac OS X 10.4 (Tiger)" ;; 54 10.5 | 10.5.[0-9]*) OS_FULLNAME="Mac OS X 10.5 (Leopard)" ;; 55 10.6 | 10.6.[0-9]*) OS_FULLNAME="Mac OS X 10.6 (Snow Leopard)" ;; 56 10.7 | 10.7.[0-9]*) OS_FULLNAME="Mac OS X 10.7 (Lion)" ;; 57 10.8 | 10.8.[0-9]*) OS_FULLNAME="Mac OS X 10.8 (Mountain Lion)" ;; 58 10.9 | 10.9.[0-9]*) OS_FULLNAME="Mac OS X 10.9 (Mavericks)" ;; 59 10.10 | 10.10.[0-9]*) OS_FULLNAME="Mac OS X 10.10 (Yosemite)" ;; 60 10.11 | 10.11.[0-9]*) OS_FULLNAME="Mac OS X 10.11 (El Capitan)" ;; 61 10.12 | 10.12.[0-9]*) OS_FULLNAME="macOS Sierra (${OS_VERSION})" ;; 62 10.13 | 10.13.[0-9]*) OS_FULLNAME="macOS High Sierra (${OS_VERSION})" ;; 63 10.14 | 10.14.[0-9]*) OS_FULLNAME="macOS Mojave (${OS_VERSION})" ;; 64 10.15 | 10.15.[0-9]*) OS_FULLNAME="macOS Catalina (${OS_VERSION})" ;; 65 11 | 11.[0-9]*) OS_FULLNAME="macOS Big Sur (${OS_VERSION})" ;; 66 12 | 12.[0-9]*) OS_FULLNAME="macOS Monterey (${OS_VERSION})" ;; 67 *) echo "Unknown macOS version. Do you know what version it is? Create an issue at ${PROGRAM_SOURCE}" ;; 68 esac 69 else 70 # Fall back to a fairly safe name 71 OS_NAME="macOS" 72 # uname -s -r shows Darwin 16.1.0 73 OS_FULLNAME=$(uname -s -r) 74 # shows 16.1.0 for Darwin's version, not macOS's 75 OS_VERSION=$(uname -r) 76 fi 77 HARDWARE=$(uname -m) 78 HOMEDIRS="/Users" 79 FIND_BINARIES="whereis" 80 OS_KERNELVERSION=$(uname -r) 81 SYSCTL_READKEY="" 82 ;; 83 84 # DragonFly BSD 85 DragonFly) 86 OS="DragonFly" 87 OS_NAME="DragonFly BSD" 88 OS_FULLNAME=$(uname -s -r) 89 OS_VERSION=$(uname -r) 90 HARDWARE=$(uname -m) 91 HOMEDIRS="/home /root" 92 FIND_BINARIES="whereis -q -a -b" 93 OS_KERNELVERSION=$(uname -i) 94 SYSCTL_READKEY="sysctl -n" 95 ;; 96 97 # FreeBSD 98 FreeBSD) 99 OS="FreeBSD" 100 OS_NAME="FreeBSD" 101 OS_FULLNAME=$(uname -s -r) 102 OS_VERSION=$(uname -r) 103 HARDWARE=$(uname -m) 104 HOMEDIRS="/home /root" 105 FIND_BINARIES="whereis -q -a -b" 106 OS_KERNELVERSION=$(uname -i) 107 SYSCTL_READKEY="sysctl -n" 108 109 # TrueOS 110 if [ -f /etc/defaults/trueos ]; then 111 OS_NAME="TrueOS" 112 LogText "Result: found TrueOS file, system is completely based on FreeBSD though. Only adjusting OS name." 113 fi 114 ;; 115 116 # HP-UX 117 HP-UX) 118 OS="HP-UX" 119 OS_NAME="HP-UX" 120 OS_FULLNAME=$(uname -s -r) 121 OS_VERSION=$(uname -r) 122 HARDWARE=$(uname -m) 123 FIND_BINARIES="whereis -b" 124 SYSCTL_READKEY="" 125 LOGDIR="/var/adm/syslog" 126 ;; 127 128 # Linux 129 Linux) 130 OS="Linux" 131 OS_NAME="Linux" 132 OS_FULLNAME="" 133 OS_VERSION=$(uname -r) 134 LINUX_VERSION="" 135 HARDWARE=$(uname -m) 136 HOMEDIRS="/home" 137 FIND_BINARIES="whereis -b" 138 OS_KERNELVERSION_FULL=$(uname -r) 139 OS_KERNELVERSION=$(echo ${OS_KERNELVERSION_FULL} | sed 's/-.*//') 140 if [ -e /dev/grsec ]; then GRSEC_FOUND=1; fi 141 142 # Generic 143 if [ -e /etc/os-release ]; then 144 OS_FULLNAME=$(awk -F= '/^PRETTY_NAME=/ {print substr($2,2,length($2)-2)}' /etc/os-release) 145 OS_ID=$(grep "^ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 146 if [ -n "${OS_ID}" ]; then 147 case ${OS_ID} in 148 "almalinux") 149 LINUX_VERSION="AlmaLinux" 150 OS_NAME=$(grep "^PRETTY_NAME=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 151 OS_REDHAT_OR_CLONE=1 152 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 153 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 154 ;; 155 "alpine") 156 LINUX_VERSION="Alpine Linux" 157 OS_NAME=$(grep "^PRETTY_NAME=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 158 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 159 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 160 ;; 161 "amzn") 162 LINUX_VERSION="Amazon Linux" 163 OS_NAME="Amazon Linux" 164 OS_REDHAT_OR_CLONE=1 165 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 166 ;; 167 "arch") 168 LINUX_VERSION="Arch Linux" 169 OS_FULLNAME="Arch Linux" 170 OS_VERSION="Rolling release" 171 ;; 172 "arch32") 173 LINUX_VERSION="Arch Linux 32" 174 OS_FULLNAME="Arch Linux 32" 175 OS_VERSION="Rolling release" 176 ;; 177 "artix") 178 LINUX_VERSION="Artix Linux" 179 OS_FULLNAME="Artix Linux" 180 OS_VERSION="Rolling release" 181 ;; 182 "bunsenlabs") 183 LINUX_VERSION="BunsenLabs" 184 OS_NAME="BunsenLabs" 185 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 186 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 187 ;; 188 "centos") 189 LINUX_VERSION="CentOS" 190 OS_NAME="CentOS Linux" 191 OS_REDHAT_OR_CLONE=1 192 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 193 ;; 194 "clear-linux-os") 195 LINUX_VERSION="Clear Linux OS" 196 OS_NAME="Clear Linux OS" 197 OS_REDHAT_OR_CLONE=1 198 OS_VERSION="Rolling release" 199 ;; 200 "cloudlinux") 201 LINUX_VERSION="CloudLinux" 202 OS_NAME="CloudLinux" 203 OS_REDHAT_OR_CLONE=1 204 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 205 ;; 206 "coreos") 207 LINUX_VERSION="CoreOS" 208 OS_NAME="CoreOS Linux" 209 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 210 ;; 211 "debian") 212 LINUX_VERSION="Debian" 213 OS_NAME="Debian" 214 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 215 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 216 ;; 217 "devuan") 218 LINUX_VERSION="Devuan" 219 OS_NAME="Devuan" 220 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 221 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 222 ;; 223 "elementary") 224 LINUX_VERSION="elementary OS" 225 OS_NAME="elementary OS" 226 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 227 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 228 ;; 229 "endeavouros") 230 LINUX_VERSION="EndeavourOS" 231 OS_NAME="EndeavourOS" 232 OS_VERSION="Rolling release" 233 OS_VERSION_FULL="Rolling release" 234 ;; 235 "fedora") 236 LINUX_VERSION="Fedora" 237 OS_NAME="Fedora Linux" 238 OS_REDHAT_OR_CLONE=1 239 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 240 ;; 241 "flatcar") 242 LINUX_VERSION="Flatcar" 243 LINUX_VERSION_LIKE="CoreOS" 244 OS_NAME="Flatcar Linux" 245 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 246 ;; 247 "garuda") 248 LINUX_VERSION="Garuda" 249 OS_FULLNAME="Garuda Linux" 250 OS_NAME="Garuda" 251 OS_VERSION="Rolling release" 252 ;; 253 "gentoo") 254 LINUX_VERSION="Gentoo" 255 OS_NAME="Gentoo Linux" 256 OS_VERSION="Rolling release" 257 ;; 258 "ipfire") 259 LINUX_VERSION="IPFire" 260 OS_NAME="IPFire" 261 OS_VERSION=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 262 ;; 263 "kali") 264 LINUX_VERSION="Kali" 265 LINUX_VERSION_LIKE="Debian" 266 OS_NAME="Kali Linux" 267 OS_VERSION="Rolling release" 268 ;; 269 "linuxmint") 270 LINUX_VERSION="Linux Mint" 271 LINUX_VERSION_LIKE="Ubuntu" 272 OS_NAME="Linux Mint" 273 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 274 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 275 ;; 276 "mageia") 277 LINUX_VERSION="Mageia" 278 OS_NAME="Mageia" 279 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 280 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 281 ;; 282 "manjaro" | "manjaro-arm") 283 LINUX_VERSION="Manjaro" 284 OS_FULLNAME="Manjaro Linux" 285 OS_NAME="Manjaro" 286 OS_VERSION="Rolling release" 287 ;; 288 "nethserver") 289 LINUX_VERSION="NethServer" 290 OS_NAME="NethServer" 291 OS_REDHAT_OR_CLONE=1 292 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 293 ;; 294 "nixos") 295 LINUX_VERSION="NixOS" 296 OS_NAME="NixOS" 297 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 298 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 299 ;; 300 "ol") 301 LINUX_VERSION="Oracle Linux" 302 OS_NAME="Oracle Linux" 303 OS_REDHAT_OR_CLONE=1 304 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 305 ;; 306 "opensuse-tumbleweed") 307 LINUX_VERSION="openSUSE Tumbleweed" 308 # It's rolling release but has a snapshot version (the date of the snapshot) 309 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 310 OS_NAME="openSUSE" 311 ;; 312 "opensuse-leap") 313 LINUX_VERSION="openSUSE Leap" 314 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 315 OS_NAME="openSUSE" 316 ;; 317 "opensuse-microos") 318 LINUX_VERSION="openSUSE MicroOS" 319 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 320 OS_NAME="openSUSE" 321 ;; 322 "parrot") 323 LINUX_VERSION="Parrot" 324 OS_NAME="Parrot GNU/Linux" 325 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 326 OS_VERSION_FULL=$(grep "^PRETTY_NAME=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 327 ;; 328 "pop") 329 LINUX_VERSION="Pop!_OS" 330 LINUX_VERSION_LIKE="Ubuntu" 331 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 332 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 333 OS_NAME="Pop!_OS" 334 ;; 335 "pureos") 336 LINUX_VERSION="PureOS" 337 LINUX_VERSION_LIKE="Debian" 338 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 339 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 340 OS_NAME="PureOS" 341 ;; 342 "raspbian") 343 LINUX_VERSION="Raspbian" 344 LINUX_VERSION_LIKE="Debian" 345 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 346 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 347 OS_NAME="Raspbian" 348 ;; 349 "rhel") 350 LINUX_VERSION="RHEL" 351 OS_NAME="RHEL" 352 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 353 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 354 OS_FULLNAME="${OS_NAME} ${OS_VERSION_FULL}" 355 OS_REDHAT_OR_CLONE=1 356 ;; 357 "rocky") 358 LINUX_VERSION="Rocky Linux" 359 OS_NAME="Rocky Linux" 360 OS_REDHAT_OR_CLONE=1 361 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 362 ;; 363 "rosa") 364 LINUX_VERSION="ROSA Linux" 365 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 366 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 367 OS_NAME="ROSA Linux" 368 ;; 369 "slackware") 370 LINUX_VERSION="Slackware" 371 OS_NAME="Slackware Linux" 372 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 373 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 374 ;; 375 "sles") 376 LINUX_VERSION="SLES" 377 OS_NAME="openSUSE" 378 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 379 OS_VERSION_FULL=$(grep "^PRETTY_NAME=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 380 ;; 381 "ubuntu") 382 LINUX_VERSION="Ubuntu" 383 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 384 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 385 OS_NAME="Ubuntu" 386 ;; 387 "void") 388 LINUX_VERSION="Void Linux" 389 OS_VERSION="Rolling release" 390 OS_NAME="Void Linux" 391 ;; 392 "zorin") 393 LINUX_VERSION="Zorin OS" 394 OS_NAME="Zorin OS" 395 OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 396 OS_VERSION_FULL=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 397 ;; 398 *) 399 ReportException "OS Detection" "Unknown OS found in /etc/os-release - Please create an issue on GitHub and share the the contents (cat /etc/os-release): ${PROGRAM_SOURCE}" 400 ;; 401 esac 402 fi 403 fi 404 405 # Alpine 406 if [ -e "/etc/alpine-release" ]; then LINUX_VERSION="Alpine Linux"; OS_VERSION=$(cat /etc/alpine-release); fi 407 408 # Amazon 409 if [ -z "${LINUX_VERSION}" -a -e "/etc/system-release" ]; then 410 FIND=$(grep "^Amazon" /etc/system-release) 411 if [ -n "${FIND}" ]; then 412 OS_REDHAT_OR_CLONE=1 413 OS_FULLNAME=$(grep "^Amazon" /etc/system-release) 414 OS_VERSION=$(grep "^Amazon" /etc/system-release | awk '{ if ($4=="release") { print $5 } }') 415 LINUX_VERSION="Amazon" 416 fi 417 fi 418 419 # Arch Linux 420 if [ -z "${OS_FULLNAME}" -a -e "/etc/arch-release" ]; then 421 OS_FULLNAME="Arch Linux" 422 OS_VERSION="Unknown" 423 LINUX_VERSION="Arch Linux" 424 fi 425 426 # Chakra Linux 427 if [ -e "/etc/chakra-release" ]; then 428 OS_FULLNAME=$(grep "^Chakra" /etc/chakra-release) 429 OS_VERSION=$(awk '/^Chakra/ { if ($3=="release") { print $4 }}' /etc/chakra-release) 430 LINUX_VERSION="Chakra Linux" 431 fi 432 433 # Cobalt 434 if [ -e "/etc/cobalt-release" ]; then OS_FULLNAME=$(cat /etc/cobalt-release); fi 435 436 # CPUBuilders Linux 437 if [ -e "/etc/cpub-release" ]; then OS_FULLNAME=$(cat /etc/cpub-release); fi 438 439 if [ -z "${LINUX_VERSION}" ] && [ -e "/etc/debian_version" ]; then 440 # Debian/Ubuntu (***) - Set first to Debian 441 OS_VERSION=$(cat /etc/debian_version) 442 OS_FULLNAME="Debian ${OS_VERSION}" 443 LINUX_VERSION="Debian" 444 445 # /etc/lsb-release does not exist on Debian 446 if [ -e /etc/lsb-release ]; then 447 OS_VERSION=$(cat /etc/debian_version) 448 FIND=$(grep "^DISTRIB_ID=" /etc/lsb-release | cut -d '=' -f2 | sed 's/"//g') 449 if [ "${FIND}" = "Ubuntu" ]; then 450 OS_VERSION=$(grep "^DISTRIB_RELEASE=" /etc/lsb-release | cut -d '=' -f2) 451 OS_FULLNAME="Ubuntu ${OS_VERSION}" 452 LINUX_VERSION="Ubuntu" 453 elif [ "${FIND}" = "elementary OS" ]; then 454 LINUX_VERSION="elementary OS" 455 LINUX_VERSION_LIKE="Ubuntu" 456 OS_VERSION=$(grep "^DISTRIB_RELEASE=" /etc/lsb-release | cut -d '=' -f2) 457 OS_FULLNAME=$(grep "^DISTRIB_DESCRIPTION=" /etc/lsb-release | cut -d '=' -f2 | sed 's/"//g') 458 else 459 # Catch all, in case it's unclear what specific release this is. 460 OS_FULLNAME="Debian ${OS_VERSION}" 461 LINUX_VERSION="Debian" 462 fi 463 # Ubuntu test (optional) $(grep "[Uu]buntu" /proc/version) 464 fi 465 fi 466 467 # Override for Linux Mint, as that is initially detected as Debian or Ubuntu 468 if [ -x /usr/bin/lsb_release ]; then 469 FIND=$(lsb_release --id | awk -F: '{ print $2 }' | awk '{ print $1 }') 470 if [ "${FIND}" = "LinuxMint" ]; then 471 LINUX_VERSION="Linux Mint" 472 # LMDE (Linux Mint Debian Edition) should be detected as Debian 473 LINUX_VERSION_LIKE="Ubuntu" 474 OS_VERSION=$(lsb_release --release | awk '{ print $2 }') 475 OS_FULLNAME="Linux Mint ${OS_VERSION}" 476 fi 477 fi 478 479 # E-smith 480 if [ -e "/etc/e-smith-release" ]; then OS_FULLNAME=$(cat /etc/e-smith-release); fi 481 482 # Gentoo 483 if [ -e "/etc/gentoo-release" ]; then LINUX_VERSION="Gentoo"; OS_FULLNAME=$(cat /etc/gentoo-release); fi 484 485 # Red Hat and others 486 if [ -z "${LINUX_VERSION}" -a -e "/etc/redhat-release" ]; then 487 OS_REDHAT_OR_CLONE=1 488 489 # CentOS 490 if grep "CentOS" /etc/redhat-release; then 491 OS_FULLNAME=$(grep "CentOS" /etc/redhat-release) 492 LINUX_VERSION="CentOS" 493 OS_VERSION="${OS_FULLNAME}" 494 fi 495 496 # ClearOS 497 FIND=$(grep "ClearOS" /etc/redhat-release) 498 if [ ! "${FIND}" = "" ]; then 499 OS_FULLNAME=$(grep "ClearOS" /etc/redhat-release) 500 LINUX_VERSION="ClearOS" 501 OS_VERSION="${OS_FULLNAME}" 502 fi 503 504 # Fedora 505 FIND=$(grep "Fedora" /etc/redhat-release) 506 if [ ! "${FIND}" = "" ]; then 507 OS_FULLNAME=$(grep "Fedora" /etc/redhat-release) 508 OS_VERSION="${OS_FULLNAME}" 509 LINUX_VERSION="Fedora" 510 fi 511 512 513 # Oracle Enterprise Linux 514 FIND=$(grep "Enterprise Linux Enterprise Linux Server" /etc/redhat-release) 515 if [ ! "${FIND}" = "" ]; then 516 LINUX_VERSION="Oracle Enterprise Linux" 517 OS_FULLNAME=$(grep "Enterprise Linux" /etc/redhat-release) 518 OS_VERSION="${OS_FULLNAME}" 519 fi 520 521 # Oracle Enterprise Linux 522 if [ -e /etc/oracle-release ]; then 523 FIND=$(grep "Oracle Linux Server" /etc/oracle-release) 524 if [ ! "${FIND}" = "" ]; then 525 LINUX_VERSION="Oracle Enterprise Linux" 526 OS_FULLNAME=$(grep "Oracle Linux" /etc/oracle-release) 527 OS_VERSION="${OS_FULLNAME}" 528 fi 529 fi 530 531 # Oracle VM Server 532 if [ -e /etc/ovs-release ]; then 533 FIND=$(grep "Oracle VM" /etc/ovs-release) 534 if [ ! "${FIND}" = "" ]; then 535 LINUX_VERSION="Oracle VM Server" 536 OS_FULLNAME=$(grep "Oracle VM" /etc/ovs-release) 537 OS_VERSION="${OS_FULLNAME}" 538 fi 539 fi 540 541 # Scientific 542 FIND=$(grep "Scientific" /etc/redhat-release) 543 if [ ! "${FIND}" = "" ]; then 544 OS_FULLNAME=$(grep "^Scientific" /etc/redhat-release) 545 OS_VERSION=$(grep "^Scientific" /etc/redhat-release | awk '{ if ($3=="release") { print $4 } }') 546 LINUX_VERSION="Scientific" 547 fi 548 549 if [ -z "${LINUX_VERSION}" ]; then 550 # Red Hat 551 FIND=$(grep "Red Hat" /etc/redhat-release) 552 if [ ! "${FIND}" = "" ]; then 553 OS_FULLNAME=$(grep "Red Hat" /etc/redhat-release) 554 OS_VERSION="${OS_FULLNAME}" 555 LINUX_VERSION="Red Hat" 556 fi 557 fi 558 559 fi 560 561 # PCLinuxOS 562 if [ -f /etc/pclinuxos-release ]; then 563 FIND=$(grep "^PCLinuxOS" /etc/pclinuxos-release) 564 if [ ! "${FIND}" = "" ]; then 565 OS_FULLNAME="PCLinuxOS Linux" 566 LINUX_VERSION="PCLinuxOS" 567 OS_VERSION=$(grep "^PCLinuxOS" /etc/pclinuxos-release | awk '{ if ($2=="release") { print $3 } }') 568 fi 569 fi 570 571 # Sabayon Linux 572 if [ -f /etc/sabayon-edition ]; then 573 FIND=$(grep "Sabayon Linux" /etc/sabayon-edition) 574 if [ ! "${FIND}" = "" ]; then 575 OS_FULLNAME="Sabayon Linux" 576 LINUX_VERSION="Sabayon" 577 OS_VERSION=$(awk '{ print $3 }' /etc/sabayon-edition) 578 fi 579 fi 580 581 if [ -f /etc/SLOX-release ]; then 582 OS_FULLNAME=$(grep "SuSE Linux" /etc/SLOX-release) 583 LINUX_VERSION="SuSE" 584 fi 585 586 # Slackware 587 if [ -f /etc/slackware-version ]; then 588 LINUX_VERSION="Slackware" 589 OS_VERSION=$(grep "^Slackware" /etc/slackware-version | awk '{ if ($1=="Slackware") { print $2 } }') 590 OS_FULLNAME="Slackware Linux ${OS_VERSION}" 591 fi 592 593 # SuSE 594 if [ -e "/etc/SuSE-release" ]; then 595 OS_VERSION=$(head -n 1 /etc/SuSE-release) 596 LINUX_VERSION="SuSE" 597 fi 598 599 # Turbo Linux 600 if [ -e "/etc/turbolinux-release" ]; then OS_FULLNAME=$(cat /etc/turbolinux-release); fi 601 602 # YellowDog 603 if [ -e "/etc/yellowdog-release" ]; then OS_FULLNAME=$(cat /etc/yellowdog-release); fi 604 605 # VMware 606 if [ -e "/etc/vmware-release" ]; then 607 OS_FULLNAME=$(cat /etc/vmware-release) 608 OS_VERSION=$(uname -r) 609 IS_VMWARE_ESXI=$(vmware -vl | grep VMware ESXi) 610 if [ ! "${IS_VMWARE_ESXI}" = "" ]; then 611 OS_FULLNAME="VMware ESXi ${OS_VERSION}" 612 fi 613 fi 614 615 # =================================================================== 616 # Set OS name to the discovered Linux version 617 if [ ! "${LINUX_VERSION}" = "" -a "${OS_NAME}" = "Linux" ]; then 618 OS_NAME="${LINUX_VERSION}" 619 fi 620 # If Linux version (full name) is unknown, use uname value 621 if [ "${OS_FULLNAME}" = "" ]; then OS_FULLNAME=$(uname -s -r); fi 622 SYSCTL_READKEY="sysctl -n" 623 ;; 624 625 # NetBSD 626 NetBSD) 627 OS="NetBSD" 628 OS_NAME="NetBSD" 629 OS_FULLNAME=$(uname -s -r) 630 OS_KERNELVERSION=$(uname -v) 631 OS_VERSION=$(uname -r) 632 HARDWARE=$(uname -m) 633 FIND_BINARIES="whereis" 634 SYSCTL_READKEY="" 635 ;; 636 637 # OpenBSD 638 OpenBSD) 639 OS="OpenBSD" 640 OS_NAME="OpenBSD" 641 OS_FULLNAME=$(uname -s -r) 642 OS_KERNELVERSION=$(uname -v) 643 OS_VERSION=$(uname -r) 644 HARDWARE=$(uname -m) 645 FIND_BINARIES="whereis" 646 SYSCTL_READKEY="" 647 ;; 648 649 # Solaris / OpenSolaris / Ilumos ... 650 SunOS) 651 OS="Solaris" 652 OS_KERNELVERSION=$(uname -v) 653 OPENSOLARIS=0 654 655 if [ -f /etc/os-release ]; then 656 OS_ID=$(grep "^ID=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 657 OS_VERSION=$(grep "^VERSION=" /etc/os-release | awk -F= '{print $2}' | tr -d '"') 658 OS_FULLNAME=$(awk -F= '/^PRETTY_NAME=/ {print substr($2,2,length($2)-2)}' /etc/os-release) 659 case "${OS_ID}" in 660 "solaris") 661 OS_NAME="Oracle Solaris" 662 ;; 663 "omnios") 664 OS_NAME="OmniOS" 665 OPENSOLARIS=1 666 ;; 667 "tribblix") 668 OS_NAME="Tribblix" 669 OS_FULLNAME="Tribblix ${OS_VERSION}" 670 OPENSOLARIS=1 671 ;; 672 "*") 673 ReportException "OS Detection" "Unknown OS found in /etc/os-release - Please create issue on GitHub project page: ${PROGRAM_SOURCE}" 674 ;; 675 esac 676 elif [ "$(uname -o 2> /dev/null)" == "illumos" ]; then 677 OPENSOLARIS=1 678 679 # Solaris has a free form text file with release information 680 if grep "OpenIndiana" /etc/release > /dev/null; then 681 OS_NAME="OpenIndiana" 682 if grep "Hipster" /etc/release > /dev/null; then 683 OS_VERSION="$(tr ' ' '\n' < /etc/release | grep '[[:digit:]]\.[[:digit:]]')" 684 OS_FULLNAME="OpenIndiana Hipster $OS_VERSION" 685 else 686 OS_VERSION="Unknown" 687 OS_FULLNAME="OpenIndiana (unknown edition)" 688 fi 689 elif grep "OmniOS" /etc/release > /dev/null; then 690 OS_NAME="OmniOS" 691 OS_VERSION="$(tr ' ' '\n' < /etc/release | grep 'r[[:digit:]]')" 692 if grep "Community Edition" /etc/release > /dev/null; then 693 OS_FULLNAME="OmniOS Community Edition v11 $OS_VERSION" 694 fi 695 elif grep "SmartOS" /etc/release > /dev/null; then 696 OS_NAME="SmartOS" 697 OS_VERSION="-" 698 OS_FULLNAME="SmartOS" 699 else 700 OS_NAME="Unknown Illumos" 701 fi 702 elif grep "SchilliX" /etc/release > /dev/null; then 703 OS_NAME="SchilliX" 704 OS_FULLNAME="$(head -n 1 /etc/release | xargs)" 705 OS_VERSION="$(echo "$OS_FULLNAME" | cut -d '-' -f 2)" 706 707 OPENSOLARIS=1 708 elif head -n 1 < /etc/release | grep "Oracle Solaris" > /dev/null; then 709 OS_NAME="Oracle Solaris" 710 OS_FULLNAME="$(head -n 1 /etc/release | xargs)" 711 OS_VERSION="$(head -n 1 < /etc/release | xargs | cut -d ' ' -f 3)" 712 elif head -n 1 < /etc/release | xargs | grep "^Solaris " > /dev/null; then 713 OS_NAME="Sun Solaris" 714 # Example of /etc/release: 715 # Solaris 10 5/08 716 # ... 717 # Solaris 10 10/09 (Update 8) 718 # The first line does not contain the "Update" number, 719 # only if present. 720 if tail -1 < /etc/release | xargs | grep "^Solaris " > /dev/null; then 721 OS_FULLNAME=$(tail -1 < /etc/release | xargs) 722 else 723 OS_FULLNAME=$(head -1 < /etc/release | xargs) 724 fi 725 OS_VERSION=$(echo "$OS_FULLNAME" | cut -d ' ' -f 2,3) 726 else # Old behaviour 727 OS_NAME="Sun Solaris" 728 OS_FULLNAME=$(uname -s -r) 729 OS_VERSION=$(uname -r) 730 fi 731 732 HARDWARE=$(uname -m) 733 if [ -x /usr/bin/isainfo ]; then 734 # Returns 32, 64 735 OS_MODE=$(/usr/bin/isainfo -b) 736 fi 737 SYSCTL_READKEY="" 738 ;; 739 740 # VMware products 741 VMkernel) 742 OS="VMware" 743 OS_FULLNAME="" 744 OS_VERSION="" 745 HARDWARE=$(uname -m) 746 if [ -e "/etc/vmware-release" ]; then 747 OS_FULLNAME=$(cat /etc/vmware-release) 748 OS_VERSION=$(uname -r) 749 fi 750 HAS_VMWARE_UTIL=$(which vmware 2> /dev/null | grep -v "no [^ ]* in ") 751 if [ ! "${HAS_VMWARE_UTIL}" = "" ]; then 752 IS_VMWARE_ESXI=$(vmware -vl | grep VMware ESXi) 753 if [ ! "${IS_VMWARE_ESXI}" = "" ]; then 754 OS_NAME="VMware ESXi" 755 OS_FULLNAME="VMware ESXi ${OS_VERSION}" 756 fi 757 fi 758 ;; 759 760 761 # Unknown or unsupported systems 762 *) 763 echo "[ ${WARNING}WARNING${NORMAL} ]" 764 echo "${WARNING}Error${NORMAL}: ${WHITE}Unknown OS found. No support available yet for this OS or platform...${NORMAL}" 765 echo "Please consult the README/documentation for more information." 766 exit 1 767 ;; 768 769 esac 770 771 # Set correct echo binary and parameters after detecting operating system 772 ECHONB="" 773 774 case ${OS} in 775 "AIX") ECHOCMD="echo"; ECHONB="printf" ;; 776 "DragonFly"|"FreeBSD"|"NetBSD") ECHOCMD="echo -e"; ECHONB="echo -n" ;; 777 "macOS" | "Mac OS X") ECHOCMD="echo"; ECHONB="/bin/echo -n" ;; 778 "Solaris") ECHOCMD="echo" ; test -f /usr/ucb/echo && ECHONB="/usr/ucb/echo -n" ;; 779 "Linux") 780 # Check if dash is used (Debian/Ubuntu) 781 DEFAULT_SHELL=$(ls -l /bin/sh | awk -F'>' '{print $2}') 782 case ${DEFAULT_SHELL} in 783 " dash") ECHOCMD="/bin/echo -e" ;; 784 *) ECHOCMD="echo -e" ;; 785 esac 786 ;; 787 *) ECHOCMD="echo -e" ;; 788 esac 789 790 # Check if we have full featured commands, or are using BusyBox as a shell 791 if [ -x /bin/busybox ]; then 792 if [ -L /bin/ps ]; then 793 ShowSymlinkPath /bin/ps 794 if [ "${SYMLINK}" = "/bin/busybox" ]; then 795 SHELL_IS_BUSYBOX=1 796 fi 797 fi 798 fi 799 800 # Specific checks for hardware 801 802 # Detect if we are using a QNAP NAS 803 if [ -d /share/CACHEDEV1_DATA/.qpkg ]; then 804 QNAP_DEVICE=1 805 fi 806 807 # Check if this OS is end-of-life 808 EOL=255 809 EOL_DATE="" 810 EOL_TIMESTAMP=0 811 if [ -n "${OS_VERSION}" ]; then 812 if [ -f "${DBDIR}/software-eol.db" ]; then 813 FIND="${OS_FULLNAME}" 814 EOL_TIMESTAMP=$(awk -v value="${FIND}" -F: '{if ($1=="os" && value ~ $2){print $4}}' ${DBDIR}/software-eol.db | head -n 1) 815 if [ -n "${EOL_TIMESTAMP}" ]; then 816 EOL_DATE=$(awk -v value="${FIND}" -F: '{if ($1=="os" && value ~ $2){print $3}}' ${DBDIR}/software-eol.db | head -n 1) 817 if [ -n "${EOL_DATE}" ]; then 818 NOW=$(date "+%s") 819 if [ -n "${NOW}" ]; then 820 if [ ${NOW} -gt ${EOL_TIMESTAMP} ]; then 821 EOL=1 822 else 823 EOL=0 824 fi 825 fi 826 else 827 EOL=0 828 fi 829 fi 830 fi 831 fi 832 833 834#================================================================================ 835# Lynis - Security Auditing and System Hardening for Linux and UNIX - https://cisofy.com 836