Linux用户和权限管理

前言

Linux是一个真实的、完整的多用户(Multi-Users)多任务(Multi-Tasks)操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响。不同用户具有不同的权限,每个用户是在权限允许的范围内完成不同的任务,Linux正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。用户组是具有相同特征用户的逻辑集合,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有10个用户的话,就需要授权10次,显然这种方法不太合理;另一种方法是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限。这就是用户组,将用户分组是Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了管理工作。

用户和组之间的关系:一对一、一对多、多对一、多对多。

1、一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。
2、一对多:即一个用户可以存在多个用户组中。那么此用户具有多个组的共同权限。
3、 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限。
4、多对多:多个用户可以存在多个组中。其实就是上面三个对应关系的扩展。

此内容转载自:https://blog.****.net/yasi_xi/article/details/8152938

一、用户和组

1.1、用户

对Linux而言,用户可以简单理解为一个具备用户标识(用户名)和密码的使用者。

用户的类型:

管理员

普通用户:系统用户、登录用户

何为系统用户?为了能够让后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从不用登录系统,这就称为系统用户。

用户标识:UserID或UID:

16bits二进制数字:0~65535

管理员:0

普通用户:1~65535

系统用户:1~499(CentOS6),1~999(CentOS7)

登录用户:500~60000(CentOS6),1000~60000(CentOS7)

1.2、组

对Linux而言,组可以简单理解为是用户的容器。

组的类型:

组类型1:

管理员组

普通用户组:系统用户组、登录用户组

组标识:GroupID或GID

管理员组:0

普通用户组:1~65535

系统用户组:1~499(CentOS6),1~999(CentOS7)

登录用户组:500~60000(CentOS6),1000~60000(CentOS7)

组类型2:

用户的主组

用户的附加组

组类型3:

用户的私有组:组名与用户名相同,且只包含一个用户

公共组:组内包含了多个用户

1.3、用户和组的信息库、密码库简介

一个用户要想登录Linux操作系统,就必须进行认证。认证即通过比对事先存储的信息与登录时提供的信息是否一致。下面将对用户和组的信息库及密码库作简单介绍。

1.3.1、用户的信息库:/etc/passwd

文件格式:name:password:UID:GID:GECOS:directory:shell

字段说明:

name:用户名

password:可以是加密的密码串,也可以是占位符x

UID:用户ID

GID:用户所属的主组的ID

GECOS:注释信息

directory:用户的家目录

shell:用户默认的shell,登录时默认的shell程序

1.3.2、组的信息库:/etc/group

文件格式:group_name:password:GID:user_list

字段说明:

group_name:组名称

password:密码

GID:组ID

user_list:该组的用户成员,以此组为附加组的用户的用户列表

1.3.3、用户的密码库:/etc/shadow

文件格式:login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field

字段说明:

login name:登录名

encrypted password:加密了的密码

date of last password change:最后一次更改密码的日期

minimum password age:密码最小使用期限

maximum password age:密码最大使用期限

password warning period:密码警告时间段

password inactivity period:密码禁用期限

account expiration date:账号过期日期

reserved field:保留字段

1.3.4、组的密码库:/etc/gshadow

文件格式:group name:encrypted password:administrators:members

字段说明:

group name:组名

encrypted password:加密了的密码

administrators:管理员

members:成员

1.3.5、简述密码

密码使用策略:

1、使用随机密码

2、最短长度不要低于8位

3、应该使用大写字母、小写字母、数字和标点符号四类字符之中的至少三类

4、定期更换密码

用户设定密码之后,系统会对该密码进行加密,使其密码更加安全,不易被破解。对密码加密就必定有其对应的加密方式和加密算法,下面将对加密方式及其加密算法进行简单介绍。

加密方式:

对称加密:加密和解密使用同一个密码

非对称加密:加密和解密使用的一堆密钥

密钥对:

公钥:public key

私钥:private key

单向加密:只能加密,不能解密;对密码进行加密之时提取数据的特征码

特性:

1、定长输出

2、雪崩效应

加密算法:

1、md5:message digest,128bits

2、sha:secure hash algorithm,160bits

3、sha224:secure hash algorithm,224bits

4、sha256:secure hash algorithm,256bits

5、sha384:secure hash algorithm,384bits

6、sha512:secure hash algorithm,512bits

每一种加密算法对应的序号,可以理解为该算法的代号,请看下图:

Linux用户和权限管理

上图所示,白色部分为用户yue的密码,只是显示的是加密之后的密码。

加密之后的密码字符串,第一个$与第二个$之间的代表的是算法,上图中的数字6代表的是对密码进行加密时使用的算法为sha512。

那么,如果两个用户设置的密码一样,加密之后的密码字符串是否一样呢?请看下图:

Linux用户和权限管理

上图所示,添加新用户qingyue,设置其密码跟用户yue的密码一致,在/etc/shadow之中两个用户加密之后的密码字符串不一致。何解?

因为在用户设置密码的时候,系统会在对密码加密之时添加随机数(salt),所以用户尽管设置的密码一致,但经过加密之后的密码字符串也是千差万别的。

encrypted password:

1、第一个“$”和第二个“$”之间代表的是加密时使用的算法

2、第二个“$”和第三个“$”之间代表的时加密时添加的随机数(salt)

3、第三个“$”和第二个“:”之间代表的是用户设置的密码

 二、用户管理和组管理

 2.1、useradd命令:创建用户

语法格式:

useradd  [options]  LOGIN_NAME

useradd  -D:显示创建用户的默认配置

注意:创建用户时的诸多默认设定配置文件为:/etc/login.defs

useradd  -D [option]:修改默认配置的值

注意:修改的结果保存于/etc/default/useradd文件中,当然,也可以修改此文件实现修改默认配置

例如:useradd -D -s /bin/csh 修改用户的默认shell为/bin/csh

常用选项:

-u,--uid UID:指定UID

-g,--gid GROUP:指定所属基本组ID,此组得事先存在

-c,--comment COMMENT:指明注释信息

-G,--groups GROUP1,[GROUP2,...[,GROUPN]]:指明用户所属的附加组,多个附加组之间用逗号隔开

-d,--home HOME_DIR:以指定的路径为用户的家目录。通过复制/etc/skel此目录并重命名实现,指定的家目录路径如果事先存在,则不会为用户复制环境配置文件

-s,--shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shell文件中

-r,--system:创建系统用户

-M:不为用户创建家目录

2.2、usermod命令:修改用户属性

语法格式:usermod  [options]  LOGIN_NAME

常用选项:

-u,--uid UID:修改用户的UID为此处指定的新UID

-g,--gid GROUP:修改用户所属的基本组,此组得事先存在

-G,--groups GROUP1,[GROUP2,...[,GROUPN]]:修改用户所属的附加组,原来的附加组会被覆盖

-a,--apend :与-G一同使用,用于为用户追加新的附加组

-c,--comment COMMENT:修改注释信息

-d,--home HOME_DIR:修改用户的家目录,用户原有的家目录不会被转移至新的位置

-m,--move-home,只能与-d选项一同使用,用于将原来的家目录移动为新的家目录

-l,--login NEW_LOGIN:修改用户名

-s,--shell SHELL:修改用户的默认shell

-L,--lock:锁定用户密码,即在用户原来的密码字符串前面加“!”

-U,--unlock:解锁用户的密码

2.3、userdel命令:删除用户

语法格式:userdel  [options]  LOGIN_NAME

常用选项:

-r:删除用户时一并删除其家目录

2.4、groupadd命令:添加组

语法格式:groupadd  [options]  GROUP_NAME

常用选项:

-g GID:指定GID,默认是上一个组的GID+1

-r:创建系统组

2.5、groupmod命令:修改组属性

语法格式:groupmod  [options]  GROUP_NAME

常用选项:

-g GID:修改GID

-n NEW_GROUP_NAME:修改组名

2.6、groupdel命令:删除组

语法格式:groupdel  GROUP_NAME

2.7、passwd命令:修改用户密码

语法格式:passwd  [-k]  [-l]  [-u [-f]]  [-d]  [-e]  [-n mindays]  [-x maxdays]  [-w warndays]  [-i inactivedays]  [-S]  [--stdin]  [username]

passwd:修改用户的密码

passwd USERNAME:修改指定用户的密码,但仅root有此权限

注意:管理员修改任何用户的密码都不需要知道之前的密码

常用选项:

-l:锁定用户的密码

-u:解锁用户的密码

-d:清除用户的密码

-e DATE:过期期限,日期

-i DAYS:非活动期限

-n DAYS:密码的最短使用期限

-x DAYS:密码的最长使用期限

-w DAYS:警告期限

--stdin:echo "PASSWORD" | passwd --stdin USERNAME

2.8、gpasswd命令:向组中添加密码

语法格式:gpasswd  [option]  group

常用选项:

-a USERNAME:向组中添加用户

-d USERNAME:向组中移除用户

2.9、newgrp命令:临时切换指定的组为基本组

语法格式:newgrp  [-]  [group]

常用选项:

-:会模拟用户重新登录以实现重新初始化其工作环境,exit退出

2.10、chage命令:更改用户密码过期信息

语法格式:chage  [options]  LOGIN_NAME

2.11、id命令:显示用户的真和有效ID

语法格式:id  [OPTION]...  [USER]

常用选项:

-u:仅显示有效的UID

-g:仅显示用户的基本组ID

-G:仅显示用户所属的所有组ID

-n:显示名字而非ID

2.12、su命令:switch user

语法格式:

登录式切换:会通过重新获取目标用户的配置文件来重新初始化

su  -  USERNAME

su  -l  USERNAME

非登录式切换:不会读取目标用户的配置文件来进行初始化

su USERNAME

注意:管理员可以无密码切换至其他任何用户

常用选项:

-c  ‘COMMAND‘:仅以指定用户的身份运行此处指定的命令

用法:su - USERNAME -c ‘COMMAND‘

其他的几个命令,例如:chsh、chfn、finger、whoami、pwck、grpck,由于用的不多,此处不再作过多说明。

三、权限管理

进程对文件的访问权限应用模型:进程的属主与文件的属主是否相同,如果相同,则应用属主权限,否则,则检查进程的属主是否属于文件的属组,如果是,则应用属组权限,否则,就只能应用other的权限。

使用ls -l命令查看/etc目录下的文件:

Linux用户和权限管理

图中第一个目录最左侧显示为:drwxr-xr-x,其中d代表的是这是一个目录,第二个文件最左侧显示为:-rw-r--r--,其中第一个-代表的是这是一个文件,下面的也一样。

权限:rwxrwxrwx

左三位:定义user(owner)的权限

中三位:定义group的权限

右三位:定义other的权限

注意:-表示无此权限,例如,r-x表示拥有读和执行的权限,无写权限。

权限说明:

r:read,可读

w:write,可写

x:excute,可执行

对文件而言,r代表可获取文件的数据;w可修改文件的数据;x代表可将此文件运行为进程。

对目录而言,r代表可使用ls命令获取其下的所有文件列表;w代表可修改此目录下的文件列表,即创建或删除文件;x代表可使用cd命令切换至此目录中,且可使用ls -l来获取所有文件的详细属性信息。

权限组合机制:

权限 二进制 八进制
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

3.1、权限管理命令

3.1.1、chmod命令

语法格式:

1、 chmod  [OPTION]... MODE[,MODE]... FILE...

MODE表示法:

赋权表示法:直接操作一类用户的所有权限位rwx

u=

g=

o=

a=

注意:a表示所有,即user、group、other

 授权表示法:直接操作一类用户的一个权限位,r,w,x

u+,u-

g+,g-

o+,o-

a+,a-

一类用户的权限不同时可以使用逗号分隔,例如:chmod u+x,u-w 文件

2、chmod  [OPTION]... OCTAL-MODE FILE...

二进制,例如:chmod 744 文件

3、chmod  [OPTION]... --reference=RFILE FILE...

chmod --reference=参考文件 目标文件,即目标文件拥有参考文件的权限

常用选项:

-R,--recursive:递归修改

注意:用户仅能修改属主为自己的那些文件的权限!

3.2、从属关系管理命令:chown、chgrp

3.2.1、chown命令

语法格式:

1、chown  [OPTION]... [OWNER][:[GROUP]] FILE...

2、chown  [OPTION]... --reference=RFILE FILE...

常用选项:

-R:递归修改

3.2.2、chgrp命令

chgrp命令:用法跟chown命令一样,但是只能修改组。

注意:仅管理员可以修改文件的属主和属组!

 权限管理命令使用的相关练习请参考:https://www.cnblogs.com/holson/p/12942661.html

四、补充内容

介绍之前,请先看下图:

Linux用户和权限管理

为什么使用不同的用户创建出来的文件权限不一样?这里涉及到了umask的概念。

umask:文件的权限反向掩码,也可以称之为遮罩码

文件:666-umask

目录:777-umask

注意:之所以文件用666去减umask,表示文件默认不能拥有执行权限;如果减去的结果之中有执行权限,则需要将其加1。

例如:

umask:023

666-023=644

777-023=754

umask命令:

umask:查看当前umask

umask MASK:设置umask

注意:使用umask MASK仅对当前shell进程有效!

总结:

珍惜爱你的人和你爱的人,一旦失去,你将一辈子活在悲痛与绝望之中!

Linux用户和权限管理

上一篇:SQL Server 2008 R2 主从数据库同步


下一篇:CentOS7 ,Ubuntu安装teamviewer