当Windows占据操作系统领域半壁江山的时候,很多程序员和使用者不满于Windows霸道,兴起了对其他操作系统软件的开发,其中最著名的就是Linux。Linux是LinusB Torvolds在的1991年首次编写的一种类操作系统,之后借助于Internet网络,在RedHat等公司的努力,和IBM、英特尔等的大力支持下,经过全世界各地计算机爱好者的共同努力,现已成为今天世界上使用最多的一种UNIX类操作系统。
Linux操作系统可支持多用户共同使用,其中的每个用户可同时运行不同的程序集合。若多个用户同时使用一台计算机,那么平均到每个用户上的资源占用比一个用户单独使用这台计算机时要低。多用户操作系统允许多个用户同时使用所有的系统资源,这样系统资源可最大程度地被利用,相应地,每个用户的消耗就将减到最小。那么Linux作为一个多用户多任务操作系统,经常要同时处理多用户共同使用的场合,用户管理是系统管理的一个重要方面,有助于保证系统的正常运转。
在linux中用户分为不同的类型,权限有所区别,其所能完成的任务也就不同。Linux系统中通常有三种类型的用户:超级用户,普通用户和系统用户。超级用户的UID和GID都是0,是系统最高权限的拥有者,root帐号权限管理不善就会造成系统安全的隐患。在对系统操作时尽量避免使用root登陆,也应该尽量避免直接使用root帐号对系统进行配置和操作。普通用户的UID从500开始,系统用户的UID从1-499。
在linux系统下,对用户和用户组进行添加、修改、删除等操作的最终目的都是通过修改用户和组的配置文件来实现的,这些主要配置文件主要有:/etc/passwd、/etc/shadows、/etc/groups、/etc/gshadow、/etc/skel目录等。
/etc/passwd是用户帐号信息文件,/etc/shadows是用户帐号密码的加密文件,/etc/groups是用户组信息文件,/etc/gshadow是用户组帐号的密码加密文件,/etc/skel目录是用来初始化用户的主目录。
用户要使用Linux的系统资源时,先申请一个账号,输入完帐号和口令时,linux会先在/etc/passwd文件中查找是否有这个帐号,如果没有则跳出,如果有的话,会读取该帐号的UID和GID,同时读取该帐号的根目录和shell。然后在/etc/shadow中找出刚刚输入的帐号和UID,核对输入密码是否正确。一切正确用户就可以登录到当前用户shell。管理员也可以利用用户账号帮进行控制和监测,组织文件及安全性保护。常用的用户管理主要涉及新用户账号的创建,账号删除和已有账户属性的修改。
只有root用户才具有管理系统中的用户的权限,在Linux的图形界面下可利用“主菜单”下“系统设置”中的“用户和组群”工具来实现对用户和组管理,但是鉴于在Linux图形界面下用户管理有一定局限性,所以本文重点介绍在字符模式下的用户管理。
在字符模式下要创建一个新账户时可使用的命令是useradd,其可以直接缺省用户密码,也可以在创建账户的同时分配好用户的ID值,主目录,登陆shell等资源。Useradd命令的格式:useradd[-G group][-u UID][-c注释][-d主目录][-s shell]等username
参数的意义:
-u<UID>指定用户ID。
-G<group>定用户所属的附加群组。
-c<注释>添加备注文字。备注文字会保存在passwd的第5列位置中。
-d<主目录>指定用户登入时的主目录。
-e<密码有效期限>指定帐号的有效期限。
-f<密码缓冲天数> 指定在密码过期后多少天关闭该帐号。
-g<群组> 指定用户所属的群组。
-r建立ID值小于500的系统帐号。
-s<shell> 指定用户进入时后所使用的shell。
例如:#useradd zhangsan;仅创建名为zhangsan的用户,而不指定相关资源。这个用户还不能够登录,因为还没给它设置初始密码,而没有密码的用户是不能够登录系统的。
又如:#useradd-d/home/lisi lisi
#passwd lisi
输入新密码:6位以上两次;创建名为lisi的用户同时指定他的主目录为/home/lisi,并为该账号设置密码,两次密码的输入在屏幕上不显示,但是出错的话会有提示。
用户账户账户创建之后可以在使用more,cat,less等命令查看用户信息配置文件/etc/passwd,例如:/etc/passwd中显示lisi:x:501:501::/home/lisi:/bin/bash,该文件中以七列分别显示了,“用户名:口令:UDI:GID:全称:主目录:登录Shell”。在/etc/passwd文件的口令字段中经常会出现“x”字符,说明该系统使用了shadow技术,把真正的用户密码加密后以投影的方式存放到/etc/shadow文件中。
与/etc/passwd文件不同,/etc/shadow文件是只有root级别才有权限进行查看和修改./etc/shadow文件中的每一行行与/etc/passwd中的每一行账户之间是一一对应,一般情况下系统是默认使用shadow功能,若没有启动的话,用户可以使用pwconv命令使shadow有效。
在创建用户之后可利用usermod修改用户帐号属性。其命令格式为:
usermod[-c说明][-d主目录][-e时间][-f天数][-g group name>][-G group name][-l<帐号名称>][-s<shell>][-u<UID>][-L/U用户名][用户帐号],命令中使用的相关参数类似于useradd命令。
使用方式例如:
#usermod-d/var/lisi lisi;将用户lisi的主目录修改到/var/lisi之下
#usermod-L lisi;将用户lisi锁定,同样也可使用#passwd-l lisi来实现相同的效果。
#usermod-U lisi;将用户lisi解锁,同样也可使用#passwd-u lisi来实现相同的效果。
如果想删除已有的用户可使用userdel命令,其格式为:
userdel[选项][用户帐号]
userdel可删除用户帐号与相关的用户主目录,邮件通知等文件。若中间不加-r等选项,则删除用户帐号的同时,保留相关文件。一般在删除用户账户时需要将有关文件一并删除,使用方式例如:
#usermdel-r lisi;将用户lisi账户相关内容全部删除
在日常管理中会遇到同时创建一批用户的情况,在Linux中可利用系统命令的方式批量的创建新用户。首先仿造/etc/passwd中用户信息的形式,自己创建一个新文件,文件名不限,例如要批量创建60名用户账户,文件名设为userlist.txt:
#vi userlist.txt
user01:x:600:600::/home/user01:/bin/bash
user02:x:601:601::/home/user02:/bin/bash
┊
User60:x:659:659:/home/user60:/bin/bash
然后以root的身份执行:
#newusers<userlist.txt,该命令是将userlist.txt文件追加到/etc/passwd文件中,此时可以查看/etc/passwd文件以确定刚新建的60个新用户是否已经在配置文件中显示信息。
接着执行命令#pwuncove,其目的是暂时取消shadow的功能,以便接下来可以将新设置的用户密码文件调入到/etc/shadow中。
下一步该创建用户密码文件命名为userpasswd.txt,做法如下:
#vi userpasswd.txt
#user1:密码自定
#user2:密码自定
#user3:密码自定
┊
#user60:密码自定
此时的60位新用户的密码可以相同也可不同,亦可缺省。接着执行命令:
#chpasswd<userpasswd.txt,将新密码调入到/etc/shadow文件中。
最后执行#pwcove恢复shadow功能即可。采用以上方法可以轻松的一次创建多名用户和密码。
用户组是具有相同特征的用户的集合,Linux中用户组的相关信息存放在配置文件/etc/group中,一共有四项,依次为:
群组名称:群组密码:群组ID:支持帐号的名称
常用的组管理包括组的建立,修改组属性,组的删除及用户添加到组等操作。
(1)添加组:#groupadd选项用户组。
例如:#groupadd-r jack;
#tail-1/etc/group;创建系统用户组jack,查看该小组的GID是否小于500#tail-1/etc/group;显示jack:x:101
修改用户组属性:
(2)改变用户组名“#groupmod-n新名旧名”。
使用方法:#groupmod-n tom jack;将用户组jack的名字修改为新名tom。
(3)删除组:#groupdel用户组名在删除一个小组时,如果其中还有用户,应先删除用户再删除小组。
(4)添加/删除用户到指定的组:#gpasswd-a/-d用户账户用户组名;
使用方法:#gpasswd-a/-d yoyo tom;将用户yoyo添加/删除到小组tom中。
gpasswd命令也可用于为小组加密码,通常情况下不需要设置或修改小组密码,通常不需设定,因为我们很少使用群组登录。不过这个密码也被记录在/etc/shadow中了。
在复杂的环境中,所有的用户和组的管理都可以在控制台中完成,可以写成脚本。也可以使用Webmin等工具以图形化的方式管理用户和组。Linux中的用户管理不要吝惜对组的使用,不要害怕创建很多组。应该根据资源访问权限而不是基于业务单位去创建组。
[1]王存健,张建正.嵌入式Linux下Qt/Embedded的应用[J].嵌入式系统,2007,04.
[2]王丽洁.嵌入式Linux的图形界面技术研究与实现[D].国防科学技术大学:软件工程(硕士学位论文),2006,11,01.
[3]谢蓉,巢爱棠编著.Linux基础及应用[M].中国铁道出版社,2005,2(第一版).