첫 번째 세션을 제외한 Linux 사용자의 모든 세션을 종료하고 사용자를 하나의 로그인 세션으로 제한하는 방법

첫 번째 세션을 제외한 Linux 사용자의 모든 세션을 종료하고 사용자를 하나의 로그인 세션으로 제한하는 방법

Linux Redhat 6의 첫 번째 프로세스를 제외하고 로그인한 사용자의 모든 프로세스를 종료하는 방법을 알아야 합니다.

예를 들어, AZain사용자가 다른 컴퓨터에서 여러 번 로그인했기 때문에 이 사용자에 대해 첫 번째 프로세스만 허용하고 다른 모든 프로세스를 종료해야 합니다.

who -u
AZain    pts/2        2016-06-23 08:34   .         27191 (localhost)
AZain    pts/4        2016-06-23 09:01   .         28885 (localhost)
root     pts/0        2016-06-23 08:14   .         25962 (10.11.155.23)
AZain    pts/1        2016-06-23 08:34 00:27       27169 (10.11.155.23)
AZain    pts/3        2016-06-23 09:01   .         28867 (10.11.155.14)

편집: 사용자를 위해 라이센스를 소비하는 응용 프로그램이 있으므로 그렇게 하려고 합니다. 따라서 동일한 사용자에 대한 모든 새 세션은 더 많은 라이센스를 소비하게 됩니다. 동일한 사용자에 대한 새로운 로그인을 방지할 수 있다면 좋을 것입니다.

답변1

이것은 고전이다XY 문제- 사용자당 실행되는 라이센스 소프트웨어 인스턴스 수를 제한하려고 하지만 셸 로그인을 제한하는 데 중점을 두고 있습니다. 이것은 해결해야 할 잘못된 문제입니다.

더 나은 해결책은 다음과 같습니다.

  • 프로그램 이름을 바꿉니다(예: 에서 로 /usr/local/bin/foo)/usr/local/bin/foo.real

  • 원래 프로그램과 동일한 이름과 경로(예: /usr/local/bin/foo)를 사용하여 래퍼 스크립트를 작성하여 사용자가 이미 해당 프로그램을 실행 중인지 확인합니다.

    그렇다면 적절한 오류 메시지와 함께 종료하십시오. 그렇지 않은 경우 원래 프로그램( /usr/local/bin/foo.real) 을 실행하십시오.

매우 간단한 예:

#! /bin/sh

if pgrep -u "$USER" foo.real >/dev/null 2>&1 ; then
  echo "You are already running foo" >&2
  exit 1
else
  foo.real
fi

참고: 이는 라이선스 문제를 이해하고 규칙 준수에 신경 쓰지 않는 선량한 사용자에게 적합합니다. 교활한 사용자가 스스로 실행하는 것을 막지는 못할 것입니다 foo.real. 또는 alias foo.real=foo에 추가하면 교활하지만 그다지 똑똑하지 않은 사용자를 막을 수 있습니다 ./etc/profile/etc/bash.bashrc

상위 프로세스로 foo.real호출되는 쉘 스크립트가 없는 실행 인스턴스를 감지하는 루트 크론 작업을 실행할 수 있습니다 . foocron 작업은 그러한 인스턴스를 종료하거나 경고 이메일을 보낼 수 있습니다(스팸을 피하려면 foo.real의 프로세스 ID를 추적하고 동일한 PID에 대해 여러 경고를 메일로 보내지 마십시오).


그런데, 라이선스가 부여된 소프트웨어가 일종의 라이선스 관리자와 함께 제공되는 경우 설명서를 확인하여 사용자당 인스턴스 수를 제한할 수 있는지 확인하세요.

관련 정보