如何理解 Linux 伺服器的角色?
我的任務是創建一個 Excel 表,其中包括我們的一個 AWS EC2 環境中的所有 Linux 伺服器,因為主要目標是讓所有伺服器脫離 AWS 並將它們遷移到我們的虛擬環境。這些是感興趣的行標題:伺服器名稱、角色、CPU、記憶體、磁碟、應用程序組件及其版本。
我提取伺服器名稱和伺服器規範沒有問題,但是找到什麼是伺服器角色的最佳方法是什麼?我有一些想法,但我很想听聽你的……這是我的:
- 執行
rpm -qa --queryformat "%{NAME}\n"
以將所有包名稱提取到一個列表中,這可以幫助我了解伺服器的功能。- 執行
chkconfig --list |grep on
以查看啟用了哪些守護程序。- 執行
top
以查看正在執行的程序。
您可以做一些事情來嘗試確定係統上正在執行的內容。雖然不能保證,但很可能任何正在執行的生產服務都可以通過本地子網或通過 NAT 訪問網路。考慮到這一點,您可以檢查伺服器正在偵聽的埠,以了解那裡有什麼。一個好的命令是:
alex:~/ $ sudo netstat -tulpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 945/smbd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1746/nginx tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1437/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1310/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3746/cupsd
從上面的範例輸出中可以看出,它向您顯示了協議版本(tcp 或 udp)、正在偵聽的地址、打開的埠和正在偵聽的程序。
在上面截斷的範例(台式機)中,您可以看到 tcp 埠 139、80、53、22 和 631 正在偵聽。這些分別解析為 samba、http、dns、ssh 和 ipp,並在您檢查正在偵聽該埠的程序時得到確認。
此外,大多數基於 Debian 和 Red Hat 的 Linux 發行版都使用 system V 並提供 services 命令。您可以使用它來提供服務列表及其狀態:
alex:~/ $ sudo service --status-all [ + ] acpid [ - ] anacron [ + ] apparmor [ ? ] apport [ ? ] atieventsd [ + ] avahi-daemon [ ? ] binfmt-support [ + ] bluetooth [ - ] brltty [ ? ] console-setup [ + ] cron [ ? ] cryptdisks [ ? ] cryptdisks-early [ + ] cups [ + ] cups-browsed [ - ] dbus [ ? ] dns-clean [ + ] dnsmasq [ + ] ebtables [ + ] friendly-recovery [ - ] grub-common [ ? ] irqbalance [ + ] kerneloops [ ? ] killprocs [ ? ] kmod [ + ] libvirt-bin [ ? ] lightdm [ ? ] networking [ + ] nginx [ + ] nmbd [ ? ] ondemand [ + ] openvpn [ ? ] pppd-dns [ - ] procps [ - ] pulseaudio [ ? ] rc.local [ + ] resolvconf [ - ] rsync [ + ] rsyslog [ + ] samba [ - ] samba-ad-dc [ + ] saned [ ? ] sendsigs [ - ] smartmontools [ + ] smbd [ ? ] speech-dispatcher [ - ] ssh [ - ] sudo [ + ] udev [ ? ] umountfs [ ? ] umountnfs.sh [ ? ] umountroot [ - ] unattended-upgrades [ - ] urandom [ ? ] vboxautostart-service [ + ] vboxballoonctrl-service [ + ] vboxdrv [ + ] vboxweb-service [ + ] winbind [ - ] x11-common
這為您提供了 system v 服務的概述——如果您有手動啟動的自定義應用程序或有自定義啟動腳本,它們可能不在這裡,但這仍然很有用。A + 表示正在執行的服務,a - 表示已停止的服務,而 ? 意味著未知。請務必以提升的使用者身份執行上述兩個命令,否則您的結果將不完整。
上述命令將讓您深入了解伺服器上正在執行的內容,而不是它的配置方式或用途。開放埠 80 表示 Web 伺服器,但這可能意味著面向公眾、內部呈現的 API、意外安裝的 httpd 以及任何此類配置。理想情況下,您需要與架構師討論以更好地了解每台伺服器的用途。