Linux操作系统下关于用户和组的配置管理指南
用户管理,主要的工作就是建立一个合法的用户帐户、设置和管理用户的密码、修改用户帐户的属性以及在必要时删除已经废弃的用户帐号。
1. 增加一个新用户
在Linux系统中,只有root用户才能够创建一个新用户,如下的命令将新建一个登录名user1的用户。
# useradd user1
但是,这个用户还不能够登录,因为还没给它设置初始密码,而没有密码的用户是不能够登录系统的。在默认情况下,将会在/home目录下新建一个与用户名相同的用户主目录。如果需要另外指定用户主目录的话,那么可以使用如下命令:
# useradd -d /home/xf user1
同时,该用户登录时将获得一个Shell程序:/bin/bash,而假如你不想让这个用户登录,也就可以指定该用户的Shell程序为:/bin/false,这样该用户即使登录,也不能够执行Linux下的命令:
# useradd -s /bin/false user1
在Linux中,新增一个用户的同时会创建一个新组,这个组与该用户同名,而这个用户就是该组的成员。如果你想让新的用户归属于一个已经存在的组,则可以使用如下命令:
# useradd -g user user1
这样该用户就属于user组的一员了。而如果只是想让其再属于一个组,那么应该使用:
# useradd -G user user1
完成了这一操作后,你还应该使用passwd命令为其设置一个初始密码。
2. 删除一个用户
删除用户,只需使用一个简单的命令“userdel 用户名”即可。不过最好将它留在系统上的文件也删除掉,你可以使用“userdel -r 用户名”来实现这一目的。
3. 修改用户属性
在前面我们看到了在新建一个用户的时候如何指定它的用户主目录,如何指定它的Shell,如何设置它所属的组…等等。在Linux中提供了一个命令来实现:
usermod -g组名 -G 组名 -d 用户主目录 -s 用户Shell
还有一种直接的方法,那就是修改/etc/passwd文件,在这个文件中每个用户占用一行,它的内容为:
用户名:密码:用户ID:组ID:用户全名:用户主目录:用户Shell
不过值得注意的是,密码这一项通常是用一个*号代替的,你是看不到的。
4. 增加一个组
还记得Linux的文件可以为同组的人、非同组的人设置不同的访问权限吗?我们可以根据自己的需要创建用户组:
groupadd 组名
5. 删除一个组
同样的,我们有时会需要删除一个组,它的命令就是groupdel 组名。
6. 修改组成员
如果我们需要将一个用户加入一个组,只需编辑/etc/group文件,将用户名写到组名的后面。例如将newuser用户加入到softdevelop组,只需找到softdevelop这一行:
softdevelop:x:506:user1,user2
然后在后面加上newuser,形成:
softdevelop:x:506:user1,user2,newuser
另外,在Red Hat Linux中还提供一个图形化的用户管理工具:userconf,通过它可以更直接地进行用户管理。
两个重要文件:passwd与group
在linux的安全机制里,/etc/passwd与/etc/group这两个文件占着非常重要的地位。它们控制着linux的用户和组一些重要设置。
◆/etc/passwd文件说明 (用于设置用户的属性)
可用 vi /etc/passwd 查看
在passwd的文件里,每一行被冒号(":")分成7个部分,分别是:
[用户名]:[密码]:[UID]:[GID]:[身份描述]:[主目录]:[登录shell]
其中:
[UID]虽然是系统用来标志文件归属,确定各种权限的标志,但这个区域的内容并不要求唯一的。比较常见而又与安全问题相关的一个例子是有多个UID和GID均为0的用户帐号。注意到在该文件最后一行还有一个UID和GID为0的用户imnotroot,虽然它声称自己不是root,但是它却有和root完全相同的权限,因为系统并非根据[用户名],而是根据UID和GID来分用户的权力的。所以,这种情况无疑为系统埋下了安全的炸弹。但是,当imnorroot做锁定屏幕等操作的时候,如果它的密码和root的不一样,它将无法解锁,因为系统只是查到第一个UID为0的用户(自然是root)后,就不在往下查找了——它当UID也是唯一的。
[GID]用户默认的组ID,这个ID可以在文件 /etc/group里查到对应的组名。
<注意>:[UID]和[GID]小于500的一般都是系统自己保留,不做普通用户和组的标识的,所以新增加的用户和组一般都是UID和GID大于500的。
◆/etc/group文件说明
vi /etc/group 查看其内容
它总共分四个部分:
[组名]:[密码域]:[GID]:[组员例表]