Bootstrap

Linux之用户组群及权限篇

目录

一. 了解用户及用户组

1.1 用户分为了三种类型的用户:

1.2 UID

1.3 用户组

1.4 用户账户文件

1.4.1    /etc/passwd

1.4.2 /etc/shadow 

1.4.3 用户账号的初始配置文件

二. 用户账号的创建和管理

2.1 useradd命令

2.2 passwd命令

2.3 usermod命令

2.4 userdel命令

三. 组群管理

3.1 组账号文件

3.2 groupadd或者addgroup命令

3.3 groupmod命令

3.4 groupdel命令

3.5 gpasswd命令

四. 修改文件权限命令

chomd命令

五. 修改文件所有者及所属组命令

chown命令

六. 文件的隐藏属性

6.1 chattr命令

6.2 lsattr命令

七. 查询用户

 7.1 finger 命令

7.2 w 命令

7.3 Who 命令

八. 拓展

8.1 umask

8.2 访问控制列表 ACL


一. 了解用户及用户组

1.1 用户分为了三种类型的用户:

a. 超级管理员(UID为0)                                   拥有至高无上的权限,是系统的管理员用户

b. 程序(系统)用户(UID为1~999)                     不是给人类使用的,是给程序使用的

c. 普通用户centos7(UID为从1000开始)        权限受到限制的用户,由管理员创建的用于日常工作的用户

1.2 UID

超级管理员(UID为0)                             

程序(系统)用户(UID为1~999)      

普通用户centos7(UID为从1000开始) 

注: Linux系统的管理员之所以是root,并不是因为它的名字叫root,而是因为该用户的身份号码即UID的数值为0。在Linux系统中,UID就相当于我们的身份证号码一样具有唯一性。因此能不能打开文件与用户有关,用户有用户自己的权限系统,可以通过用户的UID值来判断用户的身份。

1.3 用户组

通过使用用户组号码,可以把多个用户加入同一个组中,方便为组中的用户统一规划权限或指定任务。在Linux系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳其他用户组,则这个其他用户组称为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,来满足日常工作需要。

1.4 用户账户文件

1.4.1    /etc/passwd

作用:存放用户信息。

以下面的例子为样,例举这个文件的构造并进行解释:

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

用冒号隔开,分为7个域(段),分别对应以下内容:

账号名称:用来对应UID

口令

UID使用者标识。

GID与/etc/group有关。

用户信息说明栏:没什么重要用途,只是解释这个账号的意义。但是如果使用finger的功能时,这个字段可以提供很多的信息。

家目录:用户登录后,就会跑到家目录里。如果想要将该账号的家目录移动到其他硬盘应该怎么做,前提是?可以在这个字段进行修改,默认的用户家目录在/home/yourename。

Shell:当用户登录系统后就会取得一个shell来与这个系统的核心沟通进行用户的操作任务。

1.4.2 /etc/shadow 

作用:存放密码

以下为例分析其每段的具体含义:

root:  $1$/30QpE5e$y9N/D0bh6rAACBEz.hqo00:  14126:  0:  9999:  7:  :  :

同样用冒号隔开,一共九个字段,具体用途如下:

账号名称:口令需要与账号对应,所以这个文件的第一栏就是账号,必须要与/etc/passswd相同才行。

口令:这个字段内的数据才是真正的口令,而且是经过编码加密的口令。这个文件的默认权限是“rw-------”或者是“-r-------”,亦即只有root才可以读写。各种口令编码的技术不一样,会使得这个字段的长度不同。

最近更改口令的日期:这个字段记录了"更改口令日期的那一天"的日期。不过14126是如何得来的呢?计算Linux日期时间是以1970年1月1日作为1而累加的日期,那么1971年1月1日就是366,那14126指的就是2008-09-04那一天。至于想要知道某个日期的累积日数,可以使用如下的程序计算:

echo  $(($date  --date="2008/09/04"+%s)/86400+1)--------------->14126

这个命令中,2008/09/04是想要计算的日期,86400为每一天的秒数,%s为1970/01/001以来积累的总秒数。由于bash仅支持整数,因此最终需要加上1补齐1970/01/01当天。

口令不可被变动的天数:这第四个字段记录了这个账号的口令最近一次被更改后需要几天才可以再被变更!如果是0的话,表示口令随时可以更改。这的限制主要是为了怕被某些人一改再改而设计的!如果配置的是20天,那意思就是20天之内都无法改变这个口令。

口令需要重新变更的天数:经常变更口令是个好的习惯!为了强制要求用户变更口令,这个字段可以指定在最近一次更改口令后,在多少天内需要再次变更口令才行,你必须在这个天数内重新配置你的口令,否则这个账号将会“变为过期特性”。而像9999的话,就表示口令的变更没有强制性。

口令需要变更期限前的警告天数:当账号的口令的期限有限期快要到的时候,系统会依据这个字段的配置,发出警告给这个账号,提醒"再过n天你的口令就要过期了,请尽快重新配置你的口令",如上面的例子,则是口令到期之前的7天之内,系统会警告该用户。

口令过期后的账号宽限时间(口令失效日)口令有效日期为"升级日期(第3字段)"+"重新变更日期(第5字段)",过了该期限后用户依旧没有升级口令,那么该口令就算过期了。虽然口令过期了但是该账号还可以用来进行其他工作的,包括登录系统取得bash。不过口令过期了,当你登陆系统时,系统会强制要求你必须重新配置口令才能登录继续使用,这就是口令过期特性。

这个字段的功能是在口令过期几天后,如果使用者还是没有登录更改口令,那么这个账号的口令将会失效,亦即该账号再也无法使用该口令登录了。要注意口令过期与口令失效并不相同。

账号失效日期:这个日期跟第3个字段一样,都是使用1970年以来的总日数配置。这个字段表示:这个账号在此字段规定的日期之后,,将无法再使用。就是所谓的账号失效,此时不论你的口令是否过期,这个账号都不能再被使用!这个字段会被使用通常应该是在收费服务的系统中,你可以规定一个日期让该账号不能再使用。

保留:最后一个字段是保留的,看以后有没有新功能加入。

1.4.3 用户账号的初始配置文件

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

~/ .bash_profile

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

~/.bashrc

此文件中的命令将在该用户每次打开新的bash shell时(包括登录系统)被执行(登录 切换 新的bash环境)

~/.bash_logout

此文件中的命令将在该用户每次退出时bash shell时使用

/etc/bashrc        

二. 用户账号的创建和管理

2.1 useradd命令

作用:useradd命令用于创建新的用户,添加新的用户账号,并对新用户进行一些个性化的设置

格式:useradd  [选项]  [用户名]

可以使用useradd命令创建用户账户,使用该命令创建用户时,默认的用户家目录会被存放在/home目录中,默认的Shell解释器为/bin/bash,而且会默认创建一个与该用户同名的基本用户组。这些默认设置可以通过选项自行修改。

选项

作用

-d

指定用户的家目录,和 -M 一起使用时不生效

-e

账户的到期时间,格式为YYY-MM-DD

-u

指定用户的默认UID

-g

指定一个初始的用户基本组(必须已存在的组)或使用 GID 号

-G

指定一个或者多个扩展用户组(附加组)或使用 GID 号

-N

不创建与用户同名的基本用户组

-s

指定该用户的默认Shell解释器      /sbin/nologin等

-c

添加备注信息,可以是中文

-M

不生成家目录

-p

加密

-o

创建一样的UID账户,但是不要去用这个重复的

注:/sbin/nologin是终端解释器的一员,与Bash解释器有天壤之别。一旦用户的解释器被设置nologin,则代表该用户不能登陆到系统中。

2.2 passwd命令

注:新建用户后,要为用户设置口令,未设置口令的用户不能登录系统,也不会在Linux系统登录页面显示出来。

作用:passwd命令用于设置用户口令(密码),修改用户密码,过期时间,认证信息等。

格式: passwd  [选项]  [用户名]

普通用户只能使用passwd命令修改自身的系统密码,而root管理员则有权限修改其他所有人的密码,这就表示root管理员完全拥有该用户的管理权限。更牛的操作是,root管理员在Linux系统中修改自己或者他人的密码时不需要验证旧密码,这一点特别方便。

参数

作用

-l

锁定用户,禁止其登录

-u

解除锁定,允许用户登录

--stdin

允许通过标准输入修改用户密码,如echo "NewPassWord" | passwd --stdin Username

-d

使该用户可用空密码登录系统也可以是清空密码

-e

强制用户在下次登录时修改密码

-S

显示用户的密码是否被锁定,以及密码所采用的加密算法名称

拓展:

cat  /dev/randow  |  tr  -cd  [a-zA-Z0-9]  |  head  -c  12     ------> 随机生成密码

echo  "123123"  |  passwd  用户  --stdin             ----------->免交互修改密码

2.3 usermod命令

作用:usermod命令用于修改用户账户及用户的属性

格式: usermod  [选项]  [用户名]

Linux系统中的一切都是文件,因此在系统中创建用户也就是修改配置文件的过程。用户信息保存至/etc/passwd文件中,可以直接用文本编辑器来修改其中的用户参数项目,也可以用usermod命令来修改已经创建的用户信息。

参数

作用

-c

填写用户账户的备注信息

-d-m

参数-m与参数-d连用,可以重新指定用户的家目录并自动把旧的数据转移过去

-e

账户的到期时间,格式为YYYY-MM-DD

-g

变更所属用户组或(使用 GID 号)

-G

变更扩展用户组(或使用 GID 号)

-L

锁定用户,禁止其登录系统

-U

解锁用户,允许其登录系统

-s

变更默认终端

-u

修改用户的UID

-l

改名,格式为usermod  -l  新用户名  旧用户名

2.4 userdel命令

作用:userdel 命令用于删除用户

格式:userdel  [选项]  [用户名]

如果我们确认某位用户后续不在会登录到系统中来,则可以通过userdel命令删除该用户的所有信息。在执行删除操作的时候,该用户的家目录默认会保留下来,此时可以用-r参数将其删除。

参数

作用

-f

强制删除用户

-r

同时删除用户及用户家目录

三. 组群管理

3.1 组账号文件

与用户帐号文件相类似

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

/etc/gshadow:保存组帐号的密码信息基本不使用

3.2 groupadd或者addgroup命令

作用:groupadd命令用于创建用户组,组群

格式:groupadd  [选项群组名

为了更高效地指派系统中各个用户的权限,在工作中常常会把几个用户加入同一个组里面,这样便可以针对一类用户统一安排权限。

3.3 groupmod命令

groupadd命令用于修改组群及修改组群属性

格式: groupmod  [选项组名

参数

作用

-g  gid

把组群的GID改成gid

-n  group-name

把组群的名称改为group-name

3.4 groupdel命令

作用:groupdel命令用于删除组群

格式:groupdel  [选项组名

3.5 gpasswd命令

作用:为组群添加用户,在附属组中增加,删除用户都用gpasswd命令,该命令只有root用户和组管理员才能够使用

格式:gpasswd  [选项]  [用户]  []

参数

作用

-a

把用户加入组

-d

把用户从组中删除

-r

取消组密码

-A

给组指派管理员

四. 修改文件权限命令

chomd命令

作用:chomd命令主要用于修改文件或者目录的权限

格式:chomd  [选项]  [模式,模式]  [文件]

参数

作用

-R,--recursive

以递归方式更改所有的文件及子目录

--version

显示版本信息并退出

1.数字表示法修改权限

所谓数字表示法是指将读取(r),写入(w)和执行(x)分别以4,2,1来表示,没有授权的部分就表示为0,然后再将所授权的权限相加而成。

例如为文件/etc/file设置权限:赋予拥有者和组群成员读取和写入的权限,而其他人只有读取权限。则应该将权限设置为"rw-rw-r--",而该权限的数字表示法为664,命令为chomd  664  /etc/file

 

2.使用文字表示法修改权限

使用权限的文字表现法时,系统用4种字母来表示不同的用户。

  • u:  user,表示所有者。
  • g:  group,表示属组。
  • o:  others,表示其他用户。
  • a:all,表示以上三种用户。

操作权限使用下面三种字符的组合表示法。

  • r: read,可读。
  • w:write,写入,可写。
  • x: execute,执行,可执行。

操作符号包括以下几种。

  • +:添加某种权限。
  • -:减去某种权限。
  • =:赋予给定权限并取消原来的权限。

五. 修改文件所有者及所属组命令

chown命令

作用:chown命令主要用于文件或者文件夹属主及属组的修改

格式:chown  [选项用户[:或  .文件或目录

例:chown  -R  root.root/tmp/test.txt   ------->  表示修改test.txt文件的用户和组均为root。

 修改文件的所属组也可以用命令chgrp,如将test的属组改为root。

chgrp   root   test

六. 文件的隐藏属性

Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。

6.1 chattr命令

作用:chattr命令用于设置文件的隐藏属性

格式:chattr  [参数]  [文件]

 如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加+参数,如果想要把某个隐藏功能移出文件夹,则需要追加-参数。chattr命令中可供选择的隐藏权限参数非常丰富。

参数

作用

i

无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件

a

仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)

S

文件内容在变更后立即同步到硬盘(sync)

s

彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)

A

不再修改这个文件或目录的最后访问时间(atime)

b

不再修改文件或目录的存取时间

D

检查压缩文件中的错误

d

使用dump命令备份时忽略本文件或目录

c

默认将文件或目录进行压缩

u

当删除该文件后依然保留其在硬盘中的数据,方便日后恢复

t

让文件系统支持尾部合并(tail-merging)

X

可以直接访问压缩文件中的内容

6.2 lsattr命令

作用:lsattr命令用于显示文件的隐藏权限

格式:lsattr  [参数]  [文件]

在Linux系统中,文件的隐藏权限必须使用lsattr命令查看,平时使用的ls之类的命令则看不出什么。一旦使用lsattr命令后,文件上被赋予的隐藏权限马上就会出现。此时可以按照显示的隐藏权限的类型(字母),使用chattr命令去掉。

七. 查询用户

 7.1 finger 命令

作用:查询用户帐号的详细信息

格式:finger  [用户名]

7.2 w 命令

作用:查询已登录到主机的用户信息

格式:w [选项] [用户名]

-h        

不显示输出信息的标题

-l        

用长格式输出

-s        

用短格式输出,不显示登陆时间,JCPU 和 PCPU 时间

-V        

显示版本信息

例:

[root@test1 Packages]# w

 11:20:58 up  2:05,  1 user,  load average: 0.00, 0.01, 0.05

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

root     pts/0    192.168.100.99   09:16    2.00s  0.74s  0.02s w

上面的输出信息中,第一行其实和 top 命令的第一行非常类似,主要显示了当前的系统时间、系统从启动至今已运行的时间、登陆到系统中的用户数和系统平均负载。平均负载(load average)指的是在 1 分钟、5 分钟、15 分钟内系统的负载状况。

从第二行开始,显示的是当前所有登陆系统的用户信息,第二行是用户信息的各列标题,从第三行开始每行代表一个用户。这些标题的含义如表所示

标题

含义

USER

登录到系统的用户。

TTY

登录终端。

FROM

表示用户从哪里登陆进来,一般显示远程登陆主机的 IP 地址或者主机名。

LOGIN@

用户登陆的日期和时间。

IDLE

表示某个程序上次从终端开始执行到现在所持续的时间。

JCPU

和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间。

PCPU

当前进程所占用的 CPU 运算时间。

WHAT

当前用户正在执行的进程名称和选项,换句话说,就是表示用户当前执行的是什么命令。

 

7.3 Who 命令

作用:相比较 w 命令,who 命令只能显示当前登陆的用户信息,但无法知晓每个用户正在执行的命令。

基本格式:who [选项] [file]

需要说明的是,who 命令默认是通过 /var/run/utmp 文件来获取登陆用户信息,但如果通过 file 指定另一个文件,则 who 命令将不再默认读取 /var/run/utmp 文件,而是读取该指定文件来获取信息。

选项

含义

-a

列出所有信息,相当于所有选项。

-b

列出系统最近启动的时间日期。

-l

列出所有可登陆的终端信息。

-m

仅列出关于当前终端的信息,who -m 命令等同于 who am i。

-q

列出在本地系统上的用户和用户数的清单。

-r

显示当前系统的运行级别。

-s

仅显示名称、线路和时间字段信息,这是 who 命令的默认选项。

-u

显示当前每个用户的用户名、登陆终端、登陆时间、线路活动和进程标识。

-T 或 -w

显示 tty 终端的状态,“+”表示对任何人可写,“-”表示仅对 root 用户或所有者可写,“?”表示遇到线路故障。

八. 拓展

8.1 umask

umask 的值可以用来保留在创建文件权限

实现方式:

新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变

新建目录的默认权限: 777-umask

非特权用户umask默认是 002

root的umask 默认是 022

8.2 访问控制列表 ACL

ACL:Access Control List,实现灵活的权限管理

除了文件的所有者,所属组和其它人,可以对更多的用户设置权限

CentOS7 默认创建的xfs和ext4文件系统具有ACL功能

CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加

 

用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...

-m

 --modify-acl 更改文件的访问控制列表

-M

--modify-file=file 从文件读取访问控制列表条目更改

-x

--remove=acl 根据文件中访问控制列表移除条目

-X

--remove-file=file 从文件读取访问控制列表条目并删除

-b

--remove-all 删除所有扩展访问控制列表条目

-k,    

--remove-default 移除默认访问控制列表

--set=acl 设定替换当前的文件访问控制列表

--set-file=file 从文件中读取访问控制列表条目设定

--mask 重新计算有效权限掩码

-n

--no-mask 不重新计算有效权限掩码

-d

--default 应用到默认访问控制列表的操作

-R

--recursive 递归操作子目录

-L

--logical 依照系统逻辑,跟随符号链接

-P

--physical 依照自然逻辑,不跟随符号链接

--restore=file 恢复访问控制列表,和“getfacl -R”作用相反

--test 测试模式,并不真正修改访问控制列表属性

-v

--version           显示版本并退出

-h

--help              显示本帮助信息

;