Linux账号和权限管理


用户账号和组账号概述

Linux基于用户身份对资源访问进行控制

1.用户帐号

超级用户、普通用户、程序用户

2.组帐号

基本组(私有组)附加组(公共组)

3.UID和GID

UID (User IDentity,用户标识号)

GID (Group IDentify,组标识号)


用户账号:

超级用户: root 用户是 Linux操作系统中默认的超级用户账号,对本主机拥有最高的权限。 系统中超级用户是唯一的。

普通用户:由root用户或其他管理员用户创建,拥有的权限会受到限制,一般只在用户自己的宿主目录中拥有完整权限。

程序用户:在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,仅用于维持系统或某个程序的正常运行,如bin、daemon、 ftp、 mail等。


组账号:

基本组(私有组):基本组账号只有一个,一般为创建用户时指定的组。 在/etc/passwd文件中第4字段记录的即为该用户的基本组 GID号。

附加组(公共组):用户除了基本组以外,额外添加指定的组。


UID:用户标识号

GID:组标识号

root用户账号的UID和GID号为固定值0

程序用户账号的UID和GID号默认为Centos5,6: 1~499,Centos7: 1~999

普通用户的UID和GID号默认为Centos5,6:500~60000,Centos7: 1000~60000



用户账号文件:

保存用户名称、宿主目录、登录Shell等基本信息

文件位置: /etc/passwd

每一行对应一个用户的帐号记录

基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改。

在早期的UNIX操作系统中,用户帐号的蜜码信息是保存在passwd文件中的,不法用户可以很容易的获取蜜码字串并进行暴力pojie,因此存在一定的安全隐患。 后来经改进后,将蜜码转存入专门的shadow文件中,而passwd文件中仅保留蜜码占位符"x"。



我们可以通过“vim”去查看修改这个目录下的配置文件

Linux账号和权限管理_用户名


每一行可分为七个字段

例:root:x:0:0: root: /root: / bin/bash

字段1:用户帐号的名称

字段2:用户蜜码占位符“x”

字段3:用户帐号的UID号

字段4:所属基本组帐号的GID号

字段5:用户全名

宁段6:宿主目录

字段7:登录shell信息(/bin/bash为可登陆系统,/sbin/nologin和/bin/false为禁止用户登陆系统)




用户账号文件

用于保存用户的蜜码,账号有效期等信息

文件位置:/etc/shadow

每一行对应一个用户的蜜码记录

默认只有root用户能够读取shadow 文件中的内容,且不允许直接编辑该文件中的内容。


Linux账号和权限管理_用户账号_02

每一行可分为9个字段:

例:root:$6$VyOUGqOC$v5HlLMIwagZC/FwGfnrtJFnlT:18445:0:99999:7: : :

字段1:用户帐号的名称

字段2:使用MD5加密的蜜码字串信息,当为"*"或"!!" 时表示此用户不能登录到系统。 若该字段内容为空,则该用户无须蜜码即可登录系统

字段3:上次修改蜜码的时间,表示从1970年01月01日算起到最近一次修改蜜码时间隔的天数

字段4:蜜码的最短有效天数,自本次修改蜜码后,必须至少经过该天数才能再次修改蜜码。 默认值为0,表示不进行限制

字段5:蜜码的最长有效天数,自本次修改蜜码后,经过该天数以后必须再次修改蜜码。 默认值为99999,表示不进行限制

字段6:提前多少天警告用户蜜码将过期,默认值为7

字段7:在蜜码过期之后多少天禁用此用户

字段8:帐号失效时间,此字段指定了用户作废的天数(从1970年01月01日起计算),默认值为空,表示账号永久可用。

字段9:保留字段(未使用)



添加用户账号

useradd + 用户名

adduser + 用户名

在/etc/passwd文件和/etc/shadow文件的末尾增加该用户账号的记录。

若未明确指定用户的宿主目录,则在/home目录下自动创建与该用户账号同名的宿主目录,并在该目录中建立用户的各种初始配置文件。

若没有明确指定用户所属的组,则自动创建与该用户账号同名的基本组账号,组账号的记录信息将保存到/etc/group和/etc/gshadow文件中

例:

Linux账号和权限管理_用户账号_03


添加之后我们可以通过命令“vim /etc/passwd”来查看是否添加成功

在最下面我们可以看到已经添加成功了(按“shift:q+回车键退出”)

Linux账号和权限管理_用户账号_04


常用选项:

-u:指定用户的UID号引,要求该UID号码未被其他用户使用。

-d:指定用户的宿主目录位置(当与-M一起使用时,不生效)。 只能用绝对路径指定目录,且不需要事先创建目录

-e:指定用户的账户失效时间,可使用YYYY-MIM-DD的日期格式。

-g:指定用户的基本组名(或使用GID号),对应的组名必须已存在。

-G:指定用户的附加组名(或使用GID号),对应的组名必须已存在。

-M:不建立宿主目录。

-s:指定用户的登录shell,(比如/bin/bash为可登陆系统,/sbin/nologin和/bin/false为禁止用户登陆系统)。


例:useradd -u 9527 -d /lsp -g zhangsan -G lisi jyp

Linux账号和权限管理_主目录_05

创建一个UID号为9527 宿主目录位于/lsp 基本组名为zhangsan 附加组名为lisi 的jyp用户

注意:基本组,附加组对应的组名必须已存在,另外注意不能创建多层目录例如:“/zzz/lsp”


这时我们“cd /”切换到根目录下输入"ls" 查看可以看到已生成一个“lsp”的目录

Linux账号和权限管理_用户名_06


我们也可通过命令”vim /etc/passwd"查看到最后一行已创建一个“jyp”用户的详细信息

Linux账号和权限管理_用户名_07


Linux账号和权限管理_字段_08


最后我们可以通过命令“id jyp”可以查看到“jyp”用户所属的组

Linux账号和权限管理_主目录_09



设置/更改用户口令passwd

命令格式:passwd [选项] ... 用户名


上面我们创建了“jyp”用户但却不会在开机登录界面显示,因为我们并没有将其激活

我们可以通过命令“passwd jyp”并为他设置一个蜜码将其激活

注:蜜码需确认两次,例如”123456“,若提示无效的蜜码,蜜码少于8个字符,不用管他,可以直接设置成功

Linux账号和权限管理_用户名_10



通过“passwd"这个命令

root用户可以指定用户名作为参数,对指定账号的蜜码进行管理; 不指定用户名时,修改当前账号的蜜码。

普通用户却只能执行单独的"passwd"命令修改自己的蜜码。


常用选项

-d:清空指定用户的蜜码,仅使用用户名即可登录系统。

-l:锁定用户账户,锁定的用户账号将无法再登录系统。

-s:查看用户账户的状态(是否被锁定)。

-u:解锁用户账户。


例:命令”passwd -d“ 加上我们刚创建的”jyp“用户

Linux账号和权限管理_主目录_11

这是我们可以通过命令”vim /etc/shadow"

可以查看到文件里最后一行“jyp”用户的第二个蜜码字符串已变成空的(注:进入文件后按大写的“G”可以直接切换到文件最后一行)

Linux账号和权限管理_字段_12



修改用户账号的属性usermod

命令格式:usermod [选项] ... 用户名


常用选项

-u:修改用户的UID号。

-d:修改用户的宿主目录位置。

-e:修改用户的账户失效时间,可使用YYYY-MM-DD的日期格式。

-g:修改用户的基本组名(或使用GID号)。

-G:修改用户的附加组名(或使用GID号)。

-s:指定用户的登录shell。

-l:更改用户账号的登录名称。

-L:锁定用户账户。

-U:解锁用户账户。


例:usermod -u 9528 -g lisi -G zhangsan jyp

#将”jyp“用户的UID号修改为9528 ,基本组改为lisi ,附加组改为zhangsan

首先我们通过命令“id jyp”可以查看到他的UID GID 号和所属的组

Linux账号和权限管理_主目录_13

这是我们输入命令“usermod -u 9528 -g lisi -G zhangsan jyp”去修改

Linux账号和权限管理_用户名_14

可以看到我们需要修改的已经变更完成了



删除用户账号userdel

命令格式:userdel [-r] 用户名

添加-r选项时,表示连用户的宿主目录一并删除

例:通过命令“userdel jyp”删除“jyp”这个用户,我们可以输入“vim /etc/passwd”查看到最后一行我们刚刚创建的“jyp”用户已经没有了


Linux账号和权限管理_bash_15


Linux账号和权限管理_用户账号_16


Linux账号和权限管理_用户名_17



用户账号的初始配置文件

文件来源:

useradd命令添加一个新的用户账号后会在该用户的宿主目录中建立一些初始配置文件。

这些文件来自于账号模板目录/etc/skel,基本上都是隐藏文件。

主要的用户初始配置文件:

用户宿主目录下的初始配置文件只对当前用户有效

~/.bash_profile

#此文件中的命令将在该用户每次登录时被执行,它会设置一些环境变量,并且会调用该用户的~/ .bashrc文件

~/.bashrc

#此文件中的命令会在每次打开新的bash shell时(也包括登录系统)被执行,并且会调用/etc/bashrc文件

~/.bash_logout

#此文件中的命令将在用户每次退出登录或退出bash shell时执行


全局配置文件对所有用户有效

/etc/profile

#这个文件是为系统全局变量配置文件,可通过重启系统或者执行source /etc/profile 命令使profile文件被读取


/etc/profile.d/

#这个文件实际上是/etc/profile的子目录,存放的是一些应用程序所需的启动脚本


/etc/bashrc

#每一个运行bash shell的用户都会执行此文件,可通过执行bash 命令打开一个新的bash shell时,使 bashrc文件被读取



PATH变量用于设置可执行程序的默认搜索路径

PATH生效的原理:

每次启动系统的时候会初始化命令,会执行/etc/profile和~/.bash profile ;

/etc/profile会将路径/usr/local/bin、/usr/bin、/usr/local/sbin 、/usr/sbin追加到PATH中去。 然后调用/etc/profile.d目录下的脚本。


组账号文件

与用户账号文件相类似

/etc/group:保存组帐号基本信息

/etc/gshadow:保存组帐号的蜜码信息


我们可以通过命令:vim /etc/group来查看组账号信息

Linux账号和权限管理_bash_18


Linux账号和权限管理_字段_19


每一行分四段:

字段1:组帐号的名称

字段2:占位符"x"

字段3:组账号的GID号

字段4:组账号包含的用户成员(一般不包括基本组对应的用户帐号),多个成员之间以逗号","分隔


添加组账号 groupadd

命令格式:

groupadd [-g GID号]组账号名

例:

组加 -g 1006 哈哈

Linux账号和权限管理_用户名_20

我们可以通过命令:vim /etc/group 查看到在文件最后一行我们刚刚添加的组账号已经加进去了,GID号为1006

Linux账号和权限管理_主目录_21

注:若不指定GID号则GID号沿着上一个创建的GID号的基础上加一,例:若上一个GID号为1000,则GID号就是1001。


添加删除组成员gpasswd

”gpasswd“这个命令也可用于设置组账号蜜码,但很少用


命令格式:gpasswd [选项] ... 组帐号名


常用选项:

-a:向组内添加一个用户

-d:从组内删除一个用户成员

-M:定义组成员列表,以逗号分隔

可以理解为将原来一个组中的成员给覆盖掉,就是说之前这个组中的用户会全部删,除换成你刚刚加入的组成员

例:在刚刚创建的“jyp”组中添加zhangsan作为组成员

Linux账号和权限管理_用户名_22

我们可以通过命令“vim /etc/group"查看到”jyp“用户组中zhansan已经加入其中了

Linux账号和权限管理_用户名_23



例:删除刚刚加入”jyp“用户的组成员zhangsan

Linux账号和权限管理_bash_24

我们再通过命令“vim /etc/group"去查看,可以看到zhangsan已经再”jyp“用户的组中删除了

Linux账号和权限管理_用户账号_25



例:定义”jyp“用户的组成员为zhangsan,lisi

Linux账号和权限管理_字段_26

对比上上一张图片可以看到”jyp“用户的组成员"jyp" 已经被删除了,换成了zhangsan,lisi

Linux账号和权限管理_主目录_27



删除组账号groupdel

命令格式:groupdel 组账号名

例:groupdel lol

Linux账号和权限管理_bash_28

对比上一张图,最后一个lol组账号已经被删除了



查询账号信息

groups命令(查询用户所属的组)

命令格式:groups [用户名]

例:群李斯

Linux账号和权限管理_字段_29

可以看到lisi基本组是lisi ;附加组是jyp


id命令

命令格式:id [用户名](查看UID,GID号和所属组标识号信息)

例:id lisi

Linux账号和权限管理_用户账号_30



finger命令

命令格式:finger [用户名]

用于查询用户账号的登录属性

注:需要先进行安装finger软件包,可通过“yum”安装这个软件包(命令:“yum install -y finger”)


Linux账号和权限管理_用户账号_31


例:finger root 查看root用户登录属性

Linux账号和权限管理_字段_32


w,who,users命令

用于查询当前已登录到主机的用户信息

例:w

Linux账号和权限管理_字段_33

例:who 就是直接显示当前登录的用户名 通过命令”who | wc -l“ 可以快速看到几个用户登录

Linux账号和权限管理_主目录_34


Linux账号和权限管理_字段_35




文件/目录的权限和归属

访问权限:

1.读取 r : 允许查看文件内容、显示目录列表

2.写入 w : 允许修改文件内容,允许在目录中新建、移动、删除文件或子目录

3.可执行 x : 允许运行程序、切换目录

归属(所有权)

1.属主: 拥有该文件或目录的用户帐号

2.属组: 拥有该文件或目录的组帐号


Linux账号和权限管理_主目录_36


以下几种权限位组合可供参考:

---

0

--x

1

-w-

2

-wx

3

r--

4

r-x

5

rw-

6

总机>

7



设置文件和目录的权限chmod


Linux账号和权限管理_bash_37


上图 u、g、o、a 分别表示

属主、属组、其他用户、所有用户;


+、-、= 分别表示

增加、去除、设置权限


r、w、x 分别表示

读、写、运行权限


常用选项: -R:递归修改指定目录下所有子项的权限



例:首先我们创建个目录,再在这个目录下创建一个文件

通过命令:“ll”可以查看到当前文件权限


Linux账号和权限管理_用户账号_38


Linux账号和权限管理_字段_39


我们通过命令:“chmod u-w test.txt" 去除属主的可写权限

Linux账号和权限管理_用户名_40


若是不加上”u、g、o“这些用户类型则代表所有

例:"chmod +x test.txt"


Linux账号和权限管理_主目录_41


注:“u、g、o“这些用户类型与权限也可以组合使用

例:

Linux账号和权限管理_用户名_42



设置文件和目录的归属chown

命令格式:

chown 属主 文件或目录

chown :属组 文件或目录

chown 属主:属组 文件或目录

例:"chown zhangsan test.txt" 将"test.txt"文件的属主改为zhangsan


Linux账号和权限管理_用户账号_43


Linux账号和权限管理_字段_44


例:将"test.txt"文件属主与属组都改为root(注:命令"chown root:root test.txt" 中间的 ":" 可以换成 "." 效果是一样的)


Linux账号和权限管理_用户名_45


补充:(有另一个命令也可用于修改”属组“,例:"chgrp zhangsan test.txt" 更方便一点)


Linux账号和权限管理_bash_46



设置目录和文件的默认权限umask

umask作用:

1.控制新建的文件或者目录的权限

2.默认权限去除umask的权限为新建的文件或者目录的权限

umask设置: umask 022

umask查看: umask


对于Linux系统来讲

普通文件的最大默认权限为 6 (rw-)

目录的最大默认权限为 7 (rwx)

umask 默认值为 022



我们来创建一个新文件和一个新目录可以看到它们的默认权限分别为644(rw-r--r--) ,755(rwxr-xr-x)

Linux账号和权限管理_bash_47


对于文件来讲,用普通文件的最大默认权限666上下对齐减去umask 默认值为022可得权限为644与上图新建的文件一致

对于目录来讲,用目录的最大默认权限777上下对齐减去umask 默认值为022可得权限为755与上图新建的目录一致

由此可见默认权限是由umask决定的;相对应的若是修改umask的值(可以通过命令:"umask+xxx"修改umask的值),文件或目录的默认权限也会随之发送变化。

注:若umask为任意值"xxx"目录权限777减去umask的值为奇数,则再减去1变成偶数,则就是当前创建目录的默认值权限

由于文件的默认权限为偶数(因为只有可读可写的权限),777减去umask后得出的是奇数,则需再减1变成偶数,由此得到当前创建文件的默认权限





















------以上就是Linux账号和权限管理的一些知识,谢谢!