用户组和权限管理

时间:2021-06-04 00:13:14

# 用户组和权限管理 

## 概念

用户分为三类:

1、超级用户:root uid=0,简单来说uid为0的用户就是超级用户。

2、虚拟用户:存在linux中,满足文件或者程序运行的需要,而创建的。不能登录,不能使用。uid=1-499,1-999(centos7)

3、普通用户:管理员root创建的用户。uid=500+,1000+(centos7)

用户组就是具有相同特征的用户的集合。一个组可以包含多个用户,每个用户也可以属于不同的组。用户组的目的方便管理员对用户进行集中管理。用户组也分为两类:系统组和普通组。

用户和用户组的关系:

一对一:一个用户存在一个组,也可以是组中唯一成员

一对多:一个用户属于多个组,只有一个主组,其余为附加组

多对一:多个用户存在于一个组

多对多:多个用户可以存在多个组

下图中每一个方框代表一个组,每个图代表一个用户,可以方便我们理解用户和组的关系。

用户组和权限管理

## 用户及用户组配置文件介绍

/etc/passwd  用户及其属性信息

我们可以使用cat命令查看配置文件,下图截取了一部分。

用户组和权限管理


第一列(以冒号为分隔符):用户名

第二列:密码位

第三列:UID号  CentOS6 1-499为系统用户,预留

              CentOS7 1-999为系统用户,预留

第四列:GID号  主组和辅助组

第五列:用户全名或注释

第六列:用户的家目录

第七列:用户默认的shell类型

#

/etc/group  组及其属性信息


用户组和权限管理


第一列:组名称

第二列:组密码,通常不需要设定

第三列:GIDCentOS6 1-499为系统组,预留

CentOS7 1-999为系统组,预留

第四列:以该组为附加组的用户列表

#

/etc/shadow  用户密码及其相关属性


用户组和权限管理

第一列:用户名

第二列:密码位  $加密方式$salt$password  

                  !!代表账户被锁定

第三列:更改密码时间(天数计算)---距离1970年1月1号时间

第四列:密码最短口令有效期

第五列:口令过期时间,更改口令往后的时间

第六列:口令到期前提前多少天提醒

第七列:口令过期后多少天账户过期

第八列:帐号的有效期

#

/etc/gshadow  组密码及其相关属性

用户组和权限管理


第一列:组名

第二列:组密码

第三列:管理员列表,可以更改组密码和成员

第四列:将该组作为辅助组的成员列表

## 用户和组管理命令

###用户管理命令

useradd 

-uuid 创建用户时指定uid

-ggid 指明用户所属基本组

-c用户的注释信息

-M不建家目录

-s指定用户的默认shell

-e用户过期时间

-G为用户指明附加组,组须事先存在

案例1:创建用户gentpp,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"。

[root@centos7 ~]#useradd gentpp -G bin,root -s /bin/csh -c "Gentoo Distribution"

[root@centos7 ~]#cat /etc/passwd|tail -n1  #查看/etc/passwd最后一行

[root@centos7 ~]#id gentpp

uid=1007(gentpp) gid=1008(gentpp) groups=1008(gentpp),0(root),1(bin)

#

创建用户时默认值设定存放于/etc/default/useradd 

[root@centos7 ~]#cat /etc/default/useradd 

# useradd defaults file

GROUP=100                        

HOME=/home#把用户的家目录建在/home中          

INACTIVE=-1#是否启用帐号过期停权,-1表示不启用

EXPIRE=#帐号终止日期,不设置表示不启用

SHELL=/bin/bash#新用户默认所用的shell类型

SKEL=/etc/skel#配置新用户家目录的默认存放路径。当我们用useradd添加用户时,

用户家目录下的文件,都是从这里配置的目录中复制过去的。下面会详细解释一下/etc/skel

CREATE_MAIL_SPOOL=yes#创建mail文件

#

/etc/login.defs文件是用来定义创建用户时所需要的一些用户的配置信息。如创建用户时,是否需要家目录,UID和GID的范围,用户及密码的有效期限等等。

下面是centos7版本的/etc/login.defs文件内容

#QMAIL_DIR      Maildir

MAIL_DIR        /var/spool/mail#创建用户时,要在目录/var/spool/mail中创建一个用户mail文件

#MAIL_FILE      .mail

# Password aging controls:

#       PASS_MAX_DAYS   Maximum number of days a password may be used.

#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.

#       PASS_MIN_LEN    Minimum acceptable password length.

#       PASS_WARN_AGE   Number of days warning given before a password expires.

PASS_MAX_DAYS   99999#一个密码最长可以使用的天数

PASS_MIN_DAYS   0#更换密码的最小天数

PASS_MIN_LEN    5#密码的最小长度

PASS_WARN_AGE   7#密码失效前提前多少天开始警告

# Min/max values for automatic uid selection in useradd

UID_MIN                  1000#最小UID为1000,也就是说添加用户时,UID从1000开始分配

UID_MAX                 60000#最大UID为60000

# System accounts

SYS_UID_MIN               201#系统用户UID最小为201

SYS_UID_MAX               999#系统用户UID最大为999

# Min/max values for automatic gid selection in groupadd

GID_MIN                  1000#GID的范围为1000-60000。同上面UID情况

GID_MAX                 60000

# System accounts

SYS_GID_MIN               201#系统GID的范围是201-999

SYS_GID_MAX               999

# useradd command line.

CREATE_HOME     yes#是否创建家目录,默认要求创建;可用-m参数控制

# The permission mask is initialized to this value. If not specified, 

# the permission mask will be initialized to 022.

UMASK           077#默认权限

# This enables userdel to remove user groups if no members exist.

USERGROUPS_ENAB yes#删除用户同时删除用户组

# Use SHA512 to encrypt password.

ENCRYPT_METHOD SHA512 #SHA512密码加密

#### 补充一点

/etc/skel的作用:/etc/skel目录使用来存放新用户配置文件的目录,当我们添加新用户时,这个目录下的所有文件会自动被复制到新添加的用户的家目录下;默认情况下,/etc/skel目录下的文件都是隐藏文件;用过修改、添加、删除/etc/skel目录下的问及爱你,我们可以为新创建的用户提供统一的,标准的、初始化用户环境。

#

usermod

-u UID: 新UID

-gGID: 新主组

-G新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项

-s新的默认SHELL

-c新的注释信息

-dHOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项

-l login_name: 新的名字

-L: lock指定用户,在/etc/shadow 密码栏的增加!

-U: unlock指定用户,将/etc/shadow 密码栏取消!centos7不可以解锁

案例:修改gentpp的默认shell和描述信息

[root@centos7 ~]#cat /etc/passwd | tail -n1

gentpp:x:1007:1008:Gentoo Distribution:/home/gentpp:/bin/csh

[root@centos7 ~]#usermod -s /bin/sh gentpp

[root@centos7 ~]#cat /etc/passwd | tail -n1

gentpp:x:1007:1008:new world:/home/gentpp:/bin/sh



#

userdel

-r 删除用户时,连同其家目录,mail一同删除

#

getent passwd ==cat /etc/passwd#查看用户信息,后面可直接跟用户名

[root@centos7 ~]#getent passwd ma

ma:x:1000:1000:ma:/home/ma:/bin/bash

#

id 

-u: 显示UID

-g: 显示GID

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

-n: 显示名称,需配合ugG使用

案例:

[root@centos7 ~]#id gentpp

uid=1007(gentpp) gid=1008(gentpp) groups=1008(gentpp),0(root),1(bin)

[root@centos7 ~]#id -u gentpp

1007

[root@centos7 ~]#id -g gentpp

1008

[root@centos7 ~]#id -G gentpp

1008 0 1

[root@centos7 ~]#id -nG gentpp

gentpp root bin

#

su 切换用户或以其他用户身份执行命令

1、su 非登录式切换,不会读取目标用户的部分配置文件,不改变当前工作目录

2、su - 登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换

3、root使用su切换至其他用户无须密码,其他用户之间切换或者切换到root需要密码

#

passwd 修改指定用户的密码,仅root用户权限

-l:锁定指定用户

-u:解锁指定用户

-e:强制用户下次登录修改密码

-n mindays: 指定最短使用期限

-x maxdays:最大使用期限

-w warndays:提前多少天开始警告

-i inactivedays:非活动期限

--stdin:从标准输入接收用户密码

案例:修改ma的密码

[root@centos7 ~]#echo maguofu |passwd --stdin ma

Changing password for user ma.

passwd: all authentication tokens updated successfully.

注意:一次只能修改一个用户密码,不能批量修改。

#

###组帐号管理命令

#

groupadd

-g创建指定gid的组

-r创建系统组CentOS 6: ID<500

CentOS 7: ID<1000

#

groupmod

-nnewgrpname oldgrpname 修改组名

-g newgid groupname 修改gid

#

groupdel

groupdel 组名删除组

#

gpasswd

-a user 将user添加至指定组中

-d user 从指定组中移除用户user

例如:[root@centos7 ~]#gpasswd -a ma -g zhu

Adding user ma to group zhu#将用户ma添加到组zhu中

[root@centos7 ~]#gpasswd -d ma -g zhu 

Removing user ma from group zhu#将用户ma从组zhu中删除

#

groupmems[options] [action]

options

-g更改为指定组

actions

-a指定用户加入组

-d从组中删除用户

-p从组中清除所有成员

-l显示组成员列表

案例:

[root@centos7 ~]#groupmems -g admins -a ma

[root@centos7 ~]#groupmems -g admins -a zhu#将ma和zhu用户添加到admins中

[root@centos7 ~]#groupmems -g admins -l#查看admins中的用户列表

ma  zhu

[root@centos7 ~]#groupmems -g admins -d ma#将ma从admins中删除

[root@centos7 ~]#groupmems -g admins -l

zhu 

[root@centos7 ~]#groupmems -g admins -p#清空admins中的所有组成员

[root@centos7 ~]#groupmems -g admins -l

#

groups查看用户所属组列表

[root@centos7 ~]#groups ma

ma : ma

root@centos7 ~]#groups zhu

zhu : zhu

#

##文件权限

###文件属性

通过ls -li可查看文件的长格式信息,我们取出一个进行解释

[root@centos7 /]#ls -li

64 dr-xr-xr-x.   4 root root 4.0K Jul 14 11:33 boot

第1列:inode号

第2列:第1个字符代表文件的类型(-是普通文件,d是目录等等)

 第2-10个字符代表文件权限,前三个是用户的权限、中间三个用户组的、后面其他用户的权限

 第11个字符.与SELINUX相关,暂时不做描述

第3列:文件的硬连接数

第4列:文件对应的属主或者用户

第5列:文件对应的属组或者用户组

第6列:文件大小

第7列:文件最后的修改的时间

第8列:文件名

#

###修改文件属主和属组

chown修改文件的属主(也可以改组)

用户文件或者目录     <==仅仅授权用户

:组文件活目录    <==仅仅授权组

用户:组文件或目录  <==表示授权用户和组

-R 递归

--reference=源文件 目标文件

强调:

1)其中的冒号“:”可以用点好“.”代替

2)要授权的用户和组名,必须是linux系统里实际存在的

案例:

[root@centos7 app]#ll

-rw-r--r--. 1 root root 0 Jul 29 16:27 f1

-rw-r--r--. 1 root root 0 Jul 29 16:27 f2

[root@centos7 app]#chown ma:ma f1

[root@centos7 app]#chown :zhu f2

[root@centos7 app]#ll

-rw-r--r--. 1 ma   ma  0 Jul 29 16:27 f1

-rw-r--r--. 1 root zhu 0 Jul 29 16:27 f2

[root@centos7 app]#chown --reference=/app/f1 f2#将f1的用户和属组信息复制给f2

[root@centos7 app]#ll

-rw-r--r--. 1 ma ma 0 Jul 29 16:27 f1

-rw-r--r--. 1 ma ma 0 Jul 29 16:27 f2

#

chgrp修改文件的属组(只能改组)

----reference=源文件 目标文件

-R 递归

案例:

[root@centos7 app]#chgrp ma f1 <==将f1的属组直接修改成ma

[root@centos7 app]#ll

-rw-r--r--. 1 ma   ma   0 Jul 29 16:27 f1

-rw-r--r--. 1 ma   ma   0 Jul 29 16:27 f2

-rw-r--r--. 1 root root 0 Jul 29 16:37 f3

[root@centos7 app]#chgrp --reference=/app/f3 f1

[root@centos7 app]#chgrp --reference=/app/f3 f2

[root@centos7 app]#ll

-rw-r--r--. 1 ma   root 0 Jul 29 16:27 f1

-rw-r--r--. 1 ma   root 0 Jul 29 16:27 f2

-rw-r--r--. 1 root root 0 Jul 29 16:37 f3

#

###文件权限

普通文件

r:可以读取文件的内容

w:可以追加或者覆盖文件的内容

x:可以执行改文件,需要和r配合

目录文件

r:可以查看目录下有哪些文件,不能查看文件的详细信息

w:可以在目录中创建和删除文件,需要x配合

x:可以cd进入该目录

区别:

     用户组和权限管理

#

文件权限可以用八进制来表示

r:4

w:2

x:1

例如:rwx=4+2+1=7

#

修改文件权限

chmod

方法一:chmod u=rwx,g=rx,o=r /app/f1

方法二:chmod 755 /app/f1

方法三:chmod --reference=f1 f2     <==将f2的权限修改成f1一样

#

默认权限umask

真实用途,从对应的位中将umask指定权限去除

全局设置:/etc/bashrc

用户设置:~/.bashrc

新建目录权限=777-umask

新建文件权限=666-umask 看结果,有寄数,对位+1

                                 无寄数 偶数不变,最终结果

#

目录案例:

[root@centos7 app]#umask

0022

当前umask的值为0022(第一位是特殊权限位,后续会介绍暂时不用理会)

新建目录权限=777-022=755

[root@centos7 app]#mkdir test/

[root@centos7 app]#ll

drwxr-xr-x. 2 root root 6 Jul 29 19:15 test<==创建一个目录test可以看见默认权限为755

[root@centos7 app]#su - ma<==切换到ma用户,root默认umask为022,其他用户002

Last login: Sat Jul 29 17:17:11 CST 2017 on pts/0

[ma@centos7 ~]$umask

0002

[ma@centos7 ~]$mkdir test2

[ma@centos7 ~]$ll

drwxrwxr-x. 2 ma ma 6 Jul 29 19:20 test2<==创建的目录为775=777-002,符合上述格式

#

文件案例:这次我们把默认umask更改为0421

[root@centos7 app]#umask 0421 

[root@centos7 app]#umask

0421

[root@centos7 app]#touch f1

[root@centos7 app]#ll

--w-r--rw-. 1 ma ma 0 Jul 29 19:38 f1<==666-421=245 5为奇数+1,偶数不变。最终为246。