GUIまたはコマンドラインを使用してログインしたすべてのユーザーのリスト


4

特定のユーザーが1日にログインした時間の合計を計算する必要があります。そして、システムをシャットダウンすることによって許可された時間を超えてユーザーがコンピューターの使用を停止する。

uptime これはマルチユーザーコンピュータなので使用できません

lastこれは、端末を実行しているユーザーのデータのみが格納されているためです。ユーザーがGUIを使用してログインし、端末を実行せずにコンピューターを使用し続ける場合、エントリーは/ var / log / wtmpに書き込まれません

必要な情報を見つける方法はありますか?Ubuntu 12.04 LTSを使用しています


どのくらいの期間あなたが許可したいですか?分?時間?
テルドン

1
あなたはそれがあれば、コンピュータをシャットダウンします他のユーザーのために悪いことはないだろう、これはマルチユーザのコンピュータであると言う任意の他のユーザーが自分の毎日の限界を超えましたか?
mpy

1
@ mpy-OK 'マルチユーザ'は、メインフレームなどに関連した純粋な技術的意味で解釈されるべきではありません。これは、ペアレンタルコントロールなどのためのものです。計画は、ユーザー名をチェックし、誰かがコンピュータにあまりにも多くの時間を費やす場合はシャットダウンすることです:)
Niroshan

@terdon今から1時間言ってみよう
Niroshan

1
Unixのプロセスアカウンティングをチェックしてください。acコマンドは、ユーザーと1日あたりのログイン期間を表示できます。OS Xでは、今日の出力は私にとって次のようになります。May 30 total 21.56
Daniel Beck

回答:


4

who/var/run/utmpユーザーがXを介してログインしている場合でも、(using )は機能するはずです。

その後、/etc/crontab 毎分このスクリプトを実行できます。それは何をしますか:

  • $u現在ログインしているすべてのユーザーをループします。
  • で番号をインクリメント/var/log/accounting-$u-これは毎分、ファイルを格納するユーザーは合計時間行われているように$u、これまでに記録されています。
  • $u限界($allowedtime)、ここでは60分に達したかどうかを確認してください。その場合は、システムをシャットダウンするなどしてください。5分前には警告を送るだけです(@terdonの好意による)。
  • $u最後の24時間ユーザーが見られなかった場合は、最後に削除/var/log/accounting-$uしてください。ゲームを最初から開始できます。

私がコメントで述べたように、私はシステムをシャットダウンすることはそれほど良い考えではないと思います。特にこのスクリプトでは、24時間が経過していない間にユーザーが再度ログインすると、1分も経たないうちに(cronがaccounting.sh次回起動したときに)シャットダウンアクションがトリガーされるためです。


accounting.sh

#!/bin/bash

accountinglogprefix=/var/log/accounting-
allowedtime=60

for u in $(who | cut -d " " -f 1 | sort | uniq); do

  if [[ -e ${accountinglogprefix}${u} ]]; then
    consumed=$(cat ${accountinglogprefix}${u})
  else
    consumed=0
  fi
  echo -n $(( consumed + 1 )) > ${accountinglogprefix}${u}

  if [[ $consumed -gt $allowedtime ]]; then 
    # time is over, do whatever you want
    echo "Shutting down..."
  elif [[ $consumed -gt $(( allowedtime - 5 )) ]]; then
    # notify the user $u that his time is over in 5 minutes with a suitable command
    echo "Time's up! Shutting down in 5 minutes..."
  fi

  # check if e.g. 24h have passed since the user was last seen
  if [[ $(( $(date +%s ) - $(stat -c %Y ${accountinglogprefix}${u}) )) -gt $(( 24 * 3600 )) ]]; then
    rm ${accountinglogprefix}${u}
  fi

done

注:これは完全に成熟したスクリプトではありません(つまりコピー&ペーストの準備ができている) - それは異なるアプローチを示すべきです。


3

カスタムスクリプトを書くのではなく、利用可能で、それ以上のことをするように設計されたソフトウェアを使用することができます。

psacctインストール可能かどうかを確認してください。

http://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.htmlから

psacctパッケージには、ac、lastcomm、accton、saなど、プロセスのアクティビティを監視するためのユーティリティがいくつか含まれています。

The ac command displays statistics about how long users have been logged on.
The lastcomm command displays information about previous executed commands.
The accton command turns process accounting on or off.
The sa command summarizes information about previously executed commmands.

発明されていない車輪の場合は+1。Ubuntuのインストールはsudo apt-get install acct(and sudo service acct start)です。
LSerni

1

次のものの出力を解析することもできますps

$ ps -U terdon -u terdon -o %t 
  ELAPSED
  00:39
  00:06

この例では、ユーザーterdonは2つのプロセスを実行しており、最も古いプロセスが39秒間実行されています。そのため、これを解析して最も長い実行プロセス(おそらくユーザーのログインシェル)を取得すると、ユーザーがログインしてからの経過時間を知ることができます。この例では、少なくとも1時間は許可します(これはなぜ私NF>=3gawkコマンドで使用しますが、4以下:

ps -U terdon -u terdon -o %t | grep : | sed 's/ *//g' | 
   gawk -F"[ +:]" 'NF>=3{print $1}' | sort -g | tail -n 1

このコマンドは、ユーザーterdonの最長実行コマンドの経過時間を印刷します。これが4より多いか少ないかを確認できます。

limit=4;
time=$(ps -U terdon -u terdon -o %t |  grep : | sed 's/ *//g' | 
        gawk -F"[ +:]" 'NF>=3{print $1}' | sort -g | tail -n 1);
 if [[ $time -gt 3 ]]; 
 then echo "Time's up! Shutting down in 5 minutes...";
      shutdown -h +5
fi

しかし、 "Time's up"メッセージが表示されたら、ログアウトしてすぐに再度ログインすることで、これを簡単に "ハッキング"することができますか。
mpy

まあ、はい、それは不正直でしょう!
テルドン

定期的にファイルに記録されている時間、または次回のログイン時にユーザーがログアウトしてそのファイルを読み取っている時間を記録する方法について
Niroshan

はい、下記の@ mpyの答えをご覧ください。
terdon

0

あなたはあなたの安全なログを監査することができます。それはにあります:

/ var / log / secure

それはあなたにログインとログアウトを与えます。また、あなたはlogwatchを実行することができます、そしてそれはあなたがそれをあなたがそれを実行している期間ログインした人をあなたに与えるでしょう。

これもいくつかのより多くの情報です:

1.システムで成功したすべてのログインを取得します

cat / var / log / secure * | 承認> logins.txt

今logins.txtはあなたにRedhat Linuxシステムへのすべての成功したログインが含まれます。ファイルを調べて、最初にマニュアルを参照してください。

2.特定の時間にユーザーを確認する

我々が持っているperticularユーザーの最後のログイン情報を見つけるために他のコマンドの最後、lastbのユーザーが最後に記録されたのリストを示しているコマンドを。

最後のプログラムは、最新のユーザーログイン回数の詳細レポートを出力します。これは、/ var / log / wtmpファイルをスキャンすることによって行います。

出力には以下の詳細が含まれます。

Username
Tty device number
Login date and time
Logout time
Total working time

次のように特定の時間にログインを検索するオプションもあります。last -t YYYYMMDDHHMMSS - 指定された時間におけるログインの状態を表示します。

これで使用されるファイルは次のとおりです。/ etc / utmp - これはすべてのアクティブな端末行のレコードを含むバイナリファイルです。/ var / adm / wtmp - ログインとログアウトの両方を追跡します。


/ var / log /に「安全な」ファイルやフォルダはありません。それはログウォッチの一部ですか?
Niroshan

最後のコマンドは私のために働いていない - 私は質問の中で私のシナリオを説明した
Niroshan

おそらくそれをインストールする必要があるでしょう:sudo apt-get last *これがUbuntuのmanページです:manpages.ubuntu.com/manpages/hardy/man1/last.1.html
J Baron

安全なデータは、system.log、messages、または場合によってはauth.logにあります。すみません、私はFedoraを動かします、そしてそれはわずかに異なります。
J男爵

Ubuntuログファイルの詳細:help.ubuntu.com/community/LinuxLogFiles
J男爵
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.