Sử dụng nhị phân bao bọc
Đối với trường hợp sử dụng cụ thể này (xem ghi chú quan trọng bên dưới), một khả năng là tạo một người dùng (giả sử support-ssh
) cụ thể cho các kết nối SSH gửi đi này, sau đó cài đặt một nhị phân bao bọc nhỏ thực thi /usr/bin/ssh
.
- Đừng sao chép + chmod
ssh
chính nhị phân, vì bạn sẽ không nhớ sao chép lại mỗi khi bạn áp dụng các cập nhật bảo mật.
- Và đừng sử dụng
root
như người dùng đặc quyền hơn, vì những lý do tôi tin tưởng là hiển nhiên.
Đây là một giải pháp thay thế tương đương về chức năng để sử dụng sudo
để nâng cao các đặc quyền của support-ssh
tài khoản với sự đánh đổi sau:
- Điều này nhỏ hơn và gọn hơn
sudo
, do đó, ít có nguy cơ lỗi cấu hình mở ra nhiều hơn bạn dự định.
- Bạn có trách nhiệm mã hóa nó một cách chính xác - chỉ làm điều này nếu bạn cực kỳ cẩn thận và (lý tưởng) có kinh nghiệm về mã hóa bảo mật quan trọng.
- Nó có thể được điều chỉnh để cụ thể hơn
sudo
(nhưng bạn viết càng nhiều mã, bạn càng cần phải kiểm toán để bảo mật).
Nhị phân của trình bao bọc nên được đặt HOME
vào thư mục chính của support-ssh
người dùng, do đó ssh
sẽ chọn ssh_config
khóa riêng và khóa thích hợp . Nhưng người dùng yêu cầu không được phép đọc ~support-ssh/.ssh/
hoặc nội dung của nó.
Trình bao bọc có thể đơn giản như:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv)
{
setenv("HOME", "/home/support-ssh", 1);
/* allow only a single, non-option argument */
if (argc!=2 || *argv[1]=='-') {
fprintf(stderr, "Usage: %s <hostname>", argv[0]);
exit(EXIT_FAILURE);
}
execv("/usr/bin/ssh", argv);
return EXIT_FAILURE;
}
Bạn có thể muốn hạn chế hơn và kiểm tra xem đối số argv[1]
có nằm trong một tập hợp các tên máy chủ được phép không. Hoặc ít hạn chế hơn và cho phép (một tập hợp con) đối số tùy chọn. Bạn có thể muốn thay thế hoàn toàn các biến môi trường (nhưng giữ những người quan trọng như TERM
, LC_*
, vv); lưu ý rằng LD_LIBRARY_PATH
và LD_PRELOAD
đặc biệt nguy hiểm.
Một chương trình bao bọc tương tự có thể được cung cấp scp
nếu cần.
Một lưu ý về khả năng ứng dụng
Câu trả lời này giải quyết các trường hợp cụ thể của câu hỏi, trong đó người dùng có nghĩa vụ theo hợp đồng phải tuân theo các thủ tục và có các biện pháp trừng phạt (ví dụ như sa thải) vì vi phạm chúng. Nó cho rằng bạn muốn ngăn chặn các nhân viên tình cờ sao chép các khóa riêng tư xung quanh, thay vì ngăn chặn một kẻ tấn công xác định có được quyền truy cập trái phép.
Tôi cho rằng an ninh đạt được thông qua cả phòng thủ kỹ thuật và phi kỹ thuật, và sự cân bằng đạt được ở đây hoặc bằng cách sử dụng sudo
là phù hợp với tình huống được đưa ra.