Giết quá trình người dùng khi đăng xuất


7

Tôi có một máy chủ Ubuntu xử lý các phiên X từ xa từ người dùng. Tuy nhiên, tôi không muốn cho phép người dùng chạy bất kỳ loại quy trình nền nào - vì vậy đây là câu hỏi của tôi:

Làm cách nào để ngăn người dùng có bất kỳ quy trình nền nào hoặc có cách đơn giản nào để tiêu diệt các quy trình của người dùng không đăng nhập không?


2
Trừ khi có một cách rõ ràng để xác định các quy trình "nền" (tôi không nghĩ là có), hạn chế đó là không thể thực hiện được.
goldilocks

Điều gì xử lý các phiên từ xa? một người quản lý hiển thị?
Gilles 'SO- ngừng trở nên xấu xa'

Vấn đề thực sự là gì? Quá nhiều quá trình dính xung quanh? Người dùng để lại các tiến trình đang chạy mà ăn hết tài nguyên hệ thống? Bạn có thể giải quyết các vấn đề như vậy với ulimit.
tro

Câu trả lời:


1

Tôi làm một cái gì đó tương tự trên các máy chủ của tôi. Ý chính chung của nó là

1) Thêm vào /etc/pam.d/loginở dưới cùng của các sessionmục:

session optional pam_exec.so quiet /etc/pam_session.sh

2) Sau đó tạo /etc/pam_session.shnhư (và chmod +x):

#!/bin/bash
[[ "$PAM_USER" == "root" ]] && exit 0

SESSION_COUNT="$(w -h "$PAM_USER" | wc -l)"

if (( SESSION_COUNT == 0 )) && [[ "$PAM_TYPE" == "close_session" ]]; then
  pkill -u "$PAM_USER"
fi

Nếu bạn muốn, bạn có thể thêm một cái gì đó như sleep 5; pkill -9 -u "$PAM_USER"sau pkillđể đảm bảo rằng nó thực sự đã chết.

Điều này sẽ chỉ được gọi khi thoát vỏ đăng nhập, vì vậy nó sẽ không ảnh hưởng đến hoạt động hệ thống tự động. Tuy nhiên, nếu bạn muốn an toàn hơn nữa, bạn có thể thêm một kiểm tra cho thứ gì đó như UID lớn hơn 1000.


0

Bạn có thể sử dụng lệnh này để tìm hiểu những gì người dùng đã đăng nhập vào hệ thống và tiêu diệt chúng:

$ who | awk '{ printf ("%s",$1 "\n"); }' | \
        grep -v root | xargs -I {} -t pkill -u $1{}

Nó sẽ cần phải được kiểm soát khi chạy, mặc dù, có lẽ:

$ ps -eaf | egrep -q [g]nome-session || who | \
            awk '{ printf ("%s",$1 "\n"); }' | \
            grep -v root | xargs -I {} -t pkill -u $1{}

Đó là một ý tưởng, nhưng tôi nghĩ nó cần được cải tiến thêm.


Tôi cho rằng bạn sẽ muốn tố các grep -v rootthành awk '! /root/ { ... }hoặc thậm chí chỉ đơn giảnawk '$1 != "root"'
tripleee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.