簡體   English   中英

Linux BASH腳本確定登錄的用戶數?

[英]Linux BASH script to determine number of users logged in?

我需要編寫BASH腳本來獲取幫助,該腳本通過獲取系統密碼文件中包含的密碼數量來確定系統的潛在用戶數量。 我試過/ etc / passwd。 總是說“權限被拒絕”。 以及確定當前登錄到系統的用戶數的腳本。此腳本將以無人參與的批處理方式運行,除調用外,無需鍵盤的任何輸入。

謝謝。

TL; DR

您應該使用誰來計數已登錄的用戶,並通過對/ etc / passwd的適當范圍內的UID求和來獲得更完整的普通用戶(相對於系統帳戶)計數。

計數登錄

在Linux上,您可以使用who命令對活動登錄(包括同一用戶的多次登錄)進行計數:

$ who --count
foo bar baz quux
# users=4

您可以按自己喜歡的方式從最后一行中解析出總數。 一些示例包括:

# Using a Perl-compatible grep.
$ who --count | pcregrep -o 'users=\K.*'
4

# Counting unique logins when *who* doesn't have a --count flag.
$ who | sort --key=1,1 --unique | wc --lines
4

但是有太多方法可以完成一個真正的規范列表。 要注意的主要事情是,如果不進行排序,則一次登錄一個以上TTY或PTY的用戶可能會多次計數同一用戶。

計算非系統帳戶

修復文件系統權限

首先,您需要修復/ etc / passwd上的權限。 在支持影子密碼的發行版(如Ubuntu)上,通常將此文件設置為644模式。 例如:

sudo chmod 644 /etc/passwd

如果您沒有sudo訪問權限,則必須與系統管理員討論有關更改文件權限的問題。 如果貴公司的安全策略不允許這樣做,則可以授予sudo權限以讀取文件,例如:

# Allow user "nadh" to print the contents of /etc/passwd as root.
nadh ALL=(root) NOPASSWD: /bin/cat /etc/passwd

這種級別的sudo訪問是有嚴格限制的,因為它只允許您管理一個文件。 它甚至不允許您將標志或其他參數傳遞給cat。

另一種選擇是使用文件系統上的擴展屬性來授予對特定用戶或組的訪問權限,但這通常是一種更復雜的方法,並且不那么可移植。

計數UID

在Ubuntu上,用戶帳戶的UID在1000-65533的范圍內(65534通常屬於無人帳戶)。 一旦能夠讀取/ etc / passwd,就可以計算允許范圍內的所有用戶。 例如:

awk -F: '$3>=1000 && $3<65534 {i+=1}; END {print i}' /etc/passwd

計數家庭目錄

如果您還具有通過NIS,LDAP或其他一些非本地查找定義的用戶,則對UID進行計數顯然是不准確的。 或者,您可以使用以下方法計算本地主目錄:

ls /home | wc -l

一個合理的近似值。

如果您將服務帳戶數據存儲在/ home中而不是/ var或/ srv中,或者正在使用具有自動掛載功能的NFS,這可能不可靠。 您的里程會有所不同。

檢查此命令,我認為確定當前登錄的用戶數量會有所幫助,

$ who|wc -l

用於丟棄重復的用戶會話並僅計算當前在系統中登錄的唯一用戶。

$ users | tr ' ' '\n' | sort -u | wc -l

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM