本教程为上面的Ubuntu使用手册的详尽版本,快速入门可以看哪个Ubuntu的。这部份更多是Linux系统的一些共通特点。
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个帐号,之后以这个帐号的身分步入系统。
用户的帐号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制她们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每位用户帐号都拥有一个唯一的用户名和各自的口令。
用户在登入时键入正确的用户名和口令后,就才能步入系统和自己的主目录。
实现用户帐号的管理,要完成的工作主要有如下几个方面:
LinuxLinuxLinux系统用户帐号的管理
用户帐号的管理工作主要涉及到用户帐号的添加、修改和删掉。
添加用户帐号就是在系统中创建一个新帐号,之后为新帐号分配用户号、用户组、主目录和登陆Shell等资源。刚添加的帐号是被锁定的,难以使用。
1.添加新的用户帐号使用useradd命令
其句型如下:
useradd 选项 用户名
参数说明:
用户名:
指定新帐号的登陆名。
实例1
useradd –d /usr/sam -m sam
此命令创建了一个用户sam,其中-d和-m选项拿来为登陆名sam形成一个主目录/usr/sam(/usr为默认的用房主目录所在的父目录)。
实例2
useradd -s /bin/sh -g group –G adm,root gem
此命令新建了一个用户gem,该用户的登陆Shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。
这儿可能新建组:#groupaddgroup及groupaddadm
降低用户帐号就是在/etc/passwd文件中为新用户降低一条记录,同时更新其他系统文件如/etc/shadow,/etc/group等。
Linux提供了集成的系统管理工具userconf,它可以拿来对用户帐号进行统一管理。
2.删掉账号
假如一个用户的帐号不再使用,可以从系统中删掉。删掉用户帐号就是要将/etc/passwd等系统文件中的该用户记录删掉,必要时还删掉用户的主目录。
删掉一个已有的用户帐号使用userdel命令,其格式如下:
userdel 选项 用户名
常用的选项是-r,它的作用是把用户的主目录一起删掉。
比如:
userdel sam
此命令删掉用户sam在系统文件中(主要是/etc/passwd,/etc/shadow,/etc/group等)的记录,同时删掉用户的主目录。
3.更改账号
更改用户帐号就是按照实际情况修改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
更改已有用户的信息使用usermod命令,其格式如下:
usermod 选项 用户名
常用的选项包括-c,-d,-m,-g,-G,-s,-u以及-o等,这种选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
另外,有些系统可以使用选项:-l新用户名
这个选项指定一个新的帐号,将要原先的用户名改为新的用户名。
比如:
usermod -s /bin/ksh -d /home/z –g developer sam
此命令将用户sam的登陆Shell更改为ksh,主目录改为/home/z,用户组改为developer。
4.用户口令的管理
用户管理的一项重要内容是用户口令的管理。用户帐号刚创建时没有口令,并且被系统锁定,难以使用,必须为其指定口令后才可以使用,虽然是指定空口令。
指定和更改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它更改自己的口令。命令的格式为:
passwd 选项 用户名5、用户口令的管理
可使用的选项:
假如默认用户名,则更改当前用户的口令。
比如,假定当前用户是samlinux用户和用户组管理,则下边的命令更改该用户自己的口令:
$ passwd
Old password:******
New password:*******
Re-enter new password:*******
假如是超级用户,可以用下述方式指定任何用户的口令:
passwd sam
New password:*******
Re-enter new password:*******
普通用户更改自己的口令时,passwd命令会先寻问原口令,验证后再要求用户输入两遍新口令,假如两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不须要晓得原口令。
为了系统安全起见,用户应当选择比较复杂的口令,比如最好使用8位长的口令,口令中包含有小写、小写字母和数字,但是应当与姓名、生日等不相同。
为用户指定空口令时,执行下述方式的命令:
passwd -d sam
此命令将用户sam的口令删掉,这样用户sam下一次登陆时,系统就不再寻问口令。
passwd命令还可以用-l(lock)选项锁定某一用户,使其不能登入,比如:
passwd -l sam
LinuxLinuxLinux系统用户组的管理
每位用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和更改。组的降低、删除和更改实际上就是对/etc/group文件的更新。
1.降低一个新的用户组使用groupadd命令
其格式如下:
groupadd 选项 用户组
可以使用的选项有:
实例1:
groupadd group1
此命令向系统中降低了一个新组group1,新组的组标示号是在当前已有的最大组标示号的基础上加1。
实例2:
groupadd -g 101 group2
此命令向系统中降低了一个新组group2linux操作系统好吗,同时指定新组的组标示号是101。
2.假如要删掉一个已有的用户组,使用groupdel命令
其格式如下
groupdel 用户组
比如:
groupdel group1
此命令从系统中删掉组group1。
3.更改用户组的属性使用groupmod命令
其句型如下:
groupmod 选项 用户组
常用的选项有:
实例1:
groupmod -g 102 group2
此命令将组group2的组标示号更改为102。
实例2:
groupmod –g 10000 -n group3 group2
此命令将组group2的标示号改为10000,组名更改为group3。
4.假如一个用户同时属于多个用户组,这么用户可以在用户组之间切换,便于具有其他用户组的权限
用户可以在登陆后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。诸如:
$ newgrp root
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户帐号的管理,用户组的管理也可以通过集成的系统管理工具来完成。
与用户帐号有关的系统文件
完成用户管理的工作有许多种方式,而且每一种方式实际上都是对有关的系统文件进行更改。
与用户和用户组相关的信息都储存在一些系统文件中,这种文件包括/etc/passwd,/etc/shadow,/etc/group等。
下边分别介绍这种文件的内容。
/etc/passwd文件是用户管理工作涉及的最重要的一个文件
Linux系统中的每位用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
这个文件对所有用户都是可读的。它的内容类似下边的反例:
cat /etc/passwd
root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/usr/sam:/bin/sh
从里面的反例我们可以看见,/etc/passwd中一行记录对应着一个用户,每行记录又被逗号(:)分隔为7个数组,其格式和具体含意如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
1)"用户名"是代表用户帐号的字符串。
一般宽度不超过8个字符,但是由大小写字母和/或数字组成。登陆名中不能有逗号(,由于顿号在这儿是分隔符。
为了兼容起见,登陆名中最好不要包含点字符(.),而且不使用连字符(-)和减号(+)打头。
2)“口令”一些系统中,储存着加密后的用户口令字。
其实这个数组储存的只是用户口令的加密串,不是明文,然而因为/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。为此,如今许多Linux系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字储存到/etc/shadow文件中,而在/etc/passwd文件的口令数组中只储存一个特殊的字符,比如“x”或者“*”。
3)“用户标示号”是一个整数,系统内部用它来标示用户。
通常情况下它与用户名是一一对应的。假如几个用户名对应的用户标示号是一样的,系统内部将把它们视为同一个用户,并且它们可以有不同的口令、不同的主目录以及不同的登陆Shell等。
一般用户标示号的取值范围是0~65535。0是超级用户root的标示号,1~99由系统保留,作为管理帐号,普通用户的标示号从100开始。在Linux系统中,这个界限是500。
4)“组标示号”字段记录的是用户所属的用户组。
它对应着/etc/group文件中的一条记录。
5)“注释性描述”字段记录着用户的一些个人情况。
比如用户的真实姓名、电话、地址等,这个数组并没有哪些实际的用途。在不同的Linux系统中,这个数组的格式并没有统一。在许多Linux系统中,这个数组储存的是一段任意的注释性描述文字,用做finger命令的输出。
6)“主目录”,也就是用户的起始工作目录。
它是用户在登入到系统以后所处的目录。在大多数系统中深度linux系统,各用户的主目录都被组织在同一个特定的目录下,而用房主目录的名称就是该用户的登陆名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则依照具体情况设置。
7)用户登陆后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登入到系统后运行的命令协程或某个特定的程序,即Shell。
Shell是用户与Linux系统之间的插口。Linux的Shell有许多种,每种都有不同的特性。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。
系统管理员可以依据系统情况和用户习惯为用户指定某个Shell。倘若不指定Shell,这么系统使用sh为默认的登陆Shell,即这个数组的值为/bin/sh。
用户的登陆Shell也可以指定为某个特定的程序(此程序不是一个命令类库)。
借助这一特性,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就手动退出了系统。有些Linux系统要求只有这些在系统中登记了的程序能够出现在这个数组中。
8)系统中有一类用户称为伪用户(psuedousers)。
那些用户在/etc/passwd文件中也占有一条记录,而且不能登入,由于它们的登陆Shell为空。它们的存在主要是便捷系统管理,满足相应的系统进程对文件属主的要求。
常见的伪用户如下所示:
伪用户含义
bin 拥有可执行的用户命令文件
sys 拥有系统文件
adm 拥有帐户文件
uucp UUCP使用
lp lp或lpd子系统使用
nobody NFS使用
拥有账户文件
1、除了前面列举的伪用户外,还有许多标准的伪用户,比如:audit,cron,mail,usenet等,它们也都各自为相关的进程和文件所须要。
因为/etc/passwd文件是所有用户都可读的,假如用户的密码太简单或规律比较显著的话,一台普通的计算机就能否很容易地将它破解,因而对安全性要求较高的Linux系统都把加密后的口令字分离下来,单独储存在一个文件中,这个文件是/etc/shadow文件。有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。
2、/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令按照/etc/passwd中的数据手动形成
它的文件格式与/etc/passwd类似,由若干个数组组成,数组之间用":"隔开。这种数组是:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
"登陆名"是与/etc/passwd文件中的登陆名相一致的用户帐号"口令"数组储存的是加密后的用户口令字,宽度为13个字符。假如为空,则对应用户没有口令,登陆时不须要口令;假如富含不属于集合{./0-9A-Za-z}中的字符,则对应的用户不能登入。"最后一次更改时间"表示的是从某个时刻起,到用户最后一次更改口令时的天数。时间起点对不同的系统可能不一样。诸如在SCOLinux中,这个时间起点是1970年1月1日。"最小时间间隔"指的是两次更改口令之间所需的最小天数。"最大时间间隔"指的是口令保持有效的最大天数。"警告时间"数组表示的是从系统开始警告用户到用户密码即将失效之间的天数。"不活动时间"表示的是用户没有登陆活动但帐号仍能保持有效的最大天数。"失效时间"数组给出的是一个绝对的天数,假如使用了这个数组,这么就给出相应帐号的生存期。届满后,该帐号就不再是一个合法的帐号,也就不能再拿来登陆了。
下边是/etc/shadow的一个反例:
cat /etc/shadow
root:Dnakfw28zf38w:8764:0:168:7:::
daemon:*::0:0::::
bin:*::0:0::::
sys:*::0:0::::
adm:*::0:0::::
uucp:*::0:0::::
nuucp:*::0:0::::
auth:*::0:0::::
cron:*::0:0::::
listen:*::0:0::::
lp:*::0:0::::
sam:EkdiSECLWPdSa:9740:0:0::::
3、用户组的所有信息都储存在/etc/group文件中。
将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段。
每位用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登陆时所属的默认组,而其他组称为附加组。
用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。
用户组的所有信息都储存在/etc/group文件中。此文件的格式也类似于/etc/passwd文件,由逗号(:)隔开若干个数组,这种数组有:
组名:口令:组标识号:组内用户列表
"组名"是用户组的名称,由字母或数字构成。与/etc/passwd中的登陆名一样,组名不应重复。"口令"数组储存的是用户组加密后的口令字。通常Linux系统的用户组都没有口令,即这个数组通常为空,或则是*。"组标示号"与用户标示号类似,也是一个整数,被系统内部拿来标示组。"组内用户列表"是属于这个组的所有用户的列表/b],不同用户之间用冒号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
/etc/group文件的一个反例如下:
root::0:root
bin::2:root,bin
sys::3:root,uucp
adm::4:root,adm
daemon::5:root,daemon
lp::7:root,lp
users::20:root,sam
批量添加用户
添加和删掉用户对每个Linux系统管理员都是轻而易举的事,比较棘手的是假如要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户的方式。Linux系统提供了创建大量用户的工具,可以让您立刻创建大量用户,技巧如下:
1.编辑一个文本用户文件
每一列根据/etc/passwd密码文件的格式书写,要注意每位用户的用户名、UID、宿主目录都不可以相同,其中密码栏可以留做空白或输入x号。一个范例文件user.txt内容如下:
user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
user003::602:100:user:/home/user003:/bin/bash
user004::603:100:user:/home/user004:/bin/bash
user005::604:100:user:/home/user005:/bin/bash
user006::605:100:user:/home/user006:/bin/bash
2.创建用户
以root身分执行命令/usr/sbin/newusers,从刚创建的用户文件user.txt中导出数据,创建用户:
#newusers < user.txt
之后可以执行命令vipw或vi/etc/passwd检测/etc/passwd文件是否早已出现这种用户的数据,但是用户的寄主目录是否早已创建。
3.执行命令/usr/sbin/pwunconv
将/etc/shadow形成的shadow密码解码linux用户和用户组管理,之后回讲到/etc/passwd中,并将/etc/shadow的shadow密码栏删除。这是为了便捷下一步的密码转换工作,即先取消shadowpassword功能。
pwunconv
4.编辑每位用户的密码对照文件
范例文件passwd.txt内容如下:
user001:密码
user002:密码
user003:密码
user004:密码
user005:密码
user006:密码
5.以root身分执行命令/usr/sbin/chpasswd
创建用户密码,chpasswd会将经过/usr/bin/passwd命令编码过的密码写入/etc/passwd的密码栏。
chpasswd < passwd.txt
6.确定密码经编码写入/etc/passwd的密码栏后
执行命令/usr/sbin/pwconv将密码编码为shadowpassword,并将结果写入/etc/shadow。
pwconv
这样就完成了大量用户的创建了,然后您可以到/home下检测这种用户寄主目录的权限设置是否都正确,并登陆验证用户密码是否正确。