3.1用户管理当安装好Linux后,系统默认的帐号为root,该帐号为系统管理员帐号,对系统有完全的控制权,可对系统进行任何设置和修改。
3.1.1 用户管理
1.useradd(adduser)命令语法:useradd [选项] [用户帐号]
功能:建立用户帐号,帐号建好之后,再用passwd设定帐号的密码。可以用userdel删除帐号。使用useradd命令建立的帐号被保存在/etc/passwd文本文件中。useradd命令的各选项及其功能见表3-1。
 注意:
一个人能否使用Linux系统,取决于该用户在系统中有没有帐号。
2.passwd命令语法:passwd [选项] 用户帐号功能:passwd 命令可以更改自己的密码(或口令),也可以更改别人的密码。如果后面没有跟用户帐号,就是更改自己的密码。如果跟着一个用户帐号,就是为这个用户设置或更改密码。当然,这个用户帐号必须是已经用useradd命令添加的帐号才可以。只有超级用户可以修改其他用户的口令,普通用户只能用不带参数的passwd命令修改自己的口令。在早期的Linux版本中,经过加密程序处理过的用户口令,存放在passwd文件的第2个字段,如图3-2所示。但是为了防范有人对这些加密过的密码进行破解,Linux把这些加密过的密码移到/etc/shadow文件中,而原来的/etc/passwd文件放置密码的地方,只留一个x字符,而对/etc/shadow文件只有超级用户有读取的权限。这就叫做最新的shadow password功能。passwd命令各选项及其功能见表3-2。
出于系统安全考虑,Linux系统中的每一个用户除了有其用户名外,还有其对应的用户口令。因此使用useradd命令后,还要使用passwd命令为每一位新增加的用户设置口令。用户以后还可以随时用passwd命令改变自己的口令。
实例3-1 添加用户第1步:添加用户帐号ztguang
如图3-1所示,添加用户帐号ztguang,会自动在/home处产生一个目录ztguang来放置该用户的文件,这个目录叫做用户主目录(Home Directory)。该用户的用户主目录是/home/ztguang,创建其他用户时也是如此。但是,超级用户(root)的主目录不一样,是/root。
第2步:为ztguang设置口令如图3-1所示,为ztguang设置口令。在“New UNIX password:”后面输入新的口令(在屏幕上看不到这个口令),如果口令很简单,将会给出提示信息。系统提示再次输入这个新口令。输入正确后,这个新口令被加密并放入/etc/shadow文件中。选取一个不易被破译的口令是很重要的。选取口令应遵守如下规则:
口令应该至少有六位(最好是八位)字符;
口令应该是大小写字母、标点符号和数字混合的。
第3步:观看passwd文件的变化
在KDE或GNOME桌面环境中,可以依次选择【系统】/【管理】/【用户和组群】
3.userdel命令语法:userdel [-r] [用户帐号]
功能:删除用户帐号及其相关的文件。如果不加参数,那么只删除用户帐号,而不删除该帐号的相关文件。
参数:-r删除用户主目录以及目录中的所有文件。
实例3-2 删除用户第1步:如图3-5所示,执行第1条命令,查看有哪些用户主目录。
第2步:如图3-5所示,执行带-r选项的userdel命令。
第3步:如图3-5所示,执行第3条命令,查看用户主目录的变化。
如果只是临时禁止用户登录系统,那么不用删除用户帐号,可以采取临时查封用户帐号的办法。编辑口令文件/etc/passwd,如图3-7最后一行所示,将一个“*”号放在要被查封用户的加密口令域,这样该用户就不能登录系统了。但是他的用户主目录、文件以及组信息仍被保留。如果以后要使该帐号成为有效用户,只需将“*”换为“x”即可。
4.who命令语法:who [选项]
功能:执行who命令可以得知目前有那些用户登录系统,单独执行who命令会列出登录帐号,使用的终端,登录时间以及从何处登录等信息。who命令各选项及其功能见表3-3。
实例3-3 查看登录系统的用户执行who命令,如图3-6所示,可以看出,当前有三个用户登录进系统。tty是指控制台(运行级别是3的窗口),pts是指终端(在GNOME或KDE中打开的命令行窗口,图3-6即是)。
5.id命令语法:id [选项] [用户名]
功能:显示用户ID,及其所属组群ID,另外,如果启用了SELinux,那么会显示SELinux相关的信息。id命令各选项及其功能见表3-4。
实例3-4 查看用户的帐号信息
6.whoami命令语法:whoami [选项]
功能:显示当前终端(或控制台)上的用户名。
命令各选项及其功能见表3-5。
实例3-5 查看当前用户由于Linux是多用户的操作系统,可能有多个用户同时进入系统工作,要是有些用户忘记注销就离开了,系统管理员就可以使用whoami命令来查看,到底是哪个用户这么大意,然后会通知该用户以后一定要记得注销。
 注意:
如果某用户未注销就离开,会给其他人进入系统的机会,这样就给系统带来了安全隐患。
3.1.2 组管理
1.groupadd命令语法:groupadd 组名功能:创建一个新组群。groupadd 命令是用来在 Linux 系统中创建用户组。这样只要为不同的用户组赋于不同权限,再将不同的的用户按需要加入不同组中,用户就能获得所在组拥有的权限。这种方法在Linux中有许多用户时是非常方便的。
相关文件有/etc/group和/etc/gshadow。
2.groupdel命令语法:groupdel?组名功能:删除组群。
说明:需要从系统上删除组群时,可用groupdel指令来完成这项工作。如果该组群中仍包括某些用户,则必须先删除这些用户后,方能删除组群。如果有任何一个组群的使用者在线上的话就不能移除该组群。
3.1.3 su和sudo命令
1.su(substitude user)命令语法:su [选项] [用户帐号]
功能:su命令可以让一个普通用户拥有超级用户或其他用户的权限,也可以让超级拥护以普通用户的身份做一些事情。若没有指定的使用者帐号,则系统预设值为超级用户root。普通用户使用这个命令时,必须有超级用户或其他用户的口令,超级用户root向普通用户切换不需要密码。如要要离开当前用户的身份,可以执行exit命令。
主要用途:如果以普通用户ztguang登录,此时需要执行useradd命令添加用户,但是ztguang用户没有这个权限,而root用户有这个权限。解决的办法有两个,一是退出ztguang用户,重新以root用户登录;二是用su来切换到root用户执行添加用户的任务,等任务完成后再退出root用户,返回ztguang用户。可知第2种办法较好。su命令各选项及其功能见表3-6。
实例3-8 使用su命令进行用户切换
 注意:
系统管理员的命令提示符默认为“#”,普通用户的命令提示符默认为“$”。
2.sudo命令语法:sudo [-bhHpV] [-s ] [-u 用户] 命令 或 sudo [-klv]
功能,sudo可让用户以其他的身份来执行指定的指令,预设的身份为root。在/etc/sudoers中,设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
通过sudo,能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo相对于权限无限制性的su来说,还是比较安全的,所以sudo也能被称为受限制的su。另外sudo是需要授权许可的,所以也被称为授权许可的su。
sudo执行命令的流程是:当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户。前提是要通过sudo的配置文件/etc/sudoers进行授权;
实例3-9 使用sudo命令为不同用户分配相应的权限第1步:认识sudo配置文件/etc/sudoers
/etc/sudoers文件中每行是一条规则,开头带“#”号的行是注释,如果规则很长,可以用“\”号来续行,这样可以用多行表示一条规则。前面加“%”号的是用户组,中间不能有空格。规则有两类:别名规则和授权规则。别名规则不是必须的,而授权规则是必须的。
(1)别名规则别名规则的定义格式:
Alias_Type NAME = item1,item2,...
或者
Alias_Type NAME = item1,item2,item3,NAME = item4,item5
其中:
Alias_Type是指别名类型,包括四种:Host_Alias、User_Alias、Runas_Alias和Cmnd_Alias。NAME就是别名;
NMAE的命名是包含大写字母、下划线以及数字,但必须以一个大写字母开头,比如ADMIN、SYS1和NETWORKING都是合法的,而sYS和6ADMIN是非法的;
item是指成员,如果一个别名下有多个成员,那么成员之间通过,,”( 半角)分隔,成员在必须是有效的,比如,对于用户名,在/etc/passwd中必须存在,对于主机名,可以通过w或hostname命令查看,对于命令别名,其成员(命令)必须在系统中存在。item成员受别名类型的制约,定义什么类型的别名,就要有什么类型的成员相配。同一类型别名的定义,一次可以定义几个别名,别名之间用“:”号分隔。
① Host_Alias
定义主机别名的例子如下:
Host_Alias HT1=localhost,ztg,192.168.0.0/24
主机别名是HT1,“=”号右边是成员。
Host_Alias HT1= localhost,ztguang,192.168.10.0/24:HT2=ztg2,ztg3
定义了两个主机别名HT1和HT2,别名之间用“:”号隔开。
 注意:
通过Host_Alias定义主机别名时,项目可以是:主机名、IP地址(或者网段)、网络掩码。设置主机别名时,如果某个项目是主机名的话,可以通过hostname命令来查看本地主机的主机名,通过w命令查来看登录主机的来源,进而知道客户机的主机名或IP地址。如果对于Host_Alias不很明白,可以不用设置主机别名,在定义授权规则时通过ALL来匹配所有可能出现的主机情况。
② User_Alias
用户别名,别名成员可以是用户,用户组(前面要加%号)。
User_Alias ADMIN=ztg,ztguang
定义用户别名ADMIN,有两个成员ztg和ztguang,这两个成员要在系统中确实存在。
User_Alias PROCESSES= ztg1
定义用户别名PROCESSES,有一个成员ztg1,这个成员要在系统中确实存在。
③ Runas_Alias
用来定义runas别名,这个别名是指sudo允许切换到的用户;
Runas_Alias RUN_AS = root
定义runas别名RUN_AS,有一个成员root。
④ Cmnd_Alias
定义命令的别名,这些命令必须是系统存在的文件,要用绝对路径,文件名可以用通配符表示。
Cmnd_Alias SERVICES = /sbin/service,/sbin/chkconfig
Cmnd_Alias PROCESSES = /bin/nice,/bin/kill,/usr/bin/kill,/usr/bin/killall
 注意:
命令别名下的成员必须是文件或目录的绝对路径;
(2)授权规则授权规则是分配权限的执行规则,前面所讲的别名规则的定义主要是为了方便授权规则中引用别名;如果系统中只有几个用户,那么可以不用定义别名,对系统用户直接进行授权,所以在授权规则中别名不是必须的。
别名规则的定义格式:
授权用户 主机=命令动作或者授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换到哪些用户或用户组)] [是否需要密码验证] [命令2],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令3]....
其中,授权用户、主机和命令动作这三个要素缺一不可,但在动作之前也可以指定切换到的目的用户,在这里指定切换的用户要用()号括起来,比如(ALL)、(ztg),如果不需要密码直接运行命令的,应该加“NOPASSWD:”参数。[]中的内容是可以省略的,命令之间用“,”号分隔。如果省略[(切换到哪些用户或用户组)],那么默认为root用户,如果是ALL,那么能切换到所有用户。
第2步:编辑/etc/sudoers文件执行#sudoedit /etc/sudoers命令,在/etc/sudoers文件最后添加的6条规则如图3-22所示。

图3-22 添加6条规则第1行:User_Alias ADMIN=ztg1,定义用户别名ADMIN,有一个成员ztg1。
第2行:Runas_Alias OP=root,定义Runas用户,即目标用户的别名是OP,有一个成员root。
第3行:Cmnd_Alias ADMCMD=/usr/sbin/userdel,定义命令/usr/sbin/userdel的别名ADMCMD。
第4行:ztg ALL=/usr/sbin/useradd,/usr/bin/passwd,表示ztg可以在任何可能出现的主机名的系统中切换到root用户执行/usr/sbin/useradd和/usr/bin/passwd命令,需要密码,成员之间用“,”号分隔。
第5行:ztguang ALL=(root) NOPASSWD,/usr/sbin/useradd,/usr/bin/passwd,授权ztguang用户能够以root身份运行/usr/sbin/useradd和/usr/bin/passwd命令,不需要密码。
第6行:ADMIN ALL=(OP) ADMCMD,授权ADMIN下的所有成员能够以OP的身份运行ADMCMD。
第3步:使用sudo命令