Thỉnh thoảng tôi nhận được yêu cầu kỳ lạ để cung cấp hỗ trợ từ xa, khắc phục sự cố và / hoặc điều chỉnh hiệu suất trên các hệ thống Linux.
Các công ty lớn hơn thường đã có các quy trình được thiết lập tốt để cung cấp quyền truy cập từ xa cho các nhà cung cấp / nhà cung cấp và tôi chỉ cần tuân thủ các quy trình đó. (Cho tốt hơn hoặc tồi tệ hơn.)
Mặt khác, các công ty và cá nhân nhỏ luôn quay sang tôi để hướng dẫn họ những gì họ cần làm để thiết lập tôi. Thông thường, các máy chủ của họ được kết nối trực tiếp với internet và các biện pháp bảo mật hiện có bao gồm các mặc định cho bất kỳ phân phối Linux nào của họ.
Gần như luôn luôn tôi sẽ cần quyền truy cập cấp gốc và bất cứ ai sẽ thiết lập quyền truy cập cho tôi không phải là một chuyên gia sysadmin. Tôi không muốn mật khẩu gốc của họ và tôi cũng khá chắc chắn rằng hành động của mình sẽ không độc hại, nhưng tôi nên đưa ra những hướng dẫn đơn giản hợp lý nào:
- thiết lập một tài khoản và trao đổi thông tin an toàn
- thiết lập quyền truy cập root (sudo)
- hạn chế quyền truy cập vào tài khoản của tôi
- cung cấp dấu vết kiểm toán
(Và vâng, tôi biết và luôn cảnh báo những khách hàng đó rằng một khi tôi có quyền truy cập quản trị viên, việc che giấu mọi hành động độc hại là chuyện nhỏ, nhưng hãy giả sử rằng tôi không có gì để che giấu và tích cực tham gia vào việc tạo ra một dấu vết kiểm toán.)
Những gì có thể được cải thiện trong các bước dưới đây?
Bộ hướng dẫn hiện tại của tôi:
thiết lập một tài khoản và trao đổi thông tin an toàn
Tôi cung cấp hàm băm mật khẩu và yêu cầu tài khoản của tôi được thiết lập với mật khẩu được mã hóa đó, vì vậy chúng tôi sẽ không cần truyền mật khẩu văn bản rõ ràng, tôi là người duy nhất biết mật khẩu và chúng tôi không bắt đầu với một mật khẩu yếu có thể dự đoán.
sudo useradd -p '$1$********' hbruijn
Tôi cung cấp SSH khóa công khai (cặp khóa cụ thể cho mỗi khách hàng) và yêu cầu họ thiết lập tài khoản của tôi với khóa đó:
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
thiết lập quyền truy cập root (sudo)
Tôi yêu cầu khách hàng thiết lập sudo cho tôi bằng sudo sudoedit
hoặc sử dụng trình chỉnh sửa yêu thích của họ và nối vào /etc/sudoers
:
hbruijn ALL=(ALL) ALL
hạn chế quyền truy cập vào tài khoản của tôi
Thông thường, khách hàng vẫn cho phép đăng nhập dựa trên mật khẩu và tôi yêu cầu họ thêm hai dòng sau /etc/ssh/sshd_config
để ít nhất giới hạn tài khoản của tôi chỉ với các khóa SSH:
Match user hbruijn
PasswordAuthentication no
Tùy thuộc vào máy khách, tôi sẽ định tuyến tất cả quyền truy cập SSH của mình thông qua một máy chủ pháo đài duy nhất để luôn cung cấp một địa chỉ IP tĩnh duy nhất (ví dụ 192.168.1.2) và / hoặc cung cấp dải địa chỉ IP mà ISP của tôi sử dụng (ví dụ 10.80. 0,0 / 14). Máy khách có thể cần thêm chúng vào danh sách trắng tường lửa nếu quyền truy cập SSH bị hạn chế (thường xuyên hơn không phải là ssh chưa được lọc).
Bạn đã thấy các địa chỉ IP đó là from=
hạn chế trong ~.ssh/authorized_keys
tệp giới hạn các máy chủ mà từ đó khóa của tôi có thể được sử dụng để truy cập hệ thống của chúng.
cung cấp dấu vết kiểm toán
Cho đến bây giờ không có khách hàng nào yêu cầu tôi về điều đó và tôi chưa làm gì cụ thể ngoài những điều sau đây để che mông của mình:
Tôi cố gắng sử dụng nhất quán sudo
với các lệnh riêng lẻ và cố gắng ngăn chặn sử dụng sudo -i
hoặc sudo su -
. Tôi cố gắng không sử dụng sudo vim /path/to/file
mà sử dụng sudoedit
thay thế.
Theo mặc định, tất cả các hành động đặc quyền sau đó sẽ được ghi vào syslog (và /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
Tôi hầu như từ bỏ việc tùy chỉnh môi trường làm việc của mình, điều duy nhất tôi thực sự làm là thiết lập những điều sau trong ~/.bash_profile
lịch sử bash ngày càng tăng của tôi và bao gồm cả dấu thời gian:
export HISTSIZE=99999999999
export HISTFILESIZE=99999999999
export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg"
export HISTTIMEFORMAT='%F %H:%M:%S '
shopt -s histappend
screen
, vì vậy trong trường hợp cực đoan, khách hàng của bạn có thể xem trực tiếp những gì bạn đang làm.