目录
前言:
Linux操作系统中,用户对资源的访问进行了限制,对访问用户也有一定的要求,而这里我们
就了解一下用户的账号以及权限,从而达到控制资源访问的目的。
一、账号分类及各种区别
基于用户身份来控制对资源的访问,我们将用户用来登陆的账户分为用户账号和组账号。
Linnux系统中他们的作用在本质上是一样的,只不过表现形式及个别细节方面存在差异。
1、用户账号(UID号)
每一个 用户账号都有一个数字形式的身份标记,称为UID(用户标识号),对于系统核心来说,
UID作为区分用户的基本依据,原则上每个用户的UID号应该是唯一的。Root用户账号的UID号为
固定值0;程序用户账号的UID号默认为1 ~ 999;普通用户账号的UID号默认为1000 ~ 60000。
Linux系统中依据系统管理的需求不同,而导致账号的类型、其拥有的权限、担任的角色也是
各不相同的,所以将用户账号主要分为以下三类。
⑴、超级用户
Root用户是Linux系统中默认的超级用户账号,对主机拥有最高的权限,即管理员账号。只有
当进行系统管理、维护任务时,才建议使用root用户,日常事务处理建议只使用普通用户账号。
⑵、普通用户
普通用户账号需要root用户或其他管理员用户创建,拥有的权限受到一定的限制,一般只在用
户自己的宿主目录中拥有完整权限。
⑶程序用户
在安装Linux系统即部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允
许登陆到系统,而仅用于维持系统或某个程序的正常运行。仅限于应用程序中。
2、组账号
⑴、简介以及GID号
对于用户账号来说,对应的组账号可以分为基本组(私有组)和附加组(公共组)。每一个用户账号可以是多个组账号的成员,但是基本组账号只有一个。在“/etc/passwd”文件中第四个字段记录的就是该用户的进本组GID号(组标识号)。
⑵、基本组和附加组
基本组:创建用户时指定的组为基本组,基本组账号只有一个
附加组:除了基本组以外的,额外添加指定的组
二、用户账号详解
1、用户账号文件
与用户账号相关的配置文件主要有两个,分别为/etc/passwd、/etc/shadow。
⑴、passwd文件
系统中所有的账号,用户名称、宿主目录、登陆shell等基本信息都保存在“ /etc/passwd ” 文件
中,该文件是文本文件,任何用户都可以读取访问文件中的内容,但是只有root用户才能进行改。
Passwd文件中的配置行格式:
在passwd文件的开头部分,包括超级用户root及个程序用户的账号信息,系统中新增加的账
号信息将保存到passwd文件的末尾。每个用户信息内容包含了七个用冒号“ :”分隔开的配置段,
含义分别如下:
①、第1字段:用户账户的名称,也是登陆系统时使用的识别名称。
②、第2字段:经过加密的用户密码字串,或者密码占位符“x”。(早期用户密码信息保存在passwd
文件中,不法用户可以获取密码字串进行暴力破解,这样账号安全就存在一定的隐患。因此后来将
密码转存入shadow文件中,而在passwd中仅保留密码占位符“x”)。
③、第3字段:用户账号的UID号。
④、第4字段:所属基本组账号GID号
⑤、第5字段:用户全名,可填写与用户相关的说明信息。
⑥、第6字段:宿主目录,及该用户登陆后所在的默认工作目录。
⑦、第7字段:登陆shell等信息,用户完成登陆后使用的shell。
⑵、shadow文件
用户的密码、账号有效期等信息都保存在shadow文件中,Shadow文件又被称为“影子文件”。
因为有密码信息,所以对shadow文件的访问应该进行严格限制,只有root用户才能够读取shadow
文件中的内容,而不允许直接编辑该文件中的内容。
Shadow文件中的配置行格式:
Shadow文件每一行对应一个用户密码记录,它们用冒号“ :”分隔为九个配置字段,从左到右
各个配置字段含义分别如下所述:
①、第1字段:用户账号名称。
②、第2字段:使用MD5加密的密码字串信息,当为 “*” 或 “!!”时表示此用户不能登录到系统。
若该字段为空,则该用户无需密码即可登陆系统。新用户创建也是“!!”。如果密码前面显示双感叹
号表示该账户被锁定了。
③、第3字段:上次修改密码的时间,从1970年01月01日(1970年是linux的诞生日)算起,到
最近一次修改密码时间间隔的天数。
date -d "1970-01-01 18884 days"可以转换为具体的日期显示。
④、第4字段:密码最短有效天数。自本次修改密码后,必须经过该天数以后才能再次修改密码。
默认值为0,表示不进行限制。
⑤、第5字段:密码最长有效天数。自本次修改密码后,必须经过该天数以后必须再次修改密码。
默认值为99999,表示不进行限制。
⑥、第6字段:提前多少天警告用户密码将过期,密码到期前的第几天发出告警信息,默认是7天,
每次登录系统都会向该账户发出 "修改密码" 的警告信息。
⑦、第7字段:在密码过期之后多少天内禁用此用户。系统将不再让此账户登陆,也不会提示账户
过期,是完全禁用。
⑧、第8字段:账号失效时间,使用自1970年1月1日以来的总天数作为账户的失效时间。默认值为
空,表示账号永久可用。
⑨、第9字段:保留字段,未使用。
⑶、用户账户的初始配置文件
添加一个新的用户账号后, useradd命令会在用户的宿主目录中建立一些初始配置文件。这些
文件来自于账号模板目录“/et/skel/”,基本上都是隐藏文件,较常用的初始配置文件包括“.bash_
logout”、“. bash_profile”、“ .bashrc”。其中“. bashrc_profile”文件中的命令将在该用户每次登录时
执行;“. bashrc”文件中的命令会在每次加载“bin/Bash”程序时(当然也包括登录系统)执行;而
“ bash_logout”文件中的命令将在用户每次退出登录时执行。理解这些文件的作用,可以方便我们
安排一些自动运行的后台管理任务。
在“.bashrc”等文件中,可以添加用户自己设置的可执行语句( Linux命令行、脚本控制语句
等),以便自动完成相应的任务。例如,希望为所有用户添加登录后自动运行的命令程序、自动设
置变量等,可以接修改“/etc”目录下的类似文件,如“/etc/bashrc”、“/etc/ profile”文件。
2、用户账号管理(命令)
⑴、useradd命令——添加用户账号
命令格式:useradd 【选项】 用户名
使用useradd命令添加用户账号时主要完成①/在/etc/ passwd文件和/etc/ shadow文件的末尾
加该用户账号的记录。②、若未明确指定用户的宿主目录,则在/home目录下自动创建与该用户账
号同名的宿主目录,并在该目录中建立用户的各种初始配置文件。③、若没有明确指定用户所属的
组,则自动创建该用户账号同名的基本组账号,组账号的记录信息将保存到/etc/group、/etc/
gshadow文件中。
useradd常用选项及含义如下:
选项 | 含义 |
指定用户的宿主目录位置(当与-M一起使用时,不生效)。 | |
e | 指定用户的账号失效时间,可以使用YYYY-MM-DD的日期格式。 |
g | 指定用户的基本组名(或使用GID号)。 |
G | 指定用户的附加组名(或使用GID号)。 |
s | 指定用户的登陆shell。 |
u | 指定用户的UID号,要求该UID号码未被其他用户使用。 |
M | 不建立宿主目录,即使/etc/login.defs系统配置中已设定要建立宿主目录 |
【root@localhost ~】#useradd -e yyyy-mm-dd -s /sbin/nologin admin
表示创建admin用户账户,指定该用户账户失效时间,并设置该用户不能登陆shell.
⑵、passwd命令——设置/更改用户口令
命令格式:passwd 【选项】…… 用户名
通过 useradd命令新增用户账号以后,还需要其设置一个密码才能够正常使用。使用passwd
命令可以设置或者修改密码,root用户有权管理其他账号的密码(指定账号名称作为参数即可)。
普通用户只能执行单独的“passwd”命令修改自己的密码。
passwd命令相关选项如下:
选项 | 含义 |
l | 锁定用户账户 |
u | 解锁用户账户 |
d | 清空指定用户的密码,仅使用用户名即可登陆系统 |
S | 查看用户的状态(是否被锁定) |
注:锁定以后,用户将无法在登陆系统,只能由管理员来解除锁定。而使用usermod命令锁
定用户账户,对应密码字串前只添加了一个“ !”号。
⑶、usermod命令——修改用户账号属性
命令格式:usermod 【选项】 用户名
对于系统中已存在的账户可以使用usermod命令重新设置各种属性。usermod命令同样需要指
定账号名称作为参数。
usermod命令常用的选项如下:
选项 | 含义 |
L | 锁定用户账户 |
U | 解锁用户账户 |
l | 更改用户账号的登陆名称 |
d | 指定用户的宿主目录位置(当与-M一起使用时,不生效)。 |
e | 指定用户的账号失效时间,可以使用YYYY-MM-DD的日期格式。 |
g | 指定用户的基本组名(或使用GID号)。 |
G | 指定用户的附加组名(或使用GID号)。 |
s | 指定用户的登陆shell。 |
u | 指定用户的UID号,要求该UID号码未被其他用户使用。 |
usermod命令选项u、d、e、g、s、G的含义与useradd命令选项含义相同。
⑷、userdel命令——删除用户账号
命令格式:userdel 【-r】 用户名
注:添加选项-r时,表示连用户的宿主目录一并删除。
三、组账号详解
1、组账号文件
与组账号相关的配置文件有两个,分别是/etc/group、/etc/gshadow。前者用于保存组账号名
称、GID号、组成员等基本信息,后者用于保存组长号的加密密码字串等信息(少用)。某一个组
账号包含哪些用户成员,将会在group文件内最后一个字段中体现出来(基本组对应的用户账号默
认可能不会列出),多个组成员之间使用逗号“ ,“分隔。
2、组账号管理(命令)
⑴、添加组账号——groupadd命令
使用groupadd命令可以添加一个组账号,需要指定GID时,可以使用“-g“选项。
⑵、添加、设置、删除组成员——gpasswd命令
命令格式:gpasswd 【选项】 ……组账号名
gpasswd命令常用选项有:
选项 | 含义 |
a | 向组内添加一个用户 |
d | 从组内删除一个用户成员 |
M | 定义组成员列表,以逗号分隔 |
⑶、删除组账号——groupdel命令
命令格式:groupdel 组账号名
四、查询账号信息
⑴、查询用户账号的身份标识——id命令
命令格式:id 【用户名】
⑵、查询用户账号所属的组——groups命令
命令格式:groups 【用户名】
⑶、查询用户账号的登陆属性——finger命令
命令格式:finger 【用户名】
可以查询指定的用户账号的登陆属性等详细信息,包括登陆名称、完整名称、宿主目录、登陆shell等。
⑷、查询当前主机的用户登陆情况——w
可以列出登陆账号名称、所在终端、登陆时间、来源地点等信息。还有who、users命令也拥有同样的作用。
五、文件和目录的权限及归属
Linux系统中,为文件或目录赋予了两个属性:访问权限和文件所有者,简称为“权限“和”归
属“。其中,访问权限包括读取、写入、可执行三种基本类型,归属包括属主(拥有该文件的用户
账号)、属组(拥有该文件的组账号)。Linux系统根据文件或目录的访问权限、归属来对用户访
问数据的过程进行控制。Root用户是系统的超级用户,拥有完全的管理权限。
1、访问权限介绍
权限 | 权限简介 | 文件 | 目录 |
r | 读取 | 查看文件内容 | 查看目录内容(包含子目录、文件列表) |
w | 写入 | 修改文件内容 | 修改目录内容(在目录中新建、移动、删除文件或子目录) |
x | 执行 | 执行该文件(程序或脚本) | 执行cd命令进入或退出该目录 |
在表示属主、属组内用户或其他用户对该文的访问权限时,主要使用了三种不同的权限字
符:r、w、x,分别表示可读、可写、可执行,r、w、x权限字符也可分别表示为八进制数字4、2、
1,表示一个权限合时需要将数字进行累加。若需要去除对应的权限,则使用“-”表示。
2、查看文件/目录的权限及归属
使用带“-l”选项的ls命令时,将以长格式显示文件的详细信息,其中包括了该文件的权限和归
属等参数。在图输出信息中,第一行第3、4个字段的数据分别示该文件的属主、属组,而第1个字
段的数据表示该文件的访间权限,如“-rw-r—r--”。权限字段由四部分成,各自的含义如下所述:
●第1个字符:表示该文件的类型,可以是d(目录)、b(块设备文件)、c(字符设备文件)、
“-”(普通文件)、字母“1”(链接文件)等。
●第2~4个字符:表示该文件的属主用户(User)对该文件的访问权限。
●第5~7个字符:表示该文件的属组内各成员用户( Group)对该文件的访问权限。
●第8~10个字符:表示其他任何用户(Other)对该文件的访问权限。
●第11个字符:这里的“.”与 SELinux有关,目前不必关注。
3、设置文件/目录的权限及归属
⑴、设置权限——chmod
命令格式:chmod 【ugoa】 【+-=】 【rwx】 文件或目录
或者:chmod nnn 文件或目录 (注:n代表权限相加的数字,三位八进制数。)
上述格式中,字符组合“[ugoa…][+-=] [rwx]”或数字组合“nnn”的形式表示要设置的权限模式。其中,“nnn”为需要设置的具体权限值,如“755”“644”等;而“[ugoa…][+-=][rwx]”的形式中,三个组成部分的含义及用法如下所述:
①、“ugoa”表示该权限设置所针对的用户类别。“u”代表文件属主,“g”代表文件属组内的用户,“o”代表其他任何户,“a”代表所有用户(u、g、o的总和)。
②、“+-=”表示设置权限的操作动作。“+”表增加相应权限,“-”代表减少相应权限,“=”代表仅设置对应的权限。
③、“rwx”是权限的字符组合形式,也可以拆分使用,如“r” “rx”等。
注:给目录设置权限时会用到选项“R“,表示递归修改执行目录下所有子项的权限。
⑵、设置归属——chown
命令格式:chown 属主 文件/目录 (只设置属主归属)
chown :属组 文件/目录 (只设置属组归属)
chown 属主:属组 文件/目录 (同时设置属主、属组,用冒号隔开)
设置目录归属时有选项“R“,递归修改指定目录下所有文件、子目录的归属。并且设置这些参数必须在root权限下。
⑶、权限掩码——umask
命令格式:umask mmm (m指默认值需要减掉的权限的数的和)
umask就是默认指定目前用户在新建文件或目录时的权限默认值。直接执行umask命令可以查看当前系统的默认权限。
作用:控制新建文件或目录的权限;默认权限去除umask的权限为新建的文件或目录的权限。如执行命令“umask 000“,代表文件的认权限是”777”。
六、其他扩展命令
1、列出用户登陆系统的相关信息——last
该命令用来列出目前与过去登录系统的用户相关信息。命令所在路径:/usr/bin/last。执行last命令时,它会读取位于/var/log目录下名称为wtmp的文件,并把该给文件的内容记录的登录系统的用户名单全部显示出来。默认是显示wtmp的记录,btmp能显示的更详细,可以显示远程登录,例如ssh登录。utmp文件中保存的是当前正在本系统中的用户的信息。 wtmp文件中保存的是登录过本系统的用户的信息。
⑴、命令输出字段介绍:
第一列:用户名
第二列:终端位置。pts/0 (伪终端) 意味着从诸如SSH或telnet的远程连接的用户.tty (teletypewriter) 意味着直接连接到计算机或者本地连接的用户
第三列:登录ip或者内核 。如果你看见:0.0 或者什么都没有,这意味着用户通过本地终端连接。除了重启活动,内核版本会显示在状态中。
第四列:开始时间
第五列:结束时间(still login in 还未退出 down 直到正常关机 crash 直到强制关机)
第六列:持续时间
⑵、命令格式:
last [-R] [-num] [ -n num ] [-adiowx] [ -f file ] [ -t YYYYMMDDHHMMSS ] [name...] [tty...]
命令参数:
-a:将登录系统的的主机名称或IP地址,显示在最后一行
-d:将IP地址转换成主机名称
-f:指定记录文件,默认是显示/var/log目录下的wtmp文件的记录,但/var/log目录下得btmp能显示的内容更丰富,可以显示远程登录,例如ssh登录 ,包括失败的登录请求。
-i:-i显示特定ip登录的情况。跟踪用 -i显示特定ip登录的情况。跟踪用
-o:Read an old-type wtmp file (written by linux-libc5 applications).
-n:-n <显示行数>或-<显示行数> 设置显示多少行记录
-w:Display full user and domain names in the output
-R:不显示登入系统的主机名称或IP(省略 hostname 的栏位)
-t:显示YYYYMMDDHHMMSS之前的信息
-x:显示系统关闭、用户登录和退出的历史
2、修改账号和密码的有效期限——chage
命令格式:chage [选项] 用户名
chage命令,用来修改帐号和密码的有效期限,针对目前系统已经存在的用户。其选项如下:
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。chage -M 60 root
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
总结:
学习管理用户账号、组账号;掌握查询账号信息,学会设置文件或者目录的权限和归属是管理员常见的工作内容,很多网络服务或应用程序的安全强化工作实际上也包含可文件权限和归属的修改。