2012-11-07 18 views
1

我想要一個單行shell命令或一個簡短的Bash/Python腳本來列出可以登錄到該機器的Linux服務器上的所有用戶。因此,用戶如www數據和郵件將被排除在外,但root將成爲列表的一部分。例如,該代碼可以工作。 I found it here。但我正在尋找更簡單的清潔劑。可以登錄的Linux服務器列表用戶

awk -F: '$2 != "*" && $2 !~ /^!/ { print $1, " can log in" }' /etc/shadow 
+2

看起來您希望我們爲您編寫一些代碼。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。證明這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出和實際獲得的輸出(控制檯輸出,堆棧跟蹤,編譯器錯誤 - 無論是適用)。您提供的細節越多,您可能會收到的答案就越多。 –

+1

我用一些有效的代碼更新了問題。 –

+0

你已經很多了,只需從你的sshd配置文件中讀取min-user-id的值,並使用它來過濾/ etc/passwd中的條目; shadow – lynks

回答

4

您可以使用此oneliner列出有密碼在/ etc/shadow中,一個每設置所有用戶line:

getent shadow | egrep '^[^:]*:[*!]:' -v | cut -f1 -d: 

這隻適用於本地用戶,不適用於使用LDAP數據庫或其他方法。

如果您正在使用LDAP,並要列出目錄中的所有用戶,您可以嘗試:

getent passwd | cut -f1 -d: 

雖然,這將列出所有用戶,包括「非用戶」賬戶,如www-data

1

我發現bash腳本在Find Linux users that can log in with password

猛砸版本:

awk -F: '$2 != "*" && $2 !~ /^!/ { print $1, " can log in" }' /etc/shadow 

Python版本:

users = [i.split(':') for i in open('/etc/shadow').readlines()] 
print '\n'.join([i[0] for i in users if i[1] not in ('!', '*')]) 
相關問題