Mặc dù câu hỏi này được hỏi bởi một cá nhân muốn ghi lại các phiên của riêng mình, trường hợp sử dụng thay thế có thể là quản trị viên hệ thống muốn theo dõi những gì người dùng đang làm.
Tôi sợ chạy script
bên trong toàn hệ thống bashrc
có thể không phù hợp trong trường hợp khi người dùng máy không muốn có các bản ghi được tạo từ các phiên của họ.
Người dùng muốn ẩn danh có thể bỏ qua việc đăng nhập bằng cách yêu cầu sshd mở một trình bao khác (ví dụ zsh
) hoặc chạy bash --rcfile ___
để ngăn /etc/bash.bashrc
không cho tải.
Một cách tiếp cận khác
Hướng dẫn này từ năm 2008 ( được lưu trữ ) sử dụng một phương pháp khác để bắt buộc script
phải chạy khi người dùng đăng nhập bằng ssh, yêu cầu người dùng đăng nhập bằng khóa chung / riêng.
Điều này được thực hiện bằng cách thêm tập lệnh vào .ssh/authorized_keys
tệp của người dùng , trước phím:
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
Tập lệnh log-session
( được lưu trữ ) sau đó quyết định có chạy hay không /usr/bin/script
để ghi nhật ký phiên của người dùng này.
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
Để ngăn người dùng xóa lệnh đã thêm, quản trị viên sẽ cần có quyền sở hữu authorized_keys
tệp của người dùng .
chown root:root ~user/.ssh/authorized_keys
Thật không may, điều này có nghĩa là người dùng sẽ không thể thêm bất kỳ khóa bổ sung nào, hoặc quan trọng hơn là thu hồi khóa hiện tại nếu nó bị xâm phạm, điều này không còn lý tưởng.
Hãy cẩn thận
Cấu hình mặc định của sshd là phổ biến để cho phép người dùng thực hiện SFTP qua đăng nhập ssh của họ. Điều này cung cấp một cách để người dùng chỉnh sửa các tập tin mà không cần thay đổi. Nếu quản trị viên không muốn người dùng có thể làm điều đó, thì anh ta nên kích hoạt một số ghi nhật ký cho SFTP hoặc vô hiệu hóa dịch vụ. Mặc dù sau đó, người dùng vẫn có thể thực hiện các thay đổi chưa thấy đối với các tệp bằng cách chạy một cái gì đó như thế này trong thiết bị đầu cuối của họ:
curl "http://users.own.server/server/new_data" > existing_file
Có thể theo dõi các thay đổi như vậy bằng cách sử dụng hệ thống tệp sao chép khi ghi, ghi lại tất cả lịch sử tệp.
Nhưng một mẹo tương tự sẽ cho phép người dùng thực thi các lệnh mà không cần ghi nhật ký:
curl "http://users.own.server/server/secret_commands_824" | sh
Tôi không biết bất kỳ giải pháp dễ dàng cho điều đó. Khả năng có thể là:
- Ghi nhật ký tất cả dữ liệu mạng (và gỡ rối nó sau).
- Ghi nhật ký tất cả các cuộc gọi hệ thống.
Loại điều này có thể có thể với audd .
Nhưng dù sao...
Không chắc là các phiên người dùng đăng nhập cung cấp bất kỳ bảo mật thực sự cho quản trị viên. Theo mặc định, người dùng chỉ có thể thao tác các tệp của riêng họ và không thể làm hại hệ thống. Nếu người dùng độc hại đã quản lý để leo thang đặc quyền, thì anh ta có thể vô hiệu hóa ghi nhật ký và xóa nhật ký (trừ khi quản trị viên đã định cấu hình nhật ký được lưu trữ trên một máy riêng biệt, theo kiểu chỉ có phụ lục).
Quản trị viên tự động đăng nhập phiên người dùng có thể nên thông báo cho người dùng rằng việc này đang được thực hiện . Trong một số khu vực pháp lý, hình thức thu thập dữ liệu này có thể vi phạm luật dữ liệu hoặc quyền riêng tư . Và ít nhất, sẽ rất tôn trọng người dùng để họ biết.
Nhiều khả năng là một quản trị viên sẽ quan tâm đến việc đăng nhập các phiên của sudo
người dùng. Điều đó có lẽ có thể được giải quyết trong một câu trả lời khác, hoặc thực sự là một câu hỏi khác.
exec
khi bắt đầu dòng. nó sẽ bắt đầuscript -f
trong cùng một lớp vỏ PID.