用户账号和组账号概述
与windows操作系统一样,Linux操作系统的每一个用户账号也都有唯一的用户名与密码。用户在登录时输入正确的用户名和密码,就能够进入操作系统和自己的主目录。
用户账号
在Linux操作系统中,根据系统管理的需要将用户账号分为不同的类型,主要包括超级用户、普通用户和程序用户,各类型拥有的权限、担任的角色也各不相同。
》》超级用户:root用户是Linux操作系统中默认的超级用户账号,对本主机拥有至高无上的权限,类似于windows操作系统中的Adninistrator用户。只有当进行系统管理、维护任务时,才建议使用r00t用户登录系统,日常事务处理建议只使用普通用户账号。
》》普通用户:普通用户账号需要由root用户或其他管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的宿主目录中拥有完整权限。
》》程序用户:在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行,如bin、daemon、ftp、mail 等。
组账号
基于某种特定联系(如都需要访问FTP服务)将多个用户集合在一起,即构成一个用户组,表示该组内所有用户的账号称为组账号。每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组),若该用户同时还包含在其他的组中,则这些组称为该用户的附加组(或公共组)。
UID和GID
Linux操作系统中的每一个用户账号都有一个数字形式的身份标记,称为UID(UserIDentity,用户标号》,对于操作系统核心来说,UID是区分用户的基本依据,原则上每个用户的UID号应该是唯一的。r00ot用户账号的UID号为固定值0,而程序用户账号的UID号默认为1~499,500~60000的UID号默认分配给普通用户使用。
与UID类似,每一个组账号也有一个数字形式的身份标记,称为GID(GroupIDentity,组标识号)。root组账号的GID号为固定值0,而程序组账号的GID号默认为1~499,500~60000的GID号默认分配给普通组使用。
用户账号管理
Linux操作系统中的用户账号、密码等信息均保存在相应的配置文件中,直接修改这些文件或者使用用户管理命令都可以对用户账号进行管理。
用户账号文件
与用户账号相关的配置文件主要有两个,分别是/etc/passwd和/etc/shadow。前者用于保存用户名称、宿主目录、登录She1l等基本信息,后者用于保存用户的密码、账号有效期等信息。在这两个配置文件中,每一行对应一个用户账号,不同的配置项之间使用“:”(冒号》进行分隔。
(1)passwd文件中的配置行格式
操作系统中所有用户的账号基本信息都保存在/etc/passvwd文件中,该文件是文本文件,任何用户都可以读取文件中的内容。例如,以下操作可分别查看/etc/passwd文件开头、末尾的几行内容。
在passwd文件开头的部分,包括超级用户root及各程序用户的账号信息,系统中新增加的用户账号信息将保存到passwd文件的末尾。passwd文件的每一行内容中包含了七个用“:”(冒号)分隔的配置字段,从左到右各配置字段的合义分别如下所述。
》》第1字段:用户账号的名称,也是登录系统时使用的识别名称
》》第2字段:经过加密的用户密码字串,或者密码占位符“×”
》》第3字段:用户账号的 UID 号
》》第4字段:所属基本组账号的GID号
》》第5字段:用户全名,可填写与用户相关的说明信息。
》》第6字段:宿主目录,即该用户登录后所在的置默认工作目录
》》第7字段:登录Shell等信息,用户完成登录后使用的Shell
基于系统运行和管理的需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改。在早期的UNIX操作系统中,用户账号的密码信息也是保存在passwd文件中的,不法用户可以获取密码字串进行暴力破解,这样一来账号安全就存在一定的隐患。因此,后来将密码转存入专门的shadow文件中,而passwd文件中仅保留密码占位符“x”。
(2)shadow文件中的配置行格式
shadow文件又被称为“影子文件”,其中保存有各用户账号的密码信息,因此对shadow文件的访问应该进行严格限制。默认只有root用户能够读取shadow文件中的内容,且不允许直接编辑该文件中的内容。例如,以下操作可分别渣看/etc/shadow文件开头、末尾的几行内容。
shadow文件的每一行内容中包含了九个用“:”(冒号)分隔的配置字段,从左到右各配置字段的含义分别如下所述。
》》第1字段:用户账号名称
》》第2字段:使用SHA-512(哈希算法中的一种)加密的密码字串信息,当为“*”或“!!”时表示此用户不能登录到系统。若该字段内容为空,则该用户无须密码即可登录系统
》》第3字段:上次修改密码的时间,表示从1970年01月01日算起到最近一次修改密码时间隔的天数
》》第4字段:密码的最短有效天数,自本次修改密码后,必须至少经过该天数才能再次修改密码。默认值为0,表示不进行限制
》》第5字段:密码的最长有效天数,自本次修改密码后,经过该天数以后必须再次修改密码。默认值为9999,表示不进行限制
》》第6字段:提前多少天警告用户密码将过期,默认值为7
》》第7字段:在密码过期之后多少天内禁用此用户
》》第8字段:账号失效时间,此字段指定了用户作废的天数(从1970年01月01日起计算)默认值为空,表示账号永久可用
》》第9字段:保留字段,目前没有特定用途
添加,修改,删除用户账号
(1)useradd命令——添加用户账号
useradd命令用于添加用户账号,其基本的命令格式如下:
useradd [选项] 用户名
最简单的用法是,不添加任何选项,只使用用户名作为useradd命令的参数,按系统默认配置建立指定的用户账号。在CentOs系统中,使用useradd命令添加用户账号时主要完成以下几项任务。
》》在/etc/passwd文件和/etc/shadow文件的末尾增加该用户账号的记录。
》》若未明确指定用户的宿主目录,则在/home目录下自动创建与该用户账号同名的宿主目录,并在该目录中建立用户的各种初始配置文件。
》》若没有明确指定用户所属的组,则自动创建与该用户账号同名的基本组账号,组账号的记录信息将保存到/etc/group 和/etc/gshadow 文件中。
如果结合useradd命令的各种选项,可以在添加用户账号的同时对UID号、宿主目录、登录Shell等相关属性进行指定。以下列出了useradd命令中用于设贸账号属性的几个常见选项。
-u:指定用户的UID号,要求该UD号码未被其他用户使用
-d:指定用户的宿主目录位置(当与-M一起使用时,不生效)
-e:指定用户的账户失效时间,可使用YYYY--DD的日期格式
-g:指定用户的基本组名(或使用GID号)
-G:指定用户的附加组名(或使用GID号)
-M:不建立宿主目录,即使/etc/login.defs系统配置中已设定要建立宿主目录
-s:指定用户的登录Shell
在账号管理工作中,有时候会希望在新建账号的同时指定该账号的有效期限,或者要求新建的账号不能登录系统(如仅用于访问FTP服务),这时可分别用”-e“和”-s“选项
(2)passwd命令——为用户账号设置密码
通过useradd命令新增用户账号以后,还需要为其设置一个密码才可以正常使用。使用passwd命令可以设置或修改密码,root用户有权管理其他账号的密码(指定账号名称作为参数即可)。
用户账号具有可用的登录密码以后,就可以从字符终端进行登录了。虽然root用户可以指定用户名作为参数,对指定账号的密码进行管理,但是普通用户却只能执行单独的“passwd”命令修改自己的密码。
对于普通用户自行设置的密码,要求具有一定的复杂性(如不要直接使用英文单词,长度保持在六位以上),否则系统可能拒绝进行设置。普通用户设置自身的登录密码时,需要先输入旧的密码进行验证。
使用passwd命令除了可以修改账号的密码以外,还能够对用户账号进行锁定、解锁,也可以将用户的密码设置为空(无须密码即可登录》。与上述功能相关的几个选项如下所示。
-d:清空指定用户的密码,仅使用用户名即可登录系统。
-l:锁定用户账户
-S:查看用户账户的状态(是否被锁定)
-u:解锁用户账户
通过passwd命令锁定的用户账号,将无法再登录系统(shadow文件中的对应密码字串前将添加“!!”
字符),只能由管理员来解除锁定。
(3)usermod命令——修改用户账号属性
对于操作系统中已经存在的用户账号,可以使用usermod命令重新设置各种属性。usermod命令同样需要指定账号名称作为参数。usermod命令中较常使用的几个选项如下所述。
-u:修改用户的UID号
-d:修改用户的宿主目录位置
-e:修改用户的账户失效时间,可使用YYYY-MM-DD的日期格式
-g:修改用户的基本组名(或使用GID号)
-G:修改用户的附加组名(或使用GID号)
-s:指定用户的登录Shell
-l:更改用户账号的登录名称(LoginName)’
-L:锁定用户账户
-U:解锁用户账户
使用usermod命令时,其大部分的选项与useradd命令的选项是对应的,作用也相似。除此以外,还有两个选项“-L”和“-U”,分别用于锁定、解锁用户账号。这两个选项与passwd命令的“-l”和“-u”选项的作用基本相同,但是存在大小写区别。
若要修改已有账号的宿主目录,需要先将该账号原有的宿主目录转移到新的位置,然后通过usermod命令设置新的宿主目录位置。
(4)userdel命令——删除用户账号
当操作系统中的某个用户账号不再使用时(如该员工已经从公司离职等情况),可以使用userder命令将该用户账号删除。使用该命令也需要指定账号名称作为参数,结合“-r”选项可同时删除宿主目录。
组账号管理
添加,管理,删除组账号
(1)groupadd命令——添加组账号
使用groupadd命令可以添加一个组账号,需要指定GID号时,可以使用“-g”选项。
(2)gpasswd命令——添加,设置,删除组成员
gpasswd命令本来是用于设置组账号的密码,但是该功能极少使用,实际上该命令更多地用来管理组账号的用户成员。需要添加、删除成员用户时,可分别使用“-a”和“-d”选项。
如果需要同时指定组账号的所有成员用户,可以使用”-M“选项
(3)groupdel命令——删除组账号
当系统中的某个组账号已经不再使用时,可以使用groupdel命令将该组账号删除。而添加指定的组账号名称作为参数。
查询账号信息
(1)groups命令——查询用户账号所属的组
使用groups命令可以查看指定用户账号属于那些组。
(2)id——查询用户账号的身份标识
使用id命令可以快速查看指定用户账号的UID、GID等标识信息。
(3)w命令——查询当前主机的用户登录情况
使用w命令可以查询当前主机中的用户登陆情况,列出登陆账号名称,所在终端,登陆时间,来源地点等信息。
管理目录和文件的属性
在Linux文件系统的安全模型中,系统中的文件(或目录)具有两个属性:访问权限和文件所有者,简称权限和归属。其中,访问权限包括读取、写入、可执行三种基本类型,归属包括属主(拥有该文件的用户账号)、属组(拥有该文件的组账号)。Linux操作系统根据文件或目录的访问权限、归属来对用户访问数据的过程进行控制。
查看目录和文件的属性
使用带“l”选项的ls命令时,将以长格式显示文件或目录的详细信息,其中包括该文件的权限和归属等参数。例如,执行以下操作可以列出/etc目录和/etc/passwd文件的详细属性。
极限字段由四部分组成,各自的含义如下所述。
》》第1个字符:表示该文件的类型,可以是d(目录)、b(块设备文件)、c(字符设备文件)、”-“(普通文件)、字母“l”X(链接文件)等。
》》第2~4个字符:表示该文件的属主用户(User)对该文件的访问权限。
》》第5~7个字符:表示该文件的属组内各成员用户(Group)对该文件的访问权限,
》》第8~10个字符:表示其他任何用户(Other)对该文件的访问权限。
》》第11个字符:这里的“.”与SELinux有关,目前不必关注。
在表示属主、属组内用户或其他用户对该文件的访问权限时,主要使用了三种不同的权限字符:r,w,x、"分别表示可读、可写、可执行。若需要去除对应的权限,则用“-”表示。但对于目录来说,他们的具体含义是存在一些差别。
权限 文件 目录
r 查看文件内容 查看目录内容(显示子目录,文件列表)
w 修改文件内容 修改目录内容(在目录中新建,移动,删除文件或子目录)
x 执行该文件(程序或脚本) 执行cd命令进入或退出该目录
若用户在对要访问的文件或目录中不具备相应的权限,则操作将被拒绝。
设置目录和文件的权限
需要设置权限文件或者目录的权限时,主要通过chmod命令进行。在设置针对每一类用户的访问权限时,可以采用两种形式的权限表示方法:字符形式和数字形式。r,w,x权限字符可分别表示为八进制数字4,2,1,表示一个权限组合时需要将数字进行累加。例如”rwx“采用累加数字形式表示”7“
使用chmod命令设置文件或目录权限时,基本的命令格式如下:
chmod [ugoa...] [+-=] [rwx] 文件或目录...或者 chmod nnn 文件或目录...
三个部分组成部分含义及用法如下所述
》》”ugoa“表示该权限设置所针对的用户类型。”u“代表文件属主,”g“代表问及那属组内的用户,”o“代表其他任何用户,”a“代表所有用户(u,g,o的总和)。
》》”+-=“表示设置权限的操作动作。”+“代表增加相应权限,”-“代表减少相应权限,”=“代表仅设置对应的权限。
》》”rwx“是权限的字符组合形式,也可以拆分使用,如”r“,”rx“
在实际的目录权限管理工作中,有时会需要将某一个目录中的所有子目录及文件的权限都设置为相同的值,这时只要结合chmod命令的”-R“选项,chmod命令将只改变所指定目录本的权限。
设置目录和文件的归属
需要设置文件或者目录的归属时,主要通过chown命令进行。可以只设置属主或属组,也可以同时设置属主、属组。使用chowm命令的基本格式如下:
chowm 属主[:[属组]] 文件或目录
同时设置属主、属组时,用户名和组名之间用“”进行分隔。若只设置属组,则需使用“:组名”的形式。
如果只需要设置目录或文件的属主,直接以用户名表示归属即可,递归修改目录归属同样可以使用“-R”选项。
如果同时设置目录和文件的属主,属组,则需要用到分隔符”:“
在Linux操作系统中,设置文件访问权限、归属是目录和文件管理常见的工作内容,很多网络服务或应用程序的安全强化工作实际上都包括了文件权限和归属的修改。因此,在具体工作中应慎重进行,不当的权限设置可能会导致系统故障,甚至带来一些安全隐患。
设置目录和文件的默认权限
unask就是默认指定目前用户在新建文件或目录时的权限默认值。执行“umask022”即可以设置当前用户的默认权限。直接执行“umask”命令就是查看当前系统的默认权限。需要注意的是,umask的分数指的是“该默认值需要减掉的权限”。因此r、w、×分别是4、2、1,如果执行“umask 022”代表group和other被拿掉了权限“2”,也就是被拿掉了“写”权限。