第三章第三章 用户登录与账户管理用户登录与账户管理Linux作为多用户、多任务的操作系统,其系统资源是所有用户共享的任何要使用系统资源者必须先在系统内登记、注册,即开设用户账户,该账户包含用户名、口令、所用的shell、使用权限等等;为了计算机系统的安全,Linux会对每一个要求进入系统的用户验证他们的用户名和口令,如果验证通过则用户登录成功,否则系统拒绝登录3.1 用户登录根据用户在本地终端还是通过网络登录Linux系统,分为用户的终端登录和远程登录这里的网络可以是局域网,如学校计算机实验室;也可以是网际网,如Internet3.1.1 终端登录当成功启动系统后,如果系统运行级为5,则登录时会看到如图3-1所示界面;如果运行级为3,则登录时会看到如图3-2所示界面用户必须先后输入用户名、口令才可以登录Linux系统图3-1运行级5的登录界面图3-2运行级3的登录界面如果以超级用户的root账户登录,则终端提示符为#如果以普通用户登录,则终端提示符为$在 Linux 系统中超级用户拥有最高权限,例如、可以删除、修改系统中所有的目录和文件;而且在命令方式下删除的内容是不可恢复的为了系统安全、避免由于误操作带来的损失,建议若非系统管理需要,一般不要以超级用户的root账户登录。
Linux系统提供了六个虚拟控制台终端,每个虚拟终端都可以登录系统这六个虚拟终端之间用组合键Ctrl+Alt+Fx进行切换,Fx表示F1到F6键如果系统运行级是5,则任何时候要返回到图形界面只要按Ctrl+Alt+F7即可3.1.2 远程登录 所谓“远程登录”是指用户在某一台计算机上通过网络登录其他联网的计算机系统,使用该系统中的资源,如执行命令、查找文件等,以达到资源共享的目的相互连通的计算机可以是处于同一个局域网、城域网和广域网,甚至世界上任何一台连接到Internet的计算机当用户发出远程登录请求时,Linux系统会像在本地终端登录一样要求用户输入用户名和口令;一旦登录成功,如果你有足够的权限、你的计算机就像远程哪台计算机的终端一样,你通过键盘所发出的命令,就会在该远程计算机上执行、执行的结果会通过网络显示在你的显示器上在Linux操作系统中,实现远程登录的命令主要有:telnet、rsh、rlogin和ssh,它们要在系统提供相应服务的基础上使用;换句话说、要使用远程登录必须先开启所用远程登录命令对应的服务,例如、要使用telnet命令就要先开启系统的telnet服务一般这些系统服务没有必要全部开启,这样既浪费系统资源、造成运行速度降低又可能留下安全隐患,可以根据实际使用哪些命令来开启相关的系统服务。
有关系统服务的查看、开启和关闭请参阅第二章的有关章节本章仅仅介绍远程登录的使用,不涉及远程登录的安全问题3.1.2.1 telnet命令telnet命令是最常用的远程登录命令,但是它只能在基于终端的环境下使用,即要么在虚拟控制台终端上使用、要么在X Window系统的终端窗口中使用telnet命令的选项和参数很多,但在实际使用中往往只要用到其基本用法这里我们先介绍如何最基本地使用该命令,然后给出该命令的完整用法基本用法:$telnet host其中,host是你要登录到的远程计算机的名字或IP地址以下是使用telnet命令基本用法的示例:[root@localhost root]# telnet 192.168.248.133Trying 192.168.248.133...Connected to 192.168.248.133 (192.168.248.133).Escape character is '^]'.Red Hat Linux release 9 (Shrike)Kernel 2.4.20-8 on an i686login: zxjPassword:Last login: Sun Feb 4 15:12:32 from 192.168.248.131[zxj@localhost zxj]$ cd /[zxj@localhost /]$ lsbin dev home lib misc opt root t usrboot etc initrd lost+found mnt proc sbin tmp var[zxj@localhost /]$ cd /home[zxj@localhost home]$ lslost+found zxj[zxj@localhost home]$ logoutonnection closed by foreign host.在这个示例中,使用telnet命令远程登录到IP地址为192.168.248.133的计算机上;当连接成功后显示Linux的发行版本号和内核版本号,并要求用户输入用户名和口令。
如果用户超过一定的时间没有输入,则系统自动断开连接如果用户输入的用户名和口令正确,则登录系统成功并自动进入该用户目录这时用户的计算机就像远程计算机的一个终端,根据用户所拥有的权限就可以执行相应的命令例如、切换到根目录下、执行ls命令时会看到在远程计算机上显示的目录和文件就像在自己计算机终端上登录的一样当完成所需要的操作后,使用logout命令退出远程登录,即可关闭与远程计算机的连接,回到自己的系统中实际上,telnet命令是TELNET协议的用户接口完整用法: telnet [-8] [-E] [-F] [-K] [-L] [-S tos] [-X authtype] [-a] [-c] [-d] [-e escapechar] [-f] [-k realm] [-l user] [-n tracefile] [-r] [-x] [host [port]]如果telnet命令不带任何命令选项,则进入telnet命令模式、显示telnet>提示符,执行?或help命令可以查询所有可用的命令;执行?命令名或help命令名,则显示该命令的帮助信息。
表3-1列出了telnet命令的选项和说明命令命令选项选项选项说选项说明明-8允允许许使用使用8位的操作,位的操作,这这将使将使输输入与入与输输出都使用出都使用TELNET BINARY选项选项默认认情况下情况下telnet不使用不使用8位的操作位的操作-E禁止禁止escape((转义转义)字符的功能,即将)字符的功能,即将escape字符字符设为设为空字符空字符-F把本地主机的把本地主机的认证认证数据上数据上传传到到远远程主机程主机-K不自不自动动登登录远录远程主机程主机-L允允许输许输出使用出使用8位操作,位操作,这这使使输输出使用出使用BINARY选项选项S tos将将telnet连连接的接的IP tos((type-of-service,服,服务类务类型)型)选项设选项设置成置成tos的的值值(以十(以十进进制、十六制、十六进进制或八制或八进进制)X authtype关关闭闭指定的指定的认证认证形式形式-a试图试图自自动动登登录远录远程系程系统统如果远远程系程系统统支持,本参数会支持,本参数会读读取取环环境境变变量量USER所所设设置的用置的用户户名称作名称作为为登登录账录账号号-c不不读读取用取用户专户专属目属目录录里的里的.telnetrc文件(文件(隐隐含文件)含文件)-d启启动调试动调试((debug)模式)模式-e esccapechar设设置置escape((转义转义)字符。
如果使用)字符如果使用该项该项参数却没有指定参数却没有指定escape字符,字符,则则telnet指令将不会使用指令将不会使用escape字符f与与-F参数相同参数相同-k realm使用使用Kerberos认证时认证时,加上,加上这这个参数个参数让远让远程主机采用指定的程主机采用指定的领领域名称,而不是域名称,而不是该该主机的域名主机的域名-l user指定要登指定要登录远录远程主机的用程主机的用户户名称如果没有使用名称如果没有使用该该参数,参数,则则telnet会要求会要求输输入登入登录录的用的用户户名该该参数参数隐隐含了含了-a参数参数-n tracefile指定文件指定文件记录记录相关信息相关信息-r使用使用类类似似rlogin命令的用命令的用户户界面在这这种模式中,除非使用参数种模式中,除非使用参数-e改改变变,否,否则预设则预设的的escape字符是字符是“~”-x启用数据流加密当启用数据流加密当该该参数使用参数使用时时,如果无法通,如果无法通过认证过认证或加密数据无法打开或加密数据无法打开则则telnet将退出host 指定指定远远程主机的名称、程主机的名称、别别名或名或IP地址地址port指定指定远远程主机的端口号。
如果不使用端口号,程主机的端口号如果不使用端口号,则则telnet使用缺省的端口号使用缺省的端口号为为233.1.2.2 rlogin命令rlogin命令与telnet命令无论在使用方法还是选项功能上都非常类似;它也是用来在远程计算机上登录如果登录成功,就可以在远程计算机上执行该注册账户权限所允许的任何操作基本用法:$rlogin rhost其中,rhost是你要登录到的远程计算机的名字或IP地址完整用法:低版本rlogin命令:rlogin [-8EL][-e char][-l username] rhost高版本rlogin命令: rlogin rhost [-ec] [-8] [-c] [-a] [-f] [-F] [-t termtype] [-n] [-7] [-PN | -PO] [-d ] [-k realm] [-x] [-L] [-l username] 从rlogin命令的完整用法可以看到,该命令中的rhost参数是必需的,代表远程主机名或IP地址;其他的是命令选项且是可选的表3-2列出了rlogin命令的选项和说明该版本的rlogin命令与低版本的rlogin命令在选项个数和功能上有较大的差别。
命令命令选项选项选项说选项说明明-ec把escape(转义)字符设置为c该参数在ec之间没有空格和其他escape字符分隔8任何时候都允许8位的数据输入通路如果不使用该参数,则输入数据中的奇偶校验位将被删除,除非远程计算机的启动和停止字符不是Ctrl-S和Ctrl-Q8位模式是默认的c通过“~.”命令断开连接前要求证实a通过发送空的本地计算机用户名,强制要求远程计算机验证密码该参数选项只有在UCB远程登录(rlogin)命令代替Kerberos rlogin命令执行时才有效E阻止任何字符被当作escape字符当该参数与-8参数一起使用时,将提供一个完整的透明连接e char设置转义字符为char默认的转义字符为“~”char可以是一个普通的字符,也可以是用八进制ASCII码形式定义的字符f与-F参数相同-F把本地主机的认证数据上传到远程主机-t termtype用指定的终端类型termtype代替,把该终端类型传给远程计算机n通过“~^Z”或“~^Y”组合键防止rlogin命令终止7强制使用7位传输PN明确地要求Kerberos远程命令协议的新版本(-PN)或旧版本(-PO)新协议版本避免了许多在旧协议中发现的安全问题,但它与旧服务器并不兼容。
如果两个都不指定,系统将采用某些简单的试探法来确定PO参见-PN选项d打开TCP socket的socket调试开关-k realm使用Kerberos认证时,加上这个参数让远程主机采用指定的领域名称,而不是该主机的域名-x打开DES加密程序,对rlogin会话传输的数据进行加密使用该参数会影响系统的响应时间和CPU利用率,但增加了通信的安全性-L使rlogin的会话按litout模式运行参见tty用户手册-l username指定要登录远程主机的用户名称如果没有使用该参数,则rlogin会使用该用户在本地计算机上的用户名作为登录到远程计算机上所用的用户名因此、该参数省略时,系统不要求输入登录的用户名,而只要求输入口令3.1.2.3 rsh命令rsh命令用来启动远程计算机上的shell并让该shell执行权限范围内指定的命令基本用法:$rsh host [command]其中,host是你要登录到的远程计算机的名字或IP地址,而command为要远程计算机shell执行的命令如果省略了参数command,则rsh命令将调用rlogin命令登录到远程计算机上完整用法:低版本rsh命令:rsh [-dn] [-l username] host [command]高版本rsh命令:rsh host [-l username] [-n] [-d] [-k realm] [-f | -F] [-x] [-PN | -PO] [command]从rsh命令的完整用法可以看到,该命令中的host参数是必需的,其他的是命令选项且是可选的。
表3-3列出了rsh命令的选项和说明命令命令选选项项选项说选项说明明-l username指定要登录远程主机的用户名称如果没有使用该参数,则rlogin会使用该用户在本地计算机上的用户名作为登录到远程计算机上所用的用户名因此、该参数省略时,系统不要求输入登录的用户名,而只要求输入口令n把输入的命令重定向到名为 /dev/null 的特殊的设备d打开TCP socket的socket调试开关-k realm请求rsh获得在指定区域内的远程主机的Kerberos许可,而不是获得由krb_relmofhost(3)确定的远程主机区域内的远程主机的Kerberos许可f与-F参数相同-F把本地主机的认证数据上传到远程主机-x对网络会话传输的数据进行加密PN明确地要求Kerberos远程命令协议的新版本(-PN)或旧版本(-PO)新协议版本避免了许多在旧协议中发现的安全问题,但它与旧服务器并不兼容如果两个都不指定,系统将采用某些简单的试探法来确定PO参见 –PO选项rsh命令连接指定的远程计算机,并在它上面执行指定的命令rsh命令将本地计算机上的标准输入复制到远程计算机的标准输入,因此在本地计算机上可以输入在远程计算机上执行命令所需要的输入数据。
而且、rsh命令还将远程计算机上的标准输出复制到本地计算机的标准输出中、将远程计算机上的标准错误输出复制到本地计算机的标准错误输出中,因此在本地计算机上就可以看到远程计算机上命令执行的情况此外、rsh命令还将本地计算机的中断、退出和终止信号传送到远程计算机,以控制远程计算机上命令的执行当指定的命令在远程计算机上执行完时,rsh命令就正常终止在rsh命令中,如果shell元字符没有用引号括起来,则表示对本地计算机进行操作;如果用引号括起来,则表示对远程计算机进行操作所谓元字符是指对shell而言有特殊意义的字符,如*、?、|、;、~、>、<、&等请对比以下两个命令: rsh host cat remotefile >> localfile表示在远程计算机上用cat命令查看远程计算机上的remotefile文件,并采用附加重定向元字符重定向到本地计算机的localfile文件如果命令中的元字符加上引号,如下: rsh host cat remotefile “>>” otherremotefile表示在远程计算机上用cat命令查看远程计算机上的remotefile文件,并采用附加重定向到远程计算机host的otherremotefile文件。
3.1.2.4 ssh客户端命令ssh (SSH 客户端) 是一个为实现在远程计算机上登录,并在其上执行命令的程序由于rlogin 和rsh命令的安全性问题,它们将被ssh命令代替ssh可以在不安全网络上的两台非信任(不可靠)的计算机之间提供安全的加密通信;X11连接和任意的TCP/IP 端口也能在安全的信道上转发ssh 命令建立连接并在日志文件中记录指定的主机名用户必须采用几种方法中的一种向远程计算机证明自己的身分,这几种方法依赖于所使用的协议版本基本用法:ssh [-l login_name] hostname | user@hostname [command]其中、hostname或user@hostname是你要登录到的远程计算机的名称、IP地址或域名,login_name是登录的注册用户名,而command为要远程计算机shell执行的命令完整用法: ssh [-afgknqstvxACNTX1246] [-b bind_address] [-c cipher_spec] [-e escape_char] [-i identity_file] [-l login_name] [-m mac_spec] [-o option] [-p port] [-F configfile] [-L port:host:hostport] [-R port:host:hostport] [-D port] hostname | user@hostname [command]表3-4列出了ssh命令的选项和说明。
命令命令选项选项选项说选项说明明-a禁止认证代理联接A允许认证代理联接这选项也可以在每台计算机的基本配置文件中进行设定由于警告信息,代理转发应该被允许有屏蔽远程计算机文件许可能力的用户可以通过转发连接访问本地代理攻击者不能从代理那里获得按键信息然而、攻击者可以执行键盘上的操作,使他们能鉴别出装载进代理正在使用者的身份b bind_address对计算机上的多端口或别名地址指定某个端口来传输-c blowfish|3des|des在加密期间内选择所加密的密码形式默认的是3des,3des是安全的,它表示用三种不同的密码键值作三次加密-解密-加密操作选项blowfish是一种快速区块密码编制器,它比3des更安全以及更快速为了与继承自协议1的不支持3des密码实现互用性,选项des仅在ssh客户端中被支持由于des密码本身的弱点,它的使用受到很大的阻碍c cipher_spec对于协议版本2,密码的逗号分隔列表可以按照优先级指定e ch|^ch|none设定转义字符(缺省为“~”)转义字符只有在每行的开始才能被识别如果转义字符后紧跟点字符(“.”),则表示关闭连接;如果转义字符后紧跟的是^Z,则表示暂停连接;如果转义字符后紧跟的是转义字符本身,则表示发送转义字符一次。
如果转义字符设置为“none”,则表示禁止转义f要求ssh 在后台执行、前台可以继续执行命令当ssh在后台运行,假如ssh要询问密码或通行证,而由用户输入时就可以采用这种方式这个参数选项隐含了-n选项在远程计算机上启动X11程序的推荐方式就像执行ssh –f host xterm 命令g允许远程计算机连接到本地计算机的转发端口-i identity_file选择所读取的RSA 或DSA认证识别文件对于协议版本1默认的是$HOME/.ssh/identity文件;对于协议版本2默认的是$HOME/.ssh/id_rsa和$HOME/.ssh/id_dsa文件识别文件也可以在每台计算机的基本配置文件中进行设定可能有多个-i选项和多个指定的识别配置文件I smartcard_device指定使用哪个智能卡设备该参数指定的是ssh将与存储用户私有RSA key的智能卡通信的设备k禁止转发Kerberos 标记和AFS令牌这选项也可以在每台计算机的基本配置文件中进行设定l login_name指定在远程计算机上登录的用户名这选项也可以在每台计算机的基本配置文件中进行设定m mac_spec对于协议版本2,MAC(message authentication code)算法的逗号分隔列表可以按照优先级指定。
n从/dev/null设备重定向到标准输入设备当ssh在后台运行时必须使用该参数选项常见的技巧是使用这个选项在远程机器上执行X11程序例如、执行ssh -n shadows.cs.hut.fi emacs &,将在 shadows.cs.hut.fi 上激活 emace程序,并且X11连接将自动转到加密的信道上ssh程序将被放在后台执行N不执行远程命令这个参数选项仅仅对于转发端口有效(只适用于协议版本2)o option可以被用来给出在配置文件中使用的格式选项这对于指定的、没有单独命令行标志的选项是有用的p port指定连接到远程计算机上的端口号如果不用这个选项,默认的端口号是22这选项也可以在每台计算机的基本配置文件中进行设定q退出模式促使所有的警告和诊断信息被抑制s可用于要求调用远程系统的一个子系统子系统是SSH2协议的一个特色,该协议便于为其他应用程序使用SSH实现安全传输(例如、sftp)子系统被指定作为远程命令t强制分配伪终端这可以用来在远程计算机上执行基于屏幕的程序,例如执行菜单式的服务程序即使ssh没有本地终端,加上-t参数选项也会强制分配终端T禁止分配伪终端vVerbose 模式。
促使ssh打印出有关进程的调试信息这对于调试连接、认证和配置等问题是有帮助的-x禁止X11转发-X允许X11转发这也可以在每台主机的配置文件中指定由于警告信息,应该允许X11转发有屏蔽远程计算机文件许可能力的用户可以通过转发连接访问本地的X11显示那么攻击者可以完成像监控按键类型的活动C要求压缩所有的数据(包括标准输入、标准输出、标准错误信息和转发自X11、TCP/IP连接的数据)压缩算法与gzip压缩算法相同,且压缩“级别”可以通过协议版本1的压缩级选项加以控制如果使用调制解调器或网络速度很慢时,采用压缩是个很好的选择,但如果网络速度很快,采用压缩时速度反而会慢下来F configfile指定一个可选的、每个用户的配置文件如果该配置文件在命令行生效,则系统范围的配置文件(/etc/ssh/ssh_config)将被忽略每个用户缺省的配置文件是$HOME/.ssh/configL port:host:hostport指定本地计算机(客户端)上特定的端口映射到远程特定的主机和端口这通过分配一个套接字用来监听本地计算机的端口,每当与该端口建立的连接都被转到安全的信道上,并且连接到远程计算机的端口。
端口转发也能在配置文件中指定只有超级用户(root)才能在特定端口上转发IPv6地址可以用port/host/hostport格式指定R port:host:hostport指定远程计算机(服务器)上特定的端口映射到本地特定的主机和端口这通过分配一个套接字用来监听远程计算机的端口,每当与该端口建立的连接都被转到安全的信道上,并且连接到本地计算机的端口端口转发也能在配置文件中指定特定端口转发只有在远程计算机上以超级用户登录时才能实现IPv6地址可以用port/host/hostport格式指定D port指定一个本地、“动态的”应用层端口进行数据转发这通过分配一个套接字用来监听本地计算机的端口,每当与该端口建立的连接都被转到安全的信道上,并且由应用层协议测定远程计算机的连接来自哪里当前支持SOCKS4 协议, 并且ssh 作为SOCKS4 服务器只有超级用户(root)才能在特定端口上转发动态端口转发也能在配置文件中指定1强制 ssh 使用协议版本 12强制 ssh 使用协议版本 24强制 ssh 使用 IPv4 地址6强制 ssh 使用 IPv6 地址3.2 管理用户账户 每一个登录Linux系统的用户在系统中都应该有对应的注册账户,这些账户记录了用户的信息,如用户名、登录口令、用户目录所在的位置、所用的shell、建立时间、权限等信息。
用户账户管理包括:添加用户、设置口令、删除用户、修改用户属性和权限等因此、账户管理是系统管理员重要的日常工作之一3.2.1 添加用户超级用户的账户在Linux系统安装时已经创建了,但超级用户的权限太大不适合给普通用户使用,否则会对Linux的系统安全造成威胁;因此,所有要使用Linux操作系统所管理资源的普通用户都要向超级用户或拥有超级用户权限的系统管理员申请一个用户账户,以便登录系统这对于超级用户或系统管理员而言就是添加用户添加用户的方式既可以在字符终端下,也可以在图形界面下本节先介绍字符终端下的添加用户方法,这种方式也有多种方法,如使用终端命令、修改配置文件、编写shell脚本程序等3.2.1.1 终端命令添加用户添加用户最常用的命令就是useradd 命令,该命令的参数和选项很多;早期的版本中该命令建立的用户账户没有设置用户的口令,必须在账户建好后再用passwd命令设置口令,但在Red Hat Linux9.0中对该命令做了修改,增加了-p passwd参数,无论是否使用-p参数系统都默认调用crypt函数自动生成一个随机的初始口令,锁住该账户以禁止用户访问当然、超级用户或系统管理员也可以用该参数取消初始口令,把设置口令的工作由新用户自己来完成。
使用useradd命令所建立的用户账户信息实际上保存在/etc/passwd文本文件中,而加密的用户账户信息则保存在/etc/shadow文件中基本用法: useradd [-d home_dir ] [-s shell ] 用户名该命令中用户名参数是必需的,-d home_dir选项和-s shell选项是可选的;如果不使用可选项,则系统自动用默认值默认的用户工作主目录是/home/用户名,即Linux系统会自动在/home目录下创建一个以用户名命名的目录作为用户的工作主目录,并向该目录复制.bash、.logout、.bash、.profile、.bashrc、.gtkrc文件和.kde目录;系统默认用户使用的shell是bash例如、如下的命令将添加一个名为zxj的新用户: #useradd zxj该用户的工作主目录为默认的目录,使用的shell也是默认的;如果用户不想要默认的设置,则必须在命令中明确指定-d和-s参数完整用法:useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,...]] [-m [-k skeleton_dir] | -M] [-n] [-o][-p passwd] [-r] [-s shell] [-u uid] login_name或 useradd -D [-g default_group] [-b default_home] [-e default_expire_date] [-f default_inactive] [-s default_shell]当使用中不带-D命令选项时,useradd命令用命令行中指定的值和系统默认的值来建立一个用户账户。
该账户信息会添加到系统相应的文件中,如/etc/passwd、/etc/shadow文件;系统会建立用户工作目录,并复制初始化配置文件到该目录除非在命令行中使用-n选项,否则系统将为每个用户建立一个组群并加入到系统中这种用法系统不会显示默认的参数和选项内容当使用中带-D命令选项时,要么显示当前系统默认的参数选项内容,要么通过命令行中设定的-g、-b、-e、-f、-s选项的内容来修改系统默认的选项内容换句话说、这种用法只是显示或修改系统默认的参数和选项,它并不能真的添加用户例如、执行以下命令#useradd –D则可能显示:GROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/bashSKEL=/etc/skel思考:如果执行useradd –D –g 200 –s /bin/csh命令后,再次执行useradd –D将显示什么?表3-5列出了useradd命令的选项和说明命令命令选项选项选项说选项说明明-c 备注添加备注文字,并保存在passwd文件的备注栏中d 工作目录指定用户登录系统后所使用的工作主目录e 有效期限指定用户账户的有效期限。
有效期限的格式一般是年/月/日,但是如果用月/日/年或日/月/年,系统也能自动识别f 缓冲天数指定在口令过期后多少天关闭该账户g 用户组群指定用户所属的组群,组群名必须存在如果没有指定该参数,则系统默认采用用户名作为组群名G用户组群指定用户所属的附加组群m自动建立用户登录的工作目录k skeleton_dir指定用户的缺省配置文件所在的目录如果使用-k选项则从-k选项指定的目录中复制文件和目录到用户的工作目录,否则、从/etc/skel目录中复制文件与目录k选项仅与-m选项一起使用M不要自动建立用户登录的工作目录n取消建立以用户名为名称的组群o允许用UID副本建立用户账户p 口令如果用户账户不设置初始口令,则用-p “” 即可取消口令;否则系统自动生成一个随机的初始口令,锁住该账户r建立的是系统账户这意味着该用户ID比系统在/etc/login.defs文件中预设的UID_MIN(系统预设为500)值要低,且该用户账户口令没有期限;也不会在/home目录下建立该用户工作目录如果要为一个系统用户账户建立工作目录,则必须指定-m参数选项r参数选项由Red Hat添加s shell指定用户登录后所使用的shell。
使用中要指定shell的绝对路径名,例如、/bin/cshu 用户ID指定用户ID用户ID的数值是唯一的,除非使用了-o参数选项另外、该值也是非负的一般指定的用户ID值应大于499,因为数值0~499保留给系统账户使用如果不用-u参数选项,则对新增加的用户ID,系统会自动从UID_MIN的值、且大于其他任何已经存在的UID值开始递增D改变预设值预设值选项如下:-g 组群 指定用户预设所属的组群b 用户目录 在指定的用户目录下建立所有用户的登录工作目录系统默认的预设值为 /homee 有效期限 指定预设的账户有效期限f 缓冲天数 指定预设在口令过期后多少天关闭该账户s shell 指定使用预设的shell添加用户另一个常用的命令就是adduser 命令在其他版本的Linux系统中,该命令是一个脚本程序,采用友好的交互方式,只要输入adduser回车、按系统提示信息的要求输入即可使用者可以无需记忆复杂、繁多的参数选项,而是让使用者回答一系列的问题来设置新用户的各项信息,包括用户的密码等,使用较为方便但在 Red Hat Linux 中,adduser命令则是useradd命令的符号连接,两者实际上是同一个命令;如果在/usr/sbin目录下执行ls –l adduser命令,则可以看到它是连接到useradd命令。
3.2.1.2 修改文件添加用户用 useradd 命令添加用户,实际上就是向/etc/passwd、/etc/shadow和/etc/group文件中写入信息因此、该方法就是利用任意一个文本编辑器直接打开passwd等文件(在 /etc 目录下)修改,passwd文件的每一行有7个域、且由冒号“:”分隔,每行就是一个用户的账户信息若要添加用户,只要在文件中写入相应的条目但是这种方法不会自动创建用户工作目录、不会自动修改shadow和group文件,所以超级用户或系统管理员一定要记住为新用户创建相应的工作目录,并把一些必要的用户配置文件复制到该用户目录下;还要按规则修改shadow和group文件采用这种方法(包括后面将要介绍的通过修改文件删除用户、修改属性)时,要求系统管理员必须对Linux系统非常熟悉,否则很容易漏掉一些操作,造成用户账户中数据的丢失或者无法正常使用因此、建议初学者要慎重采用该方法有关group文件的说明参见3.3节passwd 文件的格式: Login name:passwd:user ID:group ID:user full name:home directory:login shell每个域的具体含义如下:Login name:用户向系统登录时输入的用户名。
该用户名的命名规则是:只能字母、数字和下划线组成,而且只能以字母开始,虽然以下划线开始也能创建用户账户,但系统不允许登录;用户名的长度不超过32个字符,否则提示为无效的用户名;同一系统中用户名必须是唯一的passwd:为了用户账户的安全,Linux系统对用户的口令和其他信息做了加密处理,并保存在/etc/shadow文件中;因此在passwd文件的passwd域不会明文显示口令,只是以字符“x”表示该用户存在登录口令;如果用户账户在创建时没有口令,则该域为空user ID:是系统内部识别用户的标识,Linux把用户分为系统用户和普通用户,一般系统用户由系统进程、服务守护进程和超级用户等组成,分配给它们的用户ID一般在0~99之间,普通用户的ID默认从500开始递增、最大可以到60000除非在用useradd命令添加用户时使用了-r参数选项,否则添加的都是普通用户;如果使用了-o参数选项,则用户的ID并非是唯一的,可能几个用户有相同的用户ID,但系统把它们看成是同一个用户User ID默认值的设置在/etc目录下的login.defs文件中group ID:用户所属组群的标识,其含义与用户ID类似;用户组ID的默认值也是从500~60000。
Group ID默认值的设置在/etc目录下的login.defs文件中user full name:用户全名该域实际上是对登录用户名的注释,该域的内容会被加到电子邮件地址的前面例如、任何从该用户账户发送的电子邮件将在对方显示: “user full name”home directory:该域是创建用户账户时设定的用户工作目录,用户在登录系统时自动进入该目录,用户建立的文件一般默认保存在该目录下login shell:该域是创建用户账户时设定用户所使用的shell所谓shell就是用户与操作系统内核之间的接口,是系统命令的解释程序在Linux系统中有多种shell可供用户选择,例如,bash(GNU Bourne-Again Shell)、sh(Bourne Shell)、csh(C Shell)、ksh(Korn Shell)等等,但系统默认的shell是bash虽然各种shell的基本功能相同,但有些命令只能在特定的shell下执行shadow文件的格式与passwd文件的格式是一样的,只不过除了用户名域没有加密外其他各个域都是加密保存的为了更好地理解passwd和shadow文件的作用,学会如何通过修改配置文件添加用户;以下给出一个具体的passwd和shadow文件作为对比示例。
passwd示例文件: root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown...zxj:x:500:500:zxj:/home/zxj:/bin/bashzx:x:501:501:zx:/home/zx:/bin/bashshadow示例文件:root:$1$cHa/5oEc$/yPWnS1ra4LuKyUMPQuTP1:13484:0:99999:7:::bin:*:13484:0:99999:7:::daemon:*:13484:0:99999:7:::adm:*:13484:0:99999:7:::lp:*:13484:0:99999:7:::sync:*:13484:0:99999:7:::shutdown:*:13484:0:99999:7:::...zxj:$1$AipulblD$tgWgt13zBDMMXjUw1pQwB1:13484:0:99999:7:::zx:$1$7JbYNEAF$mp7Cq8Afc3RBqHb0LFwNz1:13553:0:99999:7:::从passwd和shadow示例文件可以看到:文件的每行有7个域,每个域之间用“:”分隔;每行就是一个完整用户账户信息;前面各行为系统用户、超级用户属于系统用户,它的用户ID和组ID都是0,超级用户的工作目录是/root。
最后两行为添加的普通用户本例省略了中间其他系统用户各行对比这两个文件思考它们不同在哪里?理解了这两个文件的格式及各个域的含义,通过修改它们来添加用户就非常容易首先,手工添加时只要按规定的格式(各个域的顺序、分隔符)、以行为单位输入并保存即可,口令域可以不填、账户启用时由系统管理员或用户自己用passwd命令设置;用户ID和组ID只要按当前普通用户的UID和GID最高号数递增;另外,要创建用户工作目录、且目录名要与登录用户名相同,路径一般在/home目录下;shell可以根据需要选择,一般用/bin/bash即可其次,在/etc/shadow文件中添加login_name:::::: 这一行最后,还要在/etc/group文件中添加该用户组对应的行3.2.2 设置口令使用useradd命令添加用户时,如果使用-p “”参数选项,则还未设置口令,因此、为了安全,该账户在使用前还要设置口令如果使用非-p “”参数选项,则系统自动生成的口令只是暂时禁止使用该账户,必需重新设置口令后普通用户才能使用该账户设置口令既可以在字符终端下完成,也可以在图形界面下完成3.2.2.1 口令设置规则口令设置的好与坏,直接关系到用户账户是否容易被入侵、用户工作目录的资料是否安全,如果是超级用户,则还关系到整个系统的安全。
因此、设置口令是一项非常重要的工作要设置一个好的口令,必须要注意:口令不要用:口令不要用:用户名字或宠物名 …容易与用户相关联的任何东西,如生日、住址等字典中的单词上面任何一个的倒序与用户有关联的东西或它的倒序容易被猜中;字典中的单词或其倒序易遭暴力破解口令要:口令要:有足够长度,每增长一位、被破解的可能性会降低几个数量级用混有数字、特定字符的组合用一些对自己容易记住,但是对别人又难以猜到的数字、字符组合用输入较快的数字、特定字符的组合不要记录下密码经常改变密码3.2.2.2 口令设置命令设置口令的命令是passwd,如果要用该命令为其他用户设置口令,则只能由超级用户或有超级用户权限的系统管理员才能完成;如果是普通用户会受到权限的限制则只能改变该用户自己的口令基本用法:passwd [user_name]基本用法中的用户名如果省略,则设置的是当前已经登录用户的口令;如果设置的是新添加的用户,则必需指定该用户的用户名例如、为新添加的用户x10设置口令:[root@localhost /]# useradd x10添加新用户账户[root@localhost /]# passwd x10设置新口令Changing password for user x10.系统显示为x10用户改变口令信息New password:提示输入新口令Retype new password:提示确认新口令passwd: all authentication tokens updated successfully.修改成功[root@localhost /]#为新用户设置口令与为老用户改变口令在用法上没有什么的差别,只是系统显示的信息不同而已;例如、改变口令时的提示信息是要求输入当前的口令。
在按提示要求输入口令时,如果口令太简单、例如只有数字或字母;或者口令长度太短、例如长度少于6个字符,则Linux系统为了账户安全都会拒绝接受并要求重新输入注意:如果执行过pwunconv命令,则为新用户账户设置口令时系统会有错误提示信息,一定要再执行pwconv命令后才能设置;这种情况下用编辑器打开/etc/shadow文件时看不到任何信息pwconv命令是开启用户的投影口令;pwunconv命令是关闭用户的投影口令完整用法:passwd [-k] [-l] [-u [-f]] [-d] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [username]其中、用户名参数的规则与该命令的基本用法相同;其他为命令选项表3-6列出了passwd命令的选项和说明命令命令选项选项选项说选项说明明-k采用该选项,则设置成只有在口令过期失效后才能改变l采用该选项可以锁住账户passwd命令会在加密过的密码字符串前加上“!”字符(在/etc/shadow文件中),让该账户的口令失效而无法登录系统。
这个参数选项只有超级用户或有超级用户权限的系统管理员才能使用u采用该选项可以解开已被锁住的账户passwd命令会把密码字符串前的“!”字符删除并恢复该账户口令,使该账户用户可以登录系统这个参数选项只有超级用户或有超级用户权限的系统管理员才能使用f强制执行解锁操作对于原来有口令的账户,如果采用-l选项加锁、则采用-u选项解锁即可对于原来没有口令的账户,如果采用-l选项加锁、则必须采用-uf选项配合来解锁d无论口令是否加锁,都可以删除口令这个参数选项只有超级用户或有超级用户权限的系统管理员才能使用n mindays如果用户账户支持口令生存期限,则该选项将以天数为单位设置最小口令生存期限这个参数选项只有超级用户或有超级用户权限的系统管理员才能使用x maxdays如果用户账户支持口令生存期限,则该选项将以天数为单位设置最大口令生存期限这个参数选项只有超级用户或有超级用户权限的系统管理员才能使用w warndays如果用户账户支持口令生存期限,则该选项将预先设置口令过期前警告的天数这个参数选项只有超级用户或有超级用户权限的系统管理员才能使用i inactivedays 如果用户账户支持口令生存期限,则该选项将设置口令过期后多少天关闭该账户。
这个参数选项只有超级用户或有超级用户权限的系统管理员才能使用S列出口令的相关信息,如是否有口令、口令是否被锁等这个参数选项只有超级用户或有超级用户权限的系统管理员才能使用3.2.2.3 应用举例参考示例1:某用户的登录名为x10,由于忘记了口令请求系统管理员帮助解决方法之一:系统管理员以超级用户身份登录系统,执行:#passwd –d x10#su x10再由该用户自己执行passwd命令,重新设置账户口令解决方法之二:系统管理员以超级用户身份登录系统,执行:#vi /etc/passwd找到该用户在passwd文件中的记录行,删除口令域中的“x”标记并保存执行:#su x10再由该用户自己执行passwd命令,重新设置账户口令参考示例2:某用户的登录名为x11,由于出差暂时离开请求系统管理员锁住账户解决方法:系统管理员以超级用户身份登录系统,执行:#passwd –l x11#exit待该用户出差返回后由系统管理员解锁,执行:#passwd –u x113.2.3 成批添加用户作为系统管理员经常会遇到这样的问题,就是有连续、成批的用户要在系统中建立用户账户,例如、学校计算机实验室某个学期有某年级某班的几十名学生要通过网络远程登录到学校Lniux服务器进行shell编程实验。
在这种情况下,如果采用useradd命令在服务器上添加学生账户,则只能一个一个地添加,不仅速度慢而且还容易出错在Red Hat Linux9.0版本中提供了一个新的添加用户的命令newusers,利用它就可以实现快速、便捷地成批添加用户当然、也可以编写shell脚本程序来实现,这将在第八章shell编程中介绍3.2.3.1 newuser命令这个newusers 命令从一个文本文件中读取用户名和明文口令对,并用这些信息去更新若干已存在的用户组群或者去建立一些新的用户该文本文件的每一行与标准的口令文件的每一行有相同的格式,但有以下例外pw_passwd 加密后的口令域,该域将被加密并用作加密口令的新值 pw_age 代理信息域,如果用户已经存在,该域将会忽略影子口令pw_gid 组群ID域,该域可以是现存组的名字,在这种情况下指定的用户将被添加为一个成员如果给出一个不存在号数的组,则使用该号的新组将被建立pw_dir 工作目录域,该域将作为一个目录实体检查、如果它不存在,则建立一个同名的新目录该目录的所有权将由建立与更新它的用户设置要注意的是newusers命令所读取的文本文件必须妥善地保存,因为它包含有未加密的口令信息。
命令用法:newusers [new_users]参数new_users是可选的、如果指定,则它是一个与passwd口令文件格式相同的文本文件,并由newusers命令读取它;如果不指定,则系统从标准输入设备上接受输入,输入的格式也必须按照passwd文件的格式,输入完成后以Ctrl+D结束返回系统提示符在采用以下passwd文件格式时:Login name:passwd:user ID:group ID:user full name:home directory:login shell要特别注意passwd域,如果指定该域,则它是以明文形式存在(在所读取的文本文件中或终端输入时)的口令;如果不指定该域,则新建立的用户账户口令是系统随机自动生成的,必须由超级用户或系统管理员删除口令或重新设置口令,这可以用下一小节将要介绍的chpasswd命令进行口令的成批更新3.2.3.2 应用示例问题提出:要在学校计算机实验室的Linux服务器上建立1个班(50人)的学生账户,为每个学生分配登录用户名、口令、UID、GID、用户工作目录和登录所用的shell问题分析:显然,对于这个问题最好的解决方法就是成批地创建用户账户。
解决方法:首先,编辑一个passwd文件格式的、包含所有要创建用户账户信息的文本文件;把该文件命名为n_user.txt保存参考文件如下:jb040101:stu0401:701:701::/home/jb040101:/bin/bashjb040102:stu0401:702:702::/home/jb040102:/bin/bashjb040103:stu0401:703:703::/home/jb040103:/bin/bash...jb0401049:stu0401:749:749::/home/jb040149:/bin/bashjb0401050:stu0401:750:750::/home/jb040150:/bin/bash最后,执行命令:#newusers n_user.txt一次性完成了50个学生账户的建立,这里n_user.txt文件中的口令stu0401就是以后学生登录系统的初始口令,登录后自己可以再修改;虽然这里是以明文形式存在,但在Linux的/etc/passwd和/etc/shadow文件中都已经是加密的3.2.4 成批修改口令在成批地添加了用户后,可能还要成批地修改用户账户的口令。
例如、在用newuser命令和用户信息文本文件添加用户时没有指定口令域,则必须重新设置口令用户才能登录系统在Red Hat Linux9.0版本中提供了一个新的修改用户口令的命令chpasswd,利用它就可以实现快速、便捷地成批修改用户口令3.2.4.1 chpasswd命令这个chpasswd 命令从标准输入设备上读取由用户名和口令对组成的文件,并用这些信息去更新已存在的用户组群该文件中每行的格式为:user_name:password要注意的是chpasswd命令所读取的文件必须妥善地保存,因为它包含有未加密的口令信息另外、指定的用户必需存在命令用法:chpasswd [-e]参数选项-e是可选的,如果不指定该参数选项,则改变后的口令就是chpasswd命令所读取文件中password域的明文信息,但在Linux系统中的/etc/passwd和/etc/shadow文件中显示的是已经加密的口令;如果指定该参数选项,则改变后的口令就是chpasswd命令所读取文件中password域明文信息的加密形式,但在Linux系统中的/etc/shadow文件中显示的是原口令的明文信息,由于加密是系统随机生成口令,所以一般不用带-e参数选项。
由于该命令是从标准输入设备上读取文件,所以可以采用从键盘输入或者采用文件输入重定向如果用键盘输入,则输入的格式也必须按照“user_name:password”的格式,输入完成后以Ctrl+D结束返回系统提示符3.2.4.2 应用示例问题提出:更改上一小节应用示例中50名学生账户的口令问题分析:显然,对于这个问题最好的解决方法就是成批地修改用户账户口令解决方法:首先,编辑一个文本文件,它只要包含所有要修改口令的用户的用户名和新口令,每行对应一个用户;把该文件命名为n_uspw.txt保存参考文件如下:jb040101:stujsjjb040102:stujsjjb040103:stujsj...jb0401049:stujsjjb0401050:stujsj最后,执行命令:#chpasswd < n_uspw.txt一次性完成了50个学生账户口令的修改,这里n_uspw.txt文件中的口令stujsj就是以后学生登录系统的初始口令,登录后自己可以再修改注意、如果采用-e参数选项,则学生就无法用stujsj口令登录系统了,因为系统是把stujsj加密后作为口令3.2.5 删除用户如果某个用户已永久地从系统中撤离,则为了系统的安全系统管理员要及时删除该用户账户和相关的目录与文件;如果只是暂时撤离,则只要用passwd –l login_name命令把该用户账户锁住或者在passwd 文件的口令域x字符前加上个“*”或“!”即可。
3.2.5.1 终端命令删除删除用户账户使用userdel 命令,该命令包含两部分的操作第一、删除/etc/passwd文件中的用户账户信息;第二、删除对应于该账户的系统配置文件和该账户的工作目录这两部分可以同时完成也可以分开完成,只是取决于是否使用命令的参数选项命令用法: userdel [-r] login_name参数说明:login_name是用户登录系统的用户名 命令选项-r表示递归删除该用户的工作目录及该目录下的所有子目录和文件如果选项-r不指定,则只是删除了该用户的账户信息,而保留该用户的工作目录及该工作目录下的所有子目录和文件;除非该用户的工作目录要保留给其他用户使用,否则最好不要这样如果某个用户当前已经登录系统,则不允许用userdel命令删除这个用户的账户3.2.5.2 修改文件删除由于用户的账户信息是记录在/etc/passwd和/etc/shadow文件中的,所以直接删除这些文件中该用户的账户信息行也可以达到删除用户账户的目的,如果再手动删除用户工作目录,则就完整地删除了该用户首先,删除 /etc/passwd和/etc/shadow文件中该用户对应的行。
其次,用rm –fr命令强制递归地删除该用户的工作目录及目录下的所有子目录、文件最后,还要在/etc/group文件中删除该用户组对应的行3.2.6 修改用户属性从添加、删除用户命令可以看到,实际上添加或删除用户其中一项就是添加或删除用户的账户信息,而这些账户信息就是用户的属性用户有时会提出修改登录的用户名、加入别的组群或使用其他的shell等要求,作为系统管理员要能根据用户合理的要求作出必要的修改,以使用户能方便、有效地使用系统修改用户属性可以采用终端命令方式也可以采用修改配置文件的方式3.2.6.1 终端命令修改修改用户属性的终端命令是usermod,该命令的用法与useradd命令很类似,参数选项也有很多是相同的这里仅就与useradd命令不同的参数部分进行说明其他的参数选项请参考useradd命令的参数选项说明命令用法:usermod [-c comment] [-d home_dir [-m]] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group [,...]] [-l login_name] [-p passwd] [-s shell] [-u uid [-o]] [-L|-U] login该命令除了能修改用户属性外,还可以对用户账户口令进行加/解锁处理。
如果某个用户当前已经登录系统,则不允许用usermod命令修改这个用户的属性表3-7列出了usermod命令的部分选项和说明,其他参见表3-5命令命令选项选项选项说选项说明明-d home_dir [-m]指定用户新的工作目录如果采用-m参数选项,则用户当前工作目录中的内容将移到新的工作目录;若新目录不存在,则自动建立它l login_name修改用户登录的用户名L锁定用户账户口令,使口令无效U解除用户账户口令锁定,使口令生效应用示例1:将用户登录名tc01改为ta01,用户工作目录改为/home/ta01,所属组群改为root执行命令:#usermod –d /home/ta01 –m –g root –l ta01 tc01注意:如果没有-m参数,则不会在/home目录下建立ta01用户工作目录,登录系统时会提示没有工作目录!应用示例2:使ta01用户的口令无效执行命令:#usermod –L ta01这个命令执行的效果与执行passwd –l ta01命令的效果一样3.2.6.2 修改passwd文件与修改文件添加、删除用户的原理一样,所以直接修改/etc/passwd和/etc/shadow文件中该用户的账户信息行也可以达到修改用户属性目的,如果修改了用户登录名,则在shadow文件中所对应的用户名一定要修改。
如果再手动更名用户工作目录,则就完整地修改了该用户的属性首先,修改/etc/passwd和/etc/shadow文件中该用户属性对应的域其次,用mv 命令更名该用户的工作目录最后,还要在/etc/group文件中修改该用户组对应的行3.3 管理组群账户 Linux系统根据各个用户所享有文件权限的不同而分为不同的用户组群一个用户至少属于一个用户组群,该组群就是用户的基本组群;但同时还可以属于其他很多的附加组群用户在系统中某一时刻所属组群为当前组群,也可以使用 newgrp 命令来切换所属组群Linux系统中的每个目录和文件都有所有者权限、组权限和其他人权限,这个权限就是读、写和执行例如执行以下命令:#ls –l /etc/passwd显示: -rw-r--r-- 1 root root 2601 2月 9 22:24 /etc/passwd表示passwd文件对于文件所有者为读、写权限,对同组群用户和其他人为只读权限如果某个用户不是某个文件的所有者,但只要他属于该文件所定义的组群,那么对于该文件他就享有组群的权限系统管理员可以通过文件的组群权限来对用户的权限加以控制。
系统管理员管理组群账户的主要工作就是添加用户组群、删除用户组群、修改用户组群属性和权限等3.3.1 添加用户组群如果若干用户具有相同或相近的特性,则可以为他们建立一个新的组群建立组群可以用终端命令方式和修改配置文件方式3.3.1.1 终端命令添加添加用户组群的终端命令是groupadd,该命令用命令行中指定的参数选项和来自系统的默认选项建立一个新的用户组群账户新的组群账户信息将在必要的系统文件如/etc/group、/etc/passwd、/etc/shadow文件中记录命令用法: groupadd [-g gid [-o]] [–r] [-f] group参数group为新添加的组群名称,是必需的,其他的是命令选项命令选项及说明:命令命令选项选项选项说选项说明明-g gid设置新组群的标识号如果不指定该参数选项,则系统自动从GID_MIN的值(500)、且大于其他任何已经存在的GID值开始递增编号编号0~499保留给系统各项服务的帐号使用o重复使用组群的标识号在系统中每个组群的标识号应该是唯一的,除非使用了-o参数选项该选项仅与-g选项配合,可强制系统使用已经存在的组群标识号。
r建立系统组群除非-g选项有指定,否则使用的组群标识号低于499、且比其他任何已经存在的系统组群标识号大1f强制建立已存在的组群如果指定的组群名已经存在,则groupadd命令回返回错误信息使用本参数选项可强制系统接受已存在的组群名3.3.1.2 修改文件添加用 groupadd 命令,实际上就是在/etc/group和/etc/gshadow文件中写入信息因此,该方法就是利用文本编辑器直接打开group组文件和gshadow组影子口令文件,这些文件的每一行有由“:”分隔的4个域,每行就是一个用户组的账户信息若要添加用户组,只要在文件中写入相应的条目group 文件的格式: group name:passwd:group ID:user list每个域的含义如下:group name:用户组群名称用户组群的命名规则与用户名命名的规则类似同一系统中用户组群名必须是唯一的,除非在groupadd命令中使用了-f参数选项passwd:用户组群口令为了用户组群账户的安全,Linux系统对用户组群的口令做了加密处理,并保存在/etc/gshadow文件中;因此在group文件的passwd域不会明文显示口令,只是以字符“x”表示该用户组群存在口令;如果非本组用户要进入时(权限允许的条件下)需要输入口令。
group ID:即GID,用户所属组群的标识,其含义与用户ID类似;用于系统识别一个用户组群普通用户组ID的默认值也是从500~60000Group ID默认值的设置在/etc目录下的login.defs文件中user list:以该组群为附加组群的用户该域显示系统中有哪些用户组群把该组群作为附加组群为了更好地理解group和gshadow文件的作用,学会如何通过修改配置文件添加用户组群;以下给出具体的group和gshadow文件作为对比示例group示例文件 gshadow示例文件root:x:0:root root:!!::rootbin:x:1:root,bin,daemon bin:::root,bin,daemondaemon:x:2:root,bin,daemon daemon:::root,bin,daemonsys:x:3:root,bin,adm sys:::root,bin,admadm:x:4:root,adm,daemon adm:::root,adm,daemon. 。
zxj:x:500:zxj zxj:!::zxjzx:x:501: zx:!::pppusers:x:230: pppusers:!::popusers:x:231: popusers:!::slipusers:x:232: slipusers:!::每行有4个域,每行为1个用户组群账户;前面各行为系统用户组群,倒数第4、5行为添加的用户组群,最后3行为特殊用户组群账户本例省略了中间各行首先,手工添加时只要按规定的格式(各个域的顺序、分隔符)、以行为单位输入并保存即可,口令域可以不填、账户启用时由系统管理员用passwd命令设置;GID只要按当前普通用户的GID最高号数递增最后,在/etc/gshadow文件中添加group name::: 这一行。
3.3.1.3 应用示例问题提出:两个用户stu1、stu2共同开发软件,他们相互之间需要共享资源、复制和执行程序问题分析:由于这两个用户具有的共同特性,他们可以设置成同组群的用户、有同样的组群权限;但组群权限不能有写的权限,而只能有读和执行的权限解决方法:首先、系统管理员为他们添加一个组群,执行:#groupadd stu第二、如果这两个还未在系统注册,则系统管理员添加用户stu1、stu2,并设置初始口令;如果已经注册则只要修改他们的组群属性假设尚未注册,则执行:#useradd stu1 –g stu1#useradd stu2 –g stu2#passwd stu1 口令设置过程略#passwd stu2第三、系统管理员为他们修改工作目录的组群权限,执行chmod 750 /home/stu1#chmod 750 /home/stu2最后、通知用户登录系统后自己修改初始口令现在stu1和stu2两个用户可以相互访问各自的工作目录,可以打开文件读、执行程序,但不能改写3.3.2 设置用户组群口令组群口令的设置使用专门的gpasswd命令,该命令用于管理/etc/group文件;如果命令编译时带有定义的SHADOWGRP参数,则也管理/etc/gshadow文件。
每个组群由组群管理员、组群成员和组群口令组成命令用法:gpasswd group gpasswd -a user group gpasswd -d user group gpasswd -R group gpasswd -r group gpasswd [-A user,...] [-M user,...] group用法说明:系统管理员可以使用-A参数选项定义组群管理员;使用-M参数选项定义组群成员系统管理员有组群管理员和组群成员所有的权利组群管理员可以分别使用-a和-d参数选项分别添加和删除组群的用户系统或组群管理员可以用-r参数选项删除组群口令仅当未设置组群口令时,组群成员才能使用newgrp命令加入到该组群中参数选项-R禁止通过newgrp命令访问组群组群管理员执行gpasswd group_name命令时,会提示输入组群口令如果设置有组群口令,则组群成员(要执行gpasswd –a user group命令后)不需要口令仍然能使用newgrp命令加入组群,而非组群成员则必须输入口令注意:如果执行过grpunconv命令,则在这种情况下用编辑器打开/etc/gshadow文件时看不到任何信息。
grpunconv命令是关闭用户组群的投影口令;与之相对应的grpconv命令是开启用户组群的投影口令3.3.3 删除用户组群 如果某个用户组群已永久地从系统中撤离,为了系统的安全系统管理员应该及时删除该用户组群删除用户组群既可以采用终端命令方式也可以采用修改配置文件方式3.3.3.1 终端命令删除删除用户组群采用groupdel命令,该命令会修改系统的用户组群账户文件,删除指定组群所有的条目命令用法: groupdel group_name其中、参数group_name(组群名)必需存在系统管理员在删除指定的组群后必须手工检查所有的文件系统以确定没有与指定组群一样的组群ID文件残留使用该命令时一定要注意:不能删除任何原来存在用户的组群删除组群前必须先删除组群内的用户3.3.3.2 修改文件删除由于用户组群的账户信息是记录在/etc/group和/etc/gshadow文件中的,所以直接删除这些文件中该用户组群的账户信息行也可以达到删除用户组群账户的目的,但要确认该组群中已经没有用户存在首先,删除 /etc/group文件中该用户对应的行最后,删除 /etc/gshadow文件中该用户对应的行。
3.3.4 修改用户组群属性如果对已经建立的组群名称、组群ID等不满意,则可以再进行修改同样、修改组群属性既可以采用终端命令方式也可以采用修改配置文件方式3.3.4.1 终端命令修改修改用户组群属性用 groupmod 命令,该命令会按照命令行参数选项指定的要求修改系统的用户组群账户文件命令用法:groupmod [-g gid [-o]] [-n new_group_name] old_group_name参数old_group_name是当前正在使用的(旧的)组群名称,该参数为必选;参数new_group_name是修改后新的组群名称,该参数是可选的;其他的是命令选项命令选项及说明:命令命令选项选项选项说选项说明明-g gid设置新组群的标识号规则与添加组群的表3-8中该项一样o重复使用组群的标识号规则与添加组群的表3-8中该项一样n new_group_name设置新组群的名称每个组群的名称在系统中都应该是唯一的,如果给出的新组群名称已经存在,则groupmod命令提示:“新组群名称不唯一”的错误信息参考示例:把组群名称stu更名为jsjstu,并将组群标识号改成555执行:#groupmod –g 555 –n jsjstu stu3.3.4.2 修改配置文件如果要修改组群名、组群ID,则用文本编辑器打开/etc/group和/etc/gshadow文件,编辑该组群所对应行中的组群域和组群ID域即可。
如果要修改组群口令,由于口令加密后要保存在/etc/gshadow影子文件中,所以、修改口令最好还是用gpasswd命令3.4 图形界面下的账户管理 在Linux系统中,用户账户、组群账户的管理也可以在X Window的图形界面下完成,在图形界面下系统管理员利用图标、菜单、鼠标即可轻松地完成添加、删除用户和用户组群、设置用户和用户组群口令、修改用户和用户组群属性等各项操作;由于图形界面下的各项操作直观、简单和方便,不需要记忆许多命令和命令的参数选项,所以很容易掌握但是在图形界面下命令执行的速度要比字符界面下慢3.4.1 Red Hat用户管理器简介以运行级5启动Linux并登录系统后,在桌面下部的状态栏上用鼠标左键单击“开始”图标,即状态栏上的红帽子,自动打开弹出式菜单、再单击“系统设置”菜单项、又自动打开下一级菜单、选中并左键单击“用户和组群”菜单项;如图3-3所示图3-3用户和组群菜单项这时打开的用户管理器窗口界面如图3-4所示该窗口默认的配置主要有菜单栏、图标工具栏和两个选项卡图3-4用户管理器菜单栏上有“文件”、“首选项”和“帮助”三个下拉菜单在“文件”下拉菜单中包含有“添加用户”、“添加组群”、“属性”、“刷新”、“删除”和“退出”菜单项,目的是利用这些菜单项和两个选项卡来完成所有的账户管理。
在“首选项”下拉菜单中只有“过滤系统用户与组群”菜单项,目的是区分哪些是普通用户、哪些是系统用户,一般是对普通用户进行管理,所以默认过滤有效在“帮助”下拉菜单中只有“内容”菜单项,目的是为超级用户和拥有超级用户权限的系统管理员使用用户管理器提供帮助设置图标工具栏是为了可以更加方便、快捷地使用用户管理器,因此在其上放置了“添加用户”、“添加组群”、“属性”、“删除”、“帮助”和“刷新”功能图标,这些图标的功能与“文件”下拉菜单中菜单项的功能是等价的,因此、不用打开菜单就可以使用这些功能两个选项卡分别是“用户”和“组群”,默认情况下显示系统中所有普通用户和组群的属性3.4.2 X Window下的用户管理从图3-4的用户管理器可以看到每个用户的七个基本属性清楚、直观地显示出来,这些属性实际上就是/etc/passwd文件各个域的直接显示3.4.2.1 添加用户打开“文件”下拉菜单、选择“添加用户”菜单项或单击“添加用户”图标,则弹出创建新用户对话框,如图3-5所示图3-5创建新用户对话框要添加用户时,只要按要求输入用户名、全称(可以省略)、口令和确认口令即可输入的用户名,系统会作为默认的用户工作主目录名。
创建主目录、主目录的位置(默认/home)、为该用户创建私人组群和登录shell等选项都已经设定默认值,如果不满意可以自己设置,一般用系统默认值即可如果不手工指定用户ID,则系统从500后开始安排UID编号,500 前的号码系统保留填写完成后单击“确定”按钮就完成了一个用户的添加3.4.2.2 修改口令为已经存在的用户修改口令非常方便,在“用户”选项卡中选中要修改口令的用户,这时“属性”图标从无效的灰色变为有效的黑色,单击“属性”图标(也可用“文件”菜单,后面不再说明),打开用户属性对话框,如图3-6所示该对话框有四个选项卡,如果只是修改口令,则只要在“用户数据”选项卡上的“口令”和“确认口令”输入框中重新输入即可;如果要设置、修改口令过期信息,则使用“口令信息”选项卡进行设置图3-6用户属性3.4.2.3 删除用户若要删除用户,在“用户”选项卡中选中要删除的用户,这时“删除”图标从无效的灰色变为有效的黑色,单击“删除”图标,一般系统会询问是否也要删除用户工作主目录,如果要删除就单击“确定”,否则单击“取消”,系统将保留该用户的工作主目录3.4.2.4 修改用户属性用户属性的修改同样要打开“用户属性”对话框,在“用户数据”选项卡上修改,但“用户数据”选项卡只是用户的部分基本属性,如果要设置账号使用期限或封锁用户账号,则打开“账号信息”选项卡设置账号的过期时间,如果暂时冻结某个用户账户也可在此选择“用户账号已被锁”的多选钮,如图3-7所示;如果要让该用户加入某个组群,则打开“组群”选项卡并利用垂直滚动条选择要加入的组群名称再单击多选框选中,如图3-8所示。
注意:图形方式下用户ID是不能修改的图3-7账号信息图3-8选择组群3.4.3 X Windows 下的组群管理利用“组群”选项卡和图标工具栏上的图标或“文件”菜单即可轻松完成对用户组群的添加、删除和属性的修改,但无法完成组群口令的设置与修改3.4.3.1 添加组群打开“文件”下拉菜单、选择“添加组群”菜单项或单击“添加组群”图标,则弹出创建新组群对话框,如图3-9所示图3-9创建组群从图3-9的用户管理器可以看到每个组群的三个基本属性清楚、直观地显示出来,这些属性实际上就是/etc/group文件这些域的直接显示在“创建新组群”对话框中输入组群名,如果要手工指定组群ID,则选中该选择框指定GID值;否则接受系统分配的GID,同样系统默认从500后开始分配组群号单击“确定”钮,创建新组群完成3.4.3.2 删除组群若要删除组群,首先要确认该组群中已经没有用户存在,接着在“组群”选项卡中选中要删除的组群,这时“删除”图标从无效的灰色变为有效的黑色,单击“删除”图标即可但是如果要删除的组群中还有用户存在,则系统不允许删除该组群,并有错误信息提示3.4.3.3 修改组群属性若要修改组群属性,首先在“组群”选项卡上选中要修改的组群名称,使图标工具栏上的“属性”图标有效,接着单击“属性”图标,打开“组群属性”对话框,如图3-10所示。
在该对话框中有两个选项卡,如果要修改组群名称,则打开“组群数据”选项卡即可输入新的组群名称;如果要在组群中加入新用户,则打开“组群用户”选项卡,并利用垂直滚动条选择要加入的用户名称再单击多选框选中,如图3-10中红色部分所示注意:图形方式下组群ID也是不能修改的图3-10组群属性3.5 用户权限管理Red Hat Linux在7.0以前版本的安装光盘上带有 linuxconf 软件包,该软件包是系统配置与管理的工具软件,当系统安装时会在硬盘上安装该软件,但是由于该软件存在BUG,在8.0以后的版本中为了系统安全并为了简化操作系统而不再有该软件包现在linuconf软件还在发展与完善中,目前的版本号是1.34Linuxconf 是系统工具软件,它既有图形界面,也有字符界面通过它可以方便地完成对Linux 系统的大多数设置,尤其是为系统管理员或其他用户分配权限特别方便新的版本还增加了远程设置功能由于它功能太强大,使用不当极易造成系统崩溃,所以默认只有超级用户才能使用目前要使用该软件可以从网络上下载,一般为Linux 的软件包形式,即为.rpm 文件;下载后执行以下命令安装:rpm –i 软件包名由于是系统工具软件,所以安装时该软件包会在各个系统目录中存放文件,例如,linuxconf的状态信息存放在/var目录、配置信息存放在/etc目录、链接库文件存放在/usr/lib目录、说明文档存放在/usr/share/doc目录、命令程序本身存放在/bin目录,而/sbin目录下存放的是它的链接文件。
由于该软件功能很多,这里只用图例简单介绍用户权限管理的方法,其他内容大家可以自学3.5.1 linuxconf的下载与安装下载linuxconf可以在MS-Windows系统,也可以直接在Linux系统中进行如果在Linux系统中,可以用Mozilla Web或Konqueror Web浏览器下载可以通过http或ftp,图3-11显示的是用Mozilla Web浏览器进行ftp下载FTP下载链接:下载文件:linuxconf-1.34r3-1.i386.rpm或更高版本图3-11linuxconf的ftp下载在如图3-11所示的ftp站点选择要下载的linuxconf软件版本,选中后单击鼠标右键,在弹出式菜单上选择“链接另存为(R)…”菜单项如图3-12所示图3-12链接另存为在打开的“另存为”对话框中选择保存的位置,如图3-13所示图3-13保存linuxconf保存后在“下载管理器”(支持断点续传)管理下开始下载直到完成,如图3-14图3-14下载管理器下载完成后执行安装命令,如图3-15所示图3-15执行安装命令在安装过程的最后要进行系统配置,如修改系统配置文件/etc/shadow等文件的写权限以写入必要的系统配置信息。
如图3-16所示,询问用户是否同意这些修改图3-16linuxconf配置如果同意,则单击“Do it”退出,安装正常完成;否则单击“Do nothing”退出,未修改配置文件,linuxconf可能无法正常使用3.5.2 linuxconf组成简介安装正常完成后在终端字符界面下运行linuxconf,运行后的界面如图3-17所示图3-17linuxconf运行界面从图3-17上可见,它包含“配置(Config)”、“控制(Control)”、“状态(Status)”和“任务(Tasks)”四大类系统设置每个大类下又有许多项,为了对linuxconf的“配置”设置有所了解,以下简单地列出Config类及它下面各项层间的关系Linuxconf软件包Config类层次及内容———————————————————————————————————————Config(配置)Networking(网络)Client tasks(客户端任务)主机名和IP网络设备、DNS、路由与网关、IPX接口设置、远程邮件服务、PPP/SLIP/PLIP等Server tasks(服务器任务) 虚拟主机的IP别名、Apache Web服务器、DNS、Internet服 务、sendmail、NFS、openssh、SMB、FTP等。
Firewalling(防火墙)防火墙缺省配置、输入防火墙、转发防火墙、输出防火墙、防火墙规Misc(杂项)其他主机信息、其他网络信息、主机名搜索路径等 Users(用户)Normal(常规)用户账户、组群定义、改变超级用户口令、设置用户权限等Special accounts(特殊账户)PPP账户、SLIP账户、UUCP账户、POP账户、虚拟POP账户等Email aliases(电子邮件的别名)用户别名、有效域用户别名等Policies(策略)口令与账户策略、有效的用户shell、有效的PPP shell、有效的SLIP shell、PAM配置器等文件系统)Access local drive(访问本地驱动器)Access nfs volume(访问nfs卷)Configure s and partitions(配置交换文件与分区)Chack some (检查文件许可)Miscellaneous(杂项)Amanda configurator(Amanda配置器)Default runlevel(缺省的运行级)Kernel Configuration(内核配置)System logs(系统日志)Peripherals(外设)ISA Plug and Play(ISA即插即用设备)Modem(调制解调器)Printer(打印机)添加/编辑打印机、队列管理、更改缺省的打印机等。
Boot(引导)Default boot mode(缺省的引导模式)Grub一般选项、菜单条目、缺省条目、安装等Lilo配置缺省的LILO、改变缺省的引导、添加新内核到LILO等———————————————————————————————————————有关“控制”、“状态”和“任务”类的内容很多,这里无法一一列出在这章中我们只讨论linuxconf中“配置”类的普通用户的权限配置3.5.3 linuxconf的用户权限设置打开“Config”类菜单下的“Users”菜单,在“Normal”子菜单下可以看到有“用户账户”、“组群定义”、“改变超级用户口令”菜单选项打开各级菜单的方法是用光标健移动到相应的位置,回车即可如图3-18所示这些选项也可以完成前面所说的用户账户和组群账户的管理工作但在这里主要介绍用户权限的设置图3-18linuxconf用户账户选中“User accounts”菜单选项并回车,则打开图3-19所示的用户账户信息对话框图3-19Linuxconf选择配置用户选中你要设置权限的用户并回车打开一个新的对话框,如图3-20所示在这个示例中选择的用户名是zxj通过光标键或翻页键就可以上下移动来选择这些选项进行配置。
图3-20 linuxconf用户信息在图3-20中显示出该用户(zxj)的基本信息在这个用户信息界面上可以配置的有以下这些选项和用户权限:Base info(基本信息)(基本信息) [X] The account is enabled(账户是否可用)Login name(用户登录名) zxj Full name(用户全名) zxj Group(组群名) zxj Supplementary groups(附加组群) Home directory(用户工作主目录) /home/zxj Command interpreter(用户所用shell) /bin/bash User ID(用户ID) 501 Password management(口令管理)(口令管理)Last password change(最后修改时间) 2006/09/11 Must keep # days(有效天数) ( ) Ignored 0 Must change after # days(#天后更换) 99999 Warn # days before expiration(警告天数) ( ) Ignored 7 Account expire after #days(账号过期天数)(o) Ignored __________ Expiration date(yyyy/mm/dd)(账号过期时间) Mail settings(邮件设置)(邮件设置)Redirect messages to(信息重定向到) Email alias(电子邮件的别名) Privileges(特权)(特权)--General system control(一般的系统控制)(一般的系统控制) 禁止 允许 允许/默认May use linuxconf(使用linuxconf) (o) Denied ( ) Granted ( ) Granted/silent May activate config changes(激活配置) (o) Denied ( ) Granted ( ) Granted/silent May shutdown(关闭计算机) (o) Denied ( ) Granted ( ) Granted/silent May switch network mode(更改网络模式) (o) Denied ( ) Granted ( ) Granted/silent May view system logs(查看系统日志) (o) Denied ( ) Granted ( ) Granted/silent SuperUser equivalence(等价超级用户) (o) Denied ( ) Granted ( ) Granted/silent --Services(服务)(服务)Apache administration(Apache管理) (o) Denied ( ) Granted ( ) Granted/silentMail to Fax manager(邮件管理) (o) Denied ( ) Granted ( ) Granted/silentSamba administration(SMB管理) (o) Denied ( ) Granted ( ) Granted/silent--Fetchmail(接收邮件)(接收邮件)Basics(基本的) (o) Denied ( ) Granted ( ) Granted/silentServer(服务器) (o) Denied ( ) Granted ( ) Granted/silentUsers(用户) (o) Denied ( ) Granted ( ) Granted/silentUsers/Fetchmail(用户/接收邮件) (o) Denied ( ) Granted ( ) Granted/silent--Miscellaneous(杂项)(杂项) Message of the day(当天信息) (o) Denied ( ) Granted ( ) Granted/silent--User accounts(特殊用户账户)(特殊用户账户)POP accounts manager(POP账户管理) (o) Denied ( ) Granted ( ) Granted/silentPPP accounts manager(PPP账户管理) (o) Denied ( ) Granted ( ) Granted/silentUUCP manager(UUCP管理) (o) Denied ( ) Granted ( ) Granted/silent--Virtual email domains(有效的(有效的email域)域)Manage all virtual email domains (o) Denied ( ) Granted ( ) Granted/silent 在上面可配置选项和权限说明中可以看到,从“特权”项开始向下都是对选中用户的权限配置。
系统默认对普通用户这些权限都是禁止的(Denied)这些权限中主要有:是否允许该用户使用Linuxconf 软件;是否允许修改、激活Linux配置文件;是否允许关闭计算机;是否允许更改网络模式;是否允许拥有超级用户的同等权限;是否允许查看系统日志;是否允许有与Windows操作系统的计算机联网的权限等等设置用户权限时可以选择的选项有:禁止、允许、允许/默认根据不同用户的需要作出选择后,单击“接受(Accept)”按钮,最后退出linuxconf软件时,如果有询问是否同意修改配置文件,则单击“Do it”按钮即可在这个用户信息界面里还可以设置特殊用户权限,特殊用户有:POP、PPP、UUCP 等;这些特殊用户是系统用来控制一些特殊任务的但同样也有登录名、UID 值和口令,而且也总是属于某个组特殊用户权限设置的选择与方法同前3.5.4权限设置应用说明:在一个操作系统是Linux的计算机系统中,系统管理员可能不只一个人,如果多个系统管理员都具有超级用户的权限、并知道超级用户口令,那么对于计算机系统而言是非常不安全的;况且系统管理员也不是一定要具有超级用户的权限才能管理系统;因此,超级用户要为系统管理员分配一定的权限。
一般可以分配:修改、激活配置文件的权限关闭计算机的权限查看系统日志的权限更改网络模式的权限配置各种服务器的权限接收邮件的权限等3.6 查看登录用户在多用户操作系统中系统管理员为了系统管理的需要和系统安全,需要了解当前有哪些用户登录系统,他(她)们正在做什么;普通用户之间如果要进行即时通信交流,也需要了解对方是否已经登录系统Linux系统提供的查看登录用户的命令有who和w命令;查找并显示指定用户信息的有finger命令3.6.1 who 命令查询目前登录系统的用户信息执行该命令可以显示目前在系统中登录的所有用户名单、各用户使用的终端、登录时间和登录状态等信息Red Hat Linux9.0的who命令与以前版本的who命令有一些差别,增加了部分参数选项命令用法:who [OPTION]... [ FILE | ARG1 ARG2 ]其中,FILE | ARG1 ARG2为参数,OPTION为命令选项,它们都是可选的命令选项及说明:命令命令选项选项选项说选项说明明-a或--all等价于同时使用 -b -d --login -p -r -t -T –u参数选项b或--boot显示最后的系统引导时间。
d或--dead显示休眠的进程H或--heading显示各列的标题信息i或--idel以“小时:分钟”形式显示闲置时间,如果用户在系统上前一分钟内有任何动作,将以“.”表示,如果已经超过24小时没有任何动作,则显示“old”信息该版本的Linux不赞成使用这个参数选项,建议用-u参数选项login显示系统登录的进程l或--lookup通过DNS规范主机名,显示登录用户信息该版本的Linux不赞成使用-l参数选项,建议用--lookup参数选项m只显示当前终端上登录的用户信息与who am i等价p或--process显示由init进程产生的活动进程q或--count显示所有登录用户的名称和登录的用户数r或--runlevel显示当前的系统运行级s或--short以简洁格式显示,即只显示用户登录名、登录终端和时间(缺省模式,即与who命令不带参数相同)t或--time显示最后的系统时钟改变时间T或-w或--mesg--message或--writable显示用户的消息状态标识表示可以用 “write” 命令向其他用户发消息,也可以接收其他用户的消息;“-”表示不允许发送和接收消息;“?”表示无法确定终端设备。
u或--users显示登录的用户信息将取代-i参数选项help显示此命令帮助信息并返回系统提示符--version显示版本信息并返回系统提示符如果参数FILE没有指定,则使用/var/run/utmp文件/var/log/wtmp文件作为FILE参数是公用的如果给出参数ARG1 ARG2,则-m选项作为“am i”或“mom likes”使用参考示例1:显示当前有哪些用户登录 whozxj tty1 Sep 9 13:22 root :0 Sep 9 13:19 root pts/0 Sep 9 13:20 (:0.0) 参考示例2:显示当前是否可以联机收发信息 who –wzxj + tty1 Sep 9 13:22 root ? :0 Sep 9 13:19 root + pts/0 Sep 9 13:20 (:0.0) 3.6.2 w 命令该命令是查询登录用户的详细情况。
它不仅可以显示有哪些用户登录到系统,还可以显示用户正在执行的程序、现在的系统时间、系统已经启动多久、目前共有多少用户、在过去1、5、10分钟内系统的平均负载程度命令用法:w [-husfV] [user]如果单独执行w命令,则显示所有的登录用户;如果指定用户名参数,则只显示该用户的相关信息命令选项及说明:命令命令选项选项选项说选项说明明-h不显示信息头u不显示用户的当前进程及占用的 CPU 时间s以简洁格式显示,不显示用户登录的时间、终端机阶段作业和程序所耗费的 CPU 时间f不显示用户登录的地点V显示命令版本信息参考示例1:显示当前已登录的用户情况 w13:24:07 up 8 min, 3 users, load average: 0.08, 0.37, 0.21USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATzxj tty1 - 1:22pm 1:21 0.05s 0.05s -bash root :0 - 1:19pm ? 0.00s 1.20s /usr/bin/gnome-root pts/0 :0.0 1:20pm 0.00s 0.11s 0.02s w 参考示例1说明:第一、二行为信息头,在命令中如果使用-h参数选项,则不显示这两行。
第一行中,13:24:07 为系统当前时间,up 8 min为系统自启动以来的时间,3 users为当前登录的用户数,load average: 0.08, 0.37, 0.21 为系统平均负载信息,三个数字表示过去1、5、15分钟的平均负载数字越接近0,表示系统负载越低第二行各域的含义:USER 目前登录的用户名称TTY 登录终端名称FROM 登录地点若从虚拟控制台登录,则为空 LOGIN@ 登录时间IDLE 空闲时间JCPU 和该终端连接的所有进程占用的时间PCPU 当前进程所占用的时间WHAT 用户正在执行的命令参考示例2:显示指定用户的情况 w root13:25:00 up 9 min, 3 users, load average: 0.19, 0.36, 0.22USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot :0 - 1:19pm ? 0.00s 1.22s /usr/bin/gnome-root pts/0 :0.0 1:20pm 0.00s 0.11s 0.02s w root3.6.3 finger 命令该命令是查找并显示用户信息。
它会查找、并显示指定账号用户的相关信息,包括本地与远程登录的用户,输入的账号名称不区分大小写命令用法:finger [-lmsp] [user…] [user@host…] 其中,参数user是本地用户、user@host是远程用户;其他为命令选项如果不带参数选项执行finger命令,它会显示本地主机现在所有登录用户的信息,包括账号名称、真实姓名、登录的终端、闲置的时间、登录时间、用户地址和(如果在系统中有登记)远程主机名称前要加上@符号命令选项及说明:命令命令选项选项选项说选项说明明-s以简洁格式显示用户信息,包括登录名称、真实姓名、终端名称、消息状态、空闲时间、登录时间等信息l以完整格式显示用户信息,除包括 –s 信息外,还包括用户目录、家庭、登录 shell 名、邮件状态的信息p禁止显示“.plan”“.project”和“.forward”文件所包含的信息m禁止查找用户的真实姓名注释:.plan和.project文件用来记录用户本身想显示给其他用户看的信息,可以用.forward 文件来完成电子邮件的转发参考示例1:显示指定用户的详细信息 finger zxjLogin: zxj Name: zxjDirectory: /home/zxj Shell: /bin/bashOn since Fri Sep 9 13:22 (CST) on tty1 4 minutes 25 seconds idleNo mail.No Plan.示例二:以长格式显示当前用户的详细信息。
finger –lLogin: root Name: rootDirectory: /root Shell: /bin/bashOn since Fri Sep 9 13:19 (CST) on :0 (messages off)On since Fri Sep 9 13:20 (CST) on pts/0 from :0.0New mail received Wed Aug 31 16:19 2005 (CST)Unread since Thu Aug 11 22:27 2005 (CST)No Plan. ……3.7 改变用户身份有时超级用户或者系统管理员不在服务器的控制台、而要在普通用户的终端上进行修改一些配置、执行一些命令;这时就要暂时改变用户的身份,从普通用户切换到超级用户进行操作、或执行命令如果只是改变身份,则使用su命令;如果要改变身份并执行命令,则可以使用sudo命令为了系统的安全,在任务完成后一定要记住脱离超级用户或系统管理员的身份!3.7.1 su 命令当使用普通用户身份登录,但想变为超级用户或系统管理员身份进行一些操作时,可以使用 su 命令来暂时改变身份。
su 命令也可以用于普通用户之间的身份变换从普通用户改变身份到超级用户之前需要输入超级用户的口令,从一个普通用户身份改变到另一个普通用户身份前同样也要输入新用户的口令;而从超级用户身份变为普通用户则不需要密码,因为超级用户已经有最高的权限命令用法:su [-flmp] [--help] [--version] [-] [-c command] [-s shell] [user]使用su 命令改变用户身份后,不改变用户工作目录,但会改变HOME、SHELL、USER、LOGNAME等环境变量(若新身份为root,则不会改变USER和LOGNAME变量)参数选项及说明:命令命令选项选项选项说选项说明明-s以简洁格式显示用户信息,包括登录名称、真实姓名、终端名称、消息状态、空闲时间、登录时间等信息l以完整格式显示用户信息,除包括 –s 信息外,还包括用户目录、家庭、登录 shell 名、邮件状态的信息p禁止显示“.plan”“.project”和“.forward”文件所包含的信息m禁止查找用户的真实姓名参考示例1:假定当前用户为 zxj ,将身份改为超级用户 su rootPassword:输入超级用户口令参考示例2:改变到zxj身份执行一条命令并立即返回。
su zxj –c “who –m”Password:输入zxj用户的口令参考示例3:从超级用户变更到普通用户 zxj su zxj$3.7.2 sudo命令该命令允许用户以其他身份执行指定的命令,系统预设的身份为root但与su命令不同,系统在/etc/sudoers文件中设置了可以执行sudo命令的用户,因此通过用visudo命令(需要有超级用户的权限)编辑该文件以增加、删除指定可以执行sudo命令的用户也相当于给用户赋予特定的权限如果未经授权的用户试图执行sudo命令,则系统会发送警告信息的邮件给系统管理员命令用法:sudo -V | -h | -l | -L | -v | -k | -K | -s | [ -H ] [-P ] [-S ] [ -b ] | [ -p prompt ] [ -c class|- ] [ -a auth_type ] [ -u username|#uid ] command该命令与以前的版本有一些差别,“|”符号表示前后为“或”的关系,不能同时使用另外增加了一些参数选项在命令行中指定的UID或GID必须存在且有效,以匹配在passwd文件中指定的目标用户(当目标用户不是root时,组向量也被初始化)。
缺省情况下,sudo命令要求用户输入口令进行身份认证,这个口令是该用户自己的口令而不是超级用户的口令一旦用户通过了身份认证,系统中的一个时间戳立即被更新以保证用户在5分钟内可以不再需要口令而使用sudo命令命令选项及说明:参数参数说说 明明-V显示版本信息如果是root用户,则还会显示路径、邮件地址等信息h显示帮助信息l显示当前主机上用户可以执行与无法执行的命令L显示在/etc/sudoers文件中“Default”行可以使用的选项v延长口令有效期限5分钟k结束口令的有效期限,即再次执行sudo命令时仍然需要输入口令K完全删除sudo命令所使用的用户时间戳同样,使用这个参数选项时不要求输入口令s执行指定的shellH将HOME环境变量设置为改变身份后的HOME环境变量P使sudo命令保持组向量不变S使sudo命令从标准输入设备上读取口令b在后台执行命令使用了该参数选项就不能用shell作业控制进程p prompt改变询问口令的提示符号c class使sudo命令以指定登录分类所限定的资源运行指定的命令该参数选项只在以BSD登录分类的系统中可以使用a auth_type当确认用户身份时,使sudo命令使用指定的认证类型。
系统管理员可以通过在/etc/login.conf文件中添加“auth-sudo”项来指定一个sudo命令认证模式的列表该参数选项只在支持BSD认证的系统中可用u username|#uid以指定的用户名称或#UID作为改变后的身份如果不带此参数选项,则默认以root作为改变后的身份Command改变身份后要执行的命令参考示例1:用户stu1以用户stu2的身份执行who命令sudo –u stu2 who –a如果用户stu1在/etc/sudoers文件中没有记录(User alias specification、Cmnd alias specification等),则不允许执行参考示例2:查看当前主机上root用户可以执行与无法执行的命令sudo –l显示:User root may run the following command on this host:(ALL)ALL表示root用户可以执行所有的命令参考示例3:用户stu1以用户root的身份在后台查找文件sudo –b –u root find / sudoers对用户stu1的要求同参考示例1习题三习题三1.何为终端登录、远程登录?二者有何区别?2.比较几个远程登录命令的异同点。
3.使用useradd命令添加用户时,如果不指定用户目录位置,则默认的用户目录会建立在何处?Linux系统这样设置有何意义?4.使用useradd命令添加用户时如果带-D选项,是否添加了用户?该选项有何用处?5.用文本编辑器分别打开并阅读/etc/passwd和/etc/shadow文件,说明各个域的含义?6.直接修改/etc/passwd文件来添加用户有何好处?需要注意什么问题?7.修改用户属性、删除用户账户有几种方法?修改、删除组群账户呢?8.系统管理员是否一定是超级用户?如何为系统管理员分配权限?9.从Internet上下载linuxconf软件并安装它,运行该软件以了解它的用法10.查看登录用户的命令有哪些?各有何特点?11.改变用户身份使用什么命令?使用中需要注意哪些问题?。