2010-05-05 93 views
2

我想知道如何登錄用戶的登錄和註銷:這將是衡量某人在一個月內連接了多少時間的一種手段。linux用戶登錄/登出日誌限制計算機

我知道可以使用命令「last」。但是這個命令是基於一個對用戶具有r/w權限的文件,因此可以更改這些數據。 我想在兩個月內記錄這些數據。

爲什麼我會喜歡那樣做?事實上,我想阻止普通用戶每天使用計算機(主要以圖形模式)每天超過一個小時 - 除週末外,每週總計10小時。

塞德里克

(系統使用:Kubuntu的,/編程語言:bash腳本)

+0

屬於serverfault? – Hasturkun 2010-05-05 16:52:57

+0

不,超級用戶。順便說一句,'/ var/log/wtmp'可以由root和utmp的成員寫入。它不應該由普通用戶寫入。 – 2010-05-05 20:04:11

回答

0

你要找不太什麼,但this article顯示瞭如何從只能夠在登錄限制用戶指定的時間。

+0

感謝您的回答/評論。我將進一步研究linux PAM,如果我在那裏找不到信息,我將更關注'last',因爲/ var/log/wtmp不應該被普通用戶寫入。 最後但並非最不重要的一點,我會記住我將在未來發布我的問題的網站。 – Cedric 2010-05-06 08:44:39

1

這是一個Perl腳本,其中彙總了由last打印的內容。它基於書籍Running Linux中的一個示例,爲便於閱讀而進行了清理,並在現代機器上進行了修正(輸出的格式爲last's似乎在原文寫入後發生了變化)。將代碼保存到文件中,然後通過將last的輸出傳遞給它來運行它。

#!/usr/bin/perl 

# logintime.pl - Summarise amount of time a user is logged in. 
# Usage: last | perl logintime.pl 

use strict; 
use warnings; 

my %hours; 
my %minutes; 
my %logins; 

# While we have input... 
while (<>) { 

    # Extract the username and login time... 
    if (my ($username, $hrs, $mins) = /^(\S+).*\((\d+):(\d+)\)/) { 
    # Increment total hours, minutes, and logins 
    $hours{$username} += $hrs; 
    $minutes{$username} += $mins; 
    $logins{$username}++; 
    } 
} 

# For each unique user... 
foreach my $user (sort keys %hours) { 
    # Calculate the total hours and minutes... 
    $hours{$user} += int($minutes{$user}/60); 
    $minutes{$user} %= 60; 

    # Print the information for this user... 
    print "User $user, total login time "; 
    printf "%02d:%02d, ", $hours{$user}, $minutes{$user}; 
    print "total logins $logins{$user}.\n"; 
}