为何你应当检测你的Linux用户列表
您可能希望在Linux中列举用户的缘由有好多。就查找和删掉未使用的账户而言,这是一个挺好的做法。从安全的角度来看,这也是确保您没有入侵者创建用户账户的好方式。
这是一项管理任务,您可能应当起码每月执行一次。假若您正在运行企业Linux服务器,您可能希望更频繁地执行此操作。
/etc/passwd中列举的用户
所有Linux服务器的用户账户在文件/etc/passwd中都有条目。每行代表一个用户,有七个数组,用逗号分隔。这种数组提供有关用户的信息。
因而,这为我们带来了一种列举Linux上所有用户的方式。您可以使用less命令查看整个文件,一次一屏。
less /etc/passwd
假如你想检测某个特定用户是否存在于Linux系统中,这么命令grep是一个挺好的用途:
less passwd | grep jeff
倘若您没有得到任何输出,则该用户在Linux服务器上不存在。
不过,这是好多信息。您可以将其削减为仅用户名,比如RAR FOR LINUX,使用awk或cut命令:
awk -F: '{print $1}' /etc/passwd
cut -d: -f1 /etc/passwd
这常常更容易理解linux 用户分配权限linux运维招聘,但它依旧让您查看与您的人类用户混和的所有基于系统的用户账户。
怎样使用getent列举用户
另一个命令getent更有用。它显示来自服务器/etc/nsswitch.conf文件中配置的任何数据库的条目。其中之一是passwd数据库。要使用getent显示所有Linux用户的列表,它的工作方法如下:
getent passwd
输出看上去与使用less命令完全相同,但列举了Linux系统上的所有LDAP用户。再一次,我们的awk和cut命令只能帮助查看第一个数组,即用户名。
假如要检测特定用户是否存在于Linux系统中,getent可以很容易:
getent passwd jeff
同样,此命令的任何输出都不会告诉您用户不存在。
getent的另一个极好的用途是找出服务器上存在多少用户账户。这是通过wc命令管线getent的输出来完成的,如下所示:
getent passwd | wc -l
可以看见,我的Linux系统一共有48个帐号。十分有趣,由于我是惟一一个使用它的人,但这只是显示了在Linux中创建了多少系统账户。
从普通用户中剔除系统用户
在Linux眼里,系统用户和人类用户没有区别。每每您安装操作系统时,它就会创建许多系统用户。为各类软件包创建其他系统用户,比如Web或电邮服务软件。
这么,怎么仅列举Linux系统上的常规人类用户呢?这儿的关键是要理解,当你创建一个普通用户时,它的UID是在一定的数字范围内分配的。通过检测/etc/login.defs文件,我们可以确定普通用户账户可用的UID值范围。
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
按照输出,我晓得普通用户的UID应当在1000到60000之间。由此,我可以构造一个只显示普通用户的getent查询。
getent passwd {1000..60000}
请记住,虽然getent显示其输出,它也会出现挂起。您可以按Ctrl-C结束该过程,或等到它完成。完成对passwd数据库的搜索一般须要不到15秒的时间。
此命令的更通用版本考虑了各类服务器可能使用的不同UID_MIN和UID_MAX值。
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)}
在该命令中,我们借助了Linux同时执行多项操作的能力。awk命令获取UID_MIN和UID_MAX值,之后在getent命令中使用它们。
如今,假定我们想要的只是用户名。再一次,我们通过cut命令管线输出linux 用户分配权限,如下所示:
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1
此命令可能须要10到15秒就能完成,因而请耐心等待。
有效管理您的Linux用户
跟踪Linux系统上存在什么用户账户十分重要。当您晓得职工早已离开时,请及时删掉她们的用户账户。定期列举您的Linux用户将有助于确保您捉住任何可能滞留的账户。
同时,请勿必把握密码安全策略,并鼓励您的用户定期修改密码。