Linux:為遠端系統管理員設置
我時不時地收到奇怪的請求,要求在 Linux 系統上提供遠端支持、故障排除和/或性能調整。
較大的公司通常已經有完善的程序來為供應商/供應商提供遠端訪問,我只需要遵守這些程序。(不論結果好壞。)
另一方面,小公司和個人總是求助於我,指導他們如何設置我。通常他們的伺服器直接連接到網際網路,現有的安全措施包括他們的 Linux 發行版的預設值。
我幾乎總是需要 root 級別的訪問權限,而為我設置訪問權限的人並不是專業的系統管理員。我不想要他們的 root 密碼,而且我也很確定我的行為不會是惡意的,但是我應該給出什麼合理簡單的指示:
- 設置帳戶並安全地交換憑據
- 設置 root (sudo) 訪問權限
- 限制訪問我的帳戶
- 提供審計線索
(是的,我知道並總是警告那些客戶,一旦我擁有管理員訪問權限,隱藏任何惡意行為都是微不足道的,但讓我們假設我沒有什麼可隱藏的,並積極參與創建審計跟踪。)
以下步驟可以改進什麼?
我目前的指令集:
設置帳戶並安全地交換憑據
我提供了一個密碼雜湊並要求我的帳戶設置了該加密密碼,因此我們不需要傳輸明文密碼,我將是唯一知道密碼的人,我們不會從可預測的弱密碼。
sudo useradd -p '$1$********' hbruijn
我提供了一個公鑰 SSH(每個客戶端的特定密鑰對)並要求他們使用該密鑰設置我的帳戶:
sudo su - hbruijn mkdir -p ~/.ssh chmod 0700 ~/.ssh echo 'from="10.80.0.0/14,192.168.1.2" ssh-rsa AAAAB3NzaC1y***...***== hbruijn@serverfault' >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys
設置 root (sudo) 訪問權限
sudo sudoedit
我要求客戶使用或使用他們最喜歡的編輯器為我設置 sudo 並附加到/etc/sudoers
:hbruijn ALL=(ALL) ALL
限制訪問我的帳戶
通常客戶端仍然允許基於密碼的登錄,我要求他們添加以下兩行,
/etc/ssh/sshd_config
以至少將我的帳戶限制為僅限 SSH 密鑰:Match user hbruijn PasswordAuthentication no
根據客戶端,我將通過單個堡壘主機路由所有 SSH 訪問,以始終提供單個靜態 IP 地址(例如 192.168.1.2)和/或提供我的 ISP 使用的 IP 地址範圍(例如 10.80. 0.0/14)。如果 SSH 訪問受到限制,客戶端可能需要將它們添加到防火牆白名單中(儘管 ssh 通常是未過濾的)。
您已經將這些 ip 地址視為文件中的
from=
限制,~.ssh/authorized_keys
它限制了可以使用我的密鑰訪問其係統的主機。提供審計線索
到目前為止,沒有客戶要求我這樣做,除了以下內容之外,我還沒有做任何具體的事情來掩蓋我的屁股:
我嘗試始終使用
sudo
單個命令並嘗試防止使用sudo -i
orsudo su -
。我盡量不使用sudo vim /path/to/file
,而是使用sudoedit
。預設情況下,所有特權操作都將記錄到 syslog(和
/var/log/secure
):Sep 26 11:00:03 hostname sudo: hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=jboss ; COMMAND=sudoedit /usr/share/jbossas/domain/configuration/domain.xml Sep 26 11:00:34 hostname sudo: hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/messages
我基本上放棄了自定義我的工作環境,我唯一真正做的就是在
~/.bash_profile
增加 bash 歷史記錄中設置以下內容並包含時間戳:export HISTSIZE=99999999999 export HISTFILESIZE=99999999999 export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg" export HISTTIMEFORMAT='%F %H:%M:%S ' shopt -s histappend
唯一想到的就是添加
--expiredate
到adduser
通話中。這樣,客戶就知道您的訪問權限將在固定日期自動過期。
他仍然需要信任您,因為您具有 root 訪問權限並且仍然可以刪除過期標誌。
您可以使用script(1)實用程序記錄您的會話。
$ script session.log Script started, file is session.log $ ls file1 session.log exit Script done, file is session.log
然後一切都在 session.log 中。