Tôi có một modem di động được kết nối với máy chủ của mình mà tôi muốn sử dụng làm phương tiện để nhận email thông báo khi điện thoại cố định chết.
Để tách riêng quyền truy cập mạng bình thường và quyền truy cập modem di động đặc biệt này, tôi đã tạo một không gian tên mạng và tạo thiết bị mạng trong đó làm thiết bị duy nhất. Để có một chương trình sử dụng modem di động, tôi chỉ cần sử dụng ip netns exec
.
Điều khó chịu là tôi muốn cho phép bất kỳ người dùng nào chạy bất kỳ chương trình nào họ muốn trong không gian tên, nhưng netns exec
yêu cầu root. Giải pháp của tôi là như sau:
/ usr / local / sbin / _oob_shim:
#!/bin/sh
cmd_line="$@"
/bin/ip netns exec oob \
/usr/bin/sudo -u "#$SUDO_UID" -g "#$SUDO_GID" /bin/sh -c "$cmd_line"
/ etc / sudoers:
ALL ALL=NOPASSWD: /usr/local/sbin/_oob_shim
Tôi nghĩ cách duy nhất để chạy shim mà không cần root hoặc biết mật khẩu gốc là thông qua sudo và tôi có thể tin tưởng sudo để đặt $ SUDO_UID và $ SUDO_GID đúng giá trị.
Tôi có tự mở ra rủi ro đáng kể không? Hoặc, tôi có nên nói là tôi thiếu bất kỳ cảnh báo rõ ràng nào không?
sudo /usr/local/sbin/_oob_shim -u root cat /etc/shadow
đó là một lỗ hổng trong phiên bản được đề xuất của bạn. Mặc dù bạn hoàn toàn đúng về việc trích dẫn, tôi sẽ bắt đầusudo -u "#$SUDO_UID" -g "#$SUDO_GID" -- "$@"
và tiếp tục tìm kiếm các lỗ hổng bảo mật.