本文转载自:http://hi.baidu.com/nbcooker/item/82ade20f1145c018acdc707a
一、帐户管理
1、概述
Linux操作系统是多用户操作系统,帐户实质上就是一个用户在系统上的标识,广义上讲,Linux的帐户包括用户帐户和组帐户两种。
用户帐户分为普通 用户帐户和超级用户帐户两种。管理员帐户对系统具有绝对控制权;
组帐户分为私有组和标准组,当创建一个新用户时,若没有指定他所属于的组,Linux就建 立一个和该用户同名的私有组,此私有组中只包含该用户自己,标准组可以容纳多个用户。
若使用标准组,在创建一个新用户时就应该指定他所属于的组。同一个用 户可以同属于多个组,其登录后所属的组称为主组,其它的组称为附加组。
2、Linux下的帐户系统文件
Linux下的帐户系统文件主要有/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow 4个。
(1)/etc/passwd文件中每行定义一个用户帐号,一行中又划分为多个不同的字段定义用户帐号的不同属性,各字段用“:”隔开。
各字段定义如下:
用户名:用户登录系统时使用的用户名,它在系统中是唯一的。
口令:此字段存放加密的口令。在此文件中的口令是x,这表示用户的口令是被/etc/shadow文件保护的,所有加密口令以及和口令有关的设置都保存 在/etc/shadow中。
用户标识号:是一个整数,系统内部用它来标识用户。每个用户的UID都是唯一的。root用户的UID是0,1~499是系统的标准帐户,普通用户从 500开始。
组标识号:是一个整数,系统内部用它来标识用户所属的组。
注释性描述:例如存放用户全名等信息。
自家目录:用户登录系统后进入的目录。
命令解释器:批示该用户使用的shell,Linux默认为bash。
(2)/etc/passwd文件对任何用户均可读,为了增加系统安全性,用户的口令通常用shadow passwords保护。
/etc/shadow只对root用户可读。在安装系统时,会询问用户是否启用shadow passwords功能。
在安装好系统后也可以用pwconv命令和pwunconv来启动或取消shadow passwords保护。
经过shadow passwords保护的帐户口令和相关设置信息保存在/etc/shadow文件里。
各字段意义如下:
用户名:用户的帐户名
口令:用户的口令,是加密过的
最后一次修改时间:从1970年1月1日起,到用户最后一次更改口令的天数
最小时间间隔:从1970年1月1日起,到用户可以更改口令的天数
最大时间间隔:从1970年1月1日起,到用户必须更改口令的天数
警告时间:在用户口令过期之前多少天提醒用户更新
不活动时间:在用户口令过期之后到禁用帐户的天数
失效时间:从1970年1月1日起,到帐户被禁用的天数
标志:保留位
(3)/etc/group文件。将用户分组是Linux中对用户进行管理及控制访问权限的一种手段。
当一个用户同时是多个组的成员时,在/etc /passwd中记录的是用户所属的主组,也就是登录时所属的默认组,而其他的组称为附加组。
用户要访问附加组的文件时,必须首先使用newgrp命令使 自己成为所要访问的组的成员。
组的所有属性都存放在/etc/group中,此文件对任何用户均可读。
各字段意义如下:
组名:该组的名称
组口令:用户组口令,由于安全性原因,已不使用该字段保存口令,用“x”占位
GID:组的识别号,和UID类似,每个组都有自己独有的ID号,不同组的GID不会相同
组成员:属于这个组的成员
(4)/etc/gshadow文件用于定义用户组口令、组管理员等信息,该文件只有root用户可以读取。
各字段意义如下:
组名:用户组名称,该字段与group文件中的组名称对应
组口令:用户组口令,该字段用于保存已加密的口令
组的管理员帐号:组的管理员帐号,管理员有权对该组添加、删除帐号
组成员:属于该组的用户成员列表,用“,”分隔
提示:帐户管理的实质就是管理上述的4个帐户系统文件
3、使用命令行工具管理帐户
管理帐户的俱行工具及功能如下:
useradd [] 添加新用户
usermod [] 修改已存在的指定用户
userdel [-r] 删除已存在的指定帐户,-r参数用于删除用户自家目录
groupadd [] 添加新组
groupmod [] 修改已存在的指定组
groupdel 删除已存在的指定组
使用举例:
useradd osmond //创建一个新用户osmond
groupadd staff //创建一个新组staff
useradd -G staff tom //创建一个新用户tom,同时加入staff附加组中
useradd -d /www -M webmaster //创建一个新用户webmaster,指定登录目录为/www,不创建自家用户目录(-M)
usermod -G staff osmond //将osmond添加到附加组staff中
userdel webmaster //删除用户
userdel -r osmond //删除用户,同时删除自家目录
groupdel staff //删除组staff
4、口令管理与口令时效
(1)passwd命令
passwd命令用来设置用户口令,格式为:passwd [] []
用户修改自己的用户密码可直接键入passwd,若修改其他用户密码需加用户名。超级用户还可以使用如下命令进行用户口令管理:
passwd -l //禁用用户帐户口令
passwd -S //查看用户帐户口令状态
passwd -u //恢复用户帐户口令
passwd -d //删除用户帐户口令
(2)chage命令
口令时效是系统管理员用来防止机构内不良口令的一种技术。在Linux系统上,口令时效是通过chage命令来管理的,格式为:chage []
下面列出了chage命令的选项说明:
-m days: 指定用户必须改变口令所间隔的最少天数。如果值为0,口令就不会过期。
-M days: 指定口令有效的最多天数。当该选项指定的天数加上-d选项指定的天数小于当前的日期时,用户在使用该帐号前就必须改变口令。
-d days: 指定从1970年1月1日起,口令被改变的天数。
-I days: 指定口令过期后,帐号被锁前不活跃的天数。如果值为0,帐号在口令过期后就不会被锁。
-E date: 指定帐号被锁的日期。日期格式YYYY-MM-DD。若不用日期,也可以使用自1970年1月1日后经过的天数。
-W days: 指定口令过期前要警告用户的天数。
-l: 列出指定用户当前的口令时效信息,以确定帐号何时过期。
例如下面的命令要求用户user1两天内不能更改口令,并且口令最长的存活期为30天,并且口令过期前5天通知用户
chage -m 2 -M 30 -W 5 user1
可以使用如下命令查看用户user1当前的口令时效信息:chage -l user1
提示:1)可以使用chage 进入交互模式修改用户的口令时效。
2)修改口令实质上就是修改影子口令文件/etc/shadow中与口令时效相关的字段值。
5、用户和组状态命令
whoami: 用于显示当前用户的名称
groups []: 用于显示指定用户所属的组,若未指定用户,则显示当前用户所属的组
id: 用于显示用户当前的UID、GID和用户所属的组列表
su [-][]: 用于转换当前用户到指定的用户帐号,若不指定用户名则转换当前用户到root;若使用参数“-”,则在转换当前用户的同时转换用户工作环境。
newgrp []: 用于转换用户的当前组到指定的附加组,用户必须属于该组才可以进行。
二、权限管理
1、3种基本权限
在Linux中,将使用系统资源的人员分为4类:超级用户、文件或目录的属主、属主的同组人和其他人员。超级用户拥有对Linux系统一切操作权限,对 于其他3类用户都要指定对文件和目录的访问权限。
代表字符 权限 对文件的含义 对目录的含义
r 读权限 可以读文件的内容 可以列出目录中的文件列表
w 写权限 可以修改该文件 可以在目录中创建删除文件
x 执行权限 可以执行该文件 可以使用cd命令进入该目录
2、查看文件和目录的权限
可以使用带l参数的ls命令查看文件或目录的权限
每一行显示一个文件或目录的信息,这些信息包括文件的类型、文件的权限、文件的属主和文件的所属组,还有文件的大小以及创建时间和文件名。输出列表中每 一行第一列的第一个字母指示了该文件的类型。各种文件类型及代表字符如下:
-:普通文件 b:块文件设备 d:目录文件 c:字符文件设备 l:符号链接文件 p:管道文件
第一列的其余9个字母可分为三组,3个字母一组,这3组分别代表:文件属主的权限、文件所属组的权限和其他用户的权限。每组中的3个栏位分别表示读、 写、执行权限。
3、更改操作权限(chmod)
系统管理员和文件属主可以根据需要来设置文件的权限,有两种设置方法:文字设定法和数值设定法。
(1)文字设定法
chomd的文字设定法的格式为:chmod [ugoa][+-=][rwxugo]
其中第1个选项表示要赋予权限的用户,具体说明如下:
u:属主 g:所属组用户 o:其他用户 a:所有用户
第2个选项表示要进行的操作,具体说明如下:
+:增加权限 -:删除权限 =:分配权限,同时将原有权限删除
第3个选项是要分配的权限,具体说明如下:
r/x/w:允许读取/写入/执行 u/g/o:和属主/所属组用户/其他用户的权限相同
例如:
chmod go -r users //取消组用户和其他用户对文件users的读取权限
chmod u+x users //对文件users的属主增加招待权限
chmod u+x,go-r users //对文件users的属主添加执行权限,同时取消组用户和其他用户对文件的读取权限
(2)数值设定法
chmod的数值设定法的格式为:chmod n1n2n3
其中n1、n2、n3分别代表属主的权限、组用户的权限和其他用户的权限,这三个选项都是八进制数字。例如:
chmod 755 adduser //对文件adduser的属设置可读、写和执行的权限,所属组和其他用户只设置读和执行权限,没有写权限
chmod 600 user1 //取消组用户和其他用户对文件user1的一切权限(原权限为-rw-rCrC)
4、更改属组或同组人
改变文件的属主和组可以用chown命令,命令格式为:chown [-R] 。 例如:
chmod osmond user1 //将文件user1的属主改为osmond
chmod osmond.osmond user1 //将文件user1的属主和组都改成osmond
chmod -R osmond.osmond mydir //将mydir目录及其子目录下的所有文件或目录的属主和组都改成osmond
5、设置文件和目录的生成掩码
用户可以使用umask命令设置文件夹的默认生成掩码。默认的生成掩码告诉系统当创建一个文件或目录时不应该赋予哪些权限。如果用户将umask命令放 在环境文件(.bash_profile)中,就可以控制所有的新建文件或目录的访问权限。其命令格式为:umask [u1u2u3]
其中,u1、u2、u3分别表示的是不允许属主有的权限、不允许同组人有的权限和不允许其他人有的权限。例如:
umask 022 //设置不允许同组用户和其他用户有写权限
umask //显示当前的默认生成掩码
6、特殊权限设置
(1)SUID、SGID和sticky-bit
除了上述的基本权限之外,还有所谓的特殊权限存在。由于特殊权限会拥有一些“特权”,因而用户若无特殊需要,不应该去打开这些权限,避免安全方面出现严 重漏洞,甚至摧毁系统。下面列出了3个特殊权限的说明:
SUID:当一个设置了SUID位的可执行文件被执行时,该文件以所有者的身份运行,也就是说无论谁来执行这个文件,他都拥有文件所有者的特权,可以任 意存取该文件拥有者能使用的全部系统资源。如果所有者是root,那么执行人就有超级用户的特权了。
SGID:当一个设置了SGID位的可执行文件被执行时,该文件将具有所属组的特权,任意存取整个组所能使用的系统资源;若一个目录设置了SGID,则 所有被复制到这个目录下的文件,其所属的组都会被重设为和这个目录一样,除非在复制文件时加上-p(preserve,保留文件属性)参数,才能保留原来 所属的群组设置。
sticky-bit:对一个文件设置了sticky-bit之后,尽管其他用户有写权限,也必须由属主执行删除、移动等操作,对一个目录设置了 sticky-bit之后,存放在该目录下的文件仅允许其属主执行删除、移动等操作。
一个设置了SUID的典型例子是passwd程序,它允许普通用户改变自己的口令,这是通过改变/etc/shadow文件的口令字段来实现的。然而系 统管理员决不允许普通用户拥有直接改变/etc/shadow文件的权限。解决方法是将passwd程序设置SUID,当passwd被执行时将拥有超级 用户的权限,而passwd程序运行结束又回到普通用户的权限,下面是显示passwd程序的权限:
一个设置了sticky-bit的典型例子是系统临时文件目录/tmp,这避免了不守法的用户存心搞鬼,恣意乱删其他用户存放的文件。下面显示/tmp 目录的权限:
(2) SUID、SGID和sticky-bit的表示
从上面的显示可以看出,SUID是占用属主的x位置为表示的;SGID是占用组的x位置来表示的;sticky-bit是占用其他人的x位置来表示 的。在表示上有大小定之分,假若同时设置执行权限和SUID、SGID和sticky-bit,权限标识字符是小写的;倘若关闭执行权限,则标识字符会变 成大写。
(3) 设置特殊权限
使用chmod命令设置特殊权限,仍然有字符设定法和数值设定法之分。使用字符设定法时,可以使用s和t权限字符,例如:
chmod u+s /usr/bin/myapp //为程序/usr/bin/myapp添加SUID权限
chmod g+s /home/groupspace //为目录/home/groupspace添加SGID权限
chmod o+t /home/share //为目录/home/share添加sticky-bit权限
使用chmod的数值设定法时,要使用4位八进制数值,其中第一位八进制数用于设置特殊权限,后三位八进制数用于设置基本权限。例如:
chmod 4755 /usr/bin/myapp //设置SUID
chmod 2755 /home/groupspace //设置SGID
chmod 1755 /home/share //设置sticky-bit