• 为了管理多用户在对资源使用时的各自的操作的类型和范围
  • 通过分组将不同的权限分不到不同的组中,再通过用户不同组的归属,进行权限的分配和管理
  • 用户———->组—————>组各自的权限

1.用户的管理

创建用户 useradd

用户账号的管理工作主要涉及到用户账号的添加、修改和删除。

添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。

语法

  1. useradd 选项 用户名

细节说明

创建用户后,默认该用户的家目录在/home/用户名

选项

-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录。
-G     指定用户的附加组。我们把用户加入其他组,一般都使用附加组。
-m 使用者目录如不存在则自动建立。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

例子

# 此命令创建了一个用户kuangshen,其中-m选项用来为登录名kuangshen产生一个主目录 /home/kuangshen
useradd -m kuangshen



--增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。

删除用户 userdel

  • 如果一个用户的账号不再使用,可以从系统中删除。
  • 删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。

语法

userdel 选项 用户名

选项

-r 它的作用是把用户的主目录一起删除。

例子

#删除保留家目录
userdel kuangshen

#同时删除用户的家目录。
--慎重选择,如果要保留资料,那么就普通删除
userdel -r kuangshen

修改用户 usermod

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

语法

usermod 选项 用户名

选项

-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录。
-G     指定用户的附加组。我们把用户加入其他组,一般都使用附加组。
-m 使用者目录如不存在则自动建立。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

例子

#修改用户zwj所在组为wudang
usermod -g wudang zwj

#将qinqiang的主目录改为/home/233
usermod -d /home/233 qinqiang

#此命令将用户kuangshen的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。
usermod -s /bin/ksh -d /home/z –g developer kuangshen

添加用户到附属组

#添加chen到附属组dj
usermod -G dj chen

#查看dj组是否有用户chen
cat /etc/group

权限的操作 - 图1

切换用户 su

语法

su 用户名

例子

#切换到kuangshen用户
su kuangshen

#切回root用户
su root        需要输入root密码

#回到原来用户
在终端输入exit或logout或使用快捷方式ctrl+d,可以退回到原来用户,其实ctrl+d也是执行的exit命令

用户密码设置 passwd

  • 一般通过root创建用户的时候!要配置密码
  • 用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
  • 指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。

语法

passwd 选项 用户名

选项

-l 锁定账户密码
-u 解锁账户密码
-d 删除密码
-f 强迫用户下次登录时修改口令。

例子

普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。

#当前用户修改密码
passwd

#超级用户修改密码
passwd kuangshen
#为用户指定空口令时,执行下列形式的命令:
passwd -d kuangshen

#passwd 命令还可以用 -l(lock) 选项锁定某一用户,使其不能登录,例如:
passwd -l kuangshen

锁定账户 passwd

root,比如张三辞职了!冻结这个账号,一旦冻结,这个人就登录不上系统了!

# 锁定之后这个用户就不能登录了!
passwd -l qinjiang 

# 没有密码也不能登录!
passwd -d qinjiang

显示用户id、所属组id

id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。

#显示当前用户id
id

#查看fox所属的组
id fox

显示当前用户所在目录

pwd

显示当前用户

whoami

who am i

2.用户组的管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理(开发、测试、运维、root)。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

创建用户组 groupadd

语法

groupadd 选项 用户组

选项

-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

例子

#此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。
groupadd group1

#此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。如果不指定会自增1
groupadd -g 101 group2

增加用户并指定组 useradd

useradd -g 用户组 用户名
#先创建组
groupadd dj  

#新建用户cx,指定到dj组
--如果没有指定值,会默认生成一个跟用户名相同的组
useradd -g dj cx

删除用户组 groupdel

语法

groupdel 用户组

例子

#此命令从系统中删除组group1。
groupdel group1

修改用户组 groupmod

语法

groupmod 选项 用户组

选项

-g GID 为用户组指定新的组标识号。

-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。

-n新用户组 将用户组的名字改为新名字

例子

#创建一个新组
groupmod dj2

#将用户cx的组改为dj2
groupmod -g dj2 cx

切换用户组

如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。

用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。

#这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。

$ newgrp root            $b表示普通用户,#表示超级用户

查看用户和组

cat /etc/passwd

  • 用户的配置文件,记录中用户的各种信息
  • 这个文件的每一行都代表着每一个用户,我们可以从这里看出这个用户的主目录在哪里,可以看到属于哪一个组
    ``` chenxin:x:1001:0::/home/chenxin:/bin/bash

用户名:口令:用户id(UID):组id(GID):描述性信息:主目录:默认Shell

“x” 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中


> **cat /etc/group**


用户组的所有信息都存放在/etc/group文件中。

此文件是记录组 ID(GID)和组名相对应的文件。前面讲过,etc/passwd 文件中每行用户信息的第四个字段记录的是用户的初始组 ID,那么,此 GID 的组名到底是什么呢?就要从 /etc/group 文件中查找。

cat /etc/group

root:x:0:root,linuxsir

组名:口令:组id(GID):该用户组中的用户列表

这里的 “x” 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。


-  **cat /etc/shadow**<br />口令的配置文件 

<a name="06fa784b"></a>
## 3.文件的权限和归属

<a name="21832bef"></a>
### 1. 查看文件/目录所有者

一般为文件的创建者,谁创了该文件,就自然的成为该文件的所有者。

> 查看文件的所有者

ls -l 或者 ll


第1个root代表用户名,第2个代表组名

![](https://tuchuang2259.oss-cn-beijing.aliyuncs.com/img/%E6%9F%A5%E7%9C%8B%E6%96%87%E4%BB%B6%E6%89%80%E6%9C%89%E8%80%85.png#crop=0&crop=0&crop=1&crop=1&id=LBC6N&originHeight=148&originWidth=837&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

<a name="8751f113"></a>
### 2. rwx权限详解

“可读”表示能够读取目录内的文件列表;

“可写”表示能够在目录内新增、删除、重命名文件;

“可执行”则表示能够进入该目录。

文件的读、写、执行权限可以简写为rwx,亦可分别用数字4、2、1 来表示,文件所有者,所属组及其他用户权限之间无关联

|  |  | 文件所有者 |  |  | 文件所属组 |  |  | 其他用户 |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|  | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
| 字符表示 | r | w | x | r | w | x | r | w | x |
| 数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |


文件权限的数字法表示基于字符表示(rwx)的权限计算而来,其目的是简化权限的表示。例如,若某个文件的权限为7 则代表可读、可写、可执行(4+2+1);若权限为6 则代表可读、可写(4+2)。我们来看这样一个例子。现在有这样一个文件,其所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限;而且其他人只有可读的权限。那么,这个文件的权限就是rwxrw-r--,数字法表示即为764。不过大家千万再将这三个数字相加,计算出7+6+4=17 的结果,这是小学的数学加减法,不是Linux 系统的权限数字表示法,三者之间没有互通关系。Linux 系统的文件权限相当复杂,但是用途很广泛,建议大家把它彻底搞清楚之后再学习下一节的内容。现在来练习一下。请各位读者分别计算数字表示法764、642、153、731 所对应的字符表示法,然后再把rwxrw-r--、rw--w--wx、rw-r--r--转换成数字表示法。

<a name="31a34aa0"></a>
### 3. ls -l显示内容说明

> 案例

lrwxrwxrwx. 1 root root 7 1月 23 01:01 bin -> usr/bin

drwxr-xr-x. 4 root root 30 1月 25 13:28 home


> 说明


```sh
第一栏位:
    -:普通文件
    l:是软链接,类似于windows的快捷方式
    d:是目录,相当于windows的文件夹
    c:是字符设备文件,鼠标,键盘
    b:是块设备,比如硬盘
    rwxrwxrwx:rwx分别代表读、写、执行权限。
               第1-3位确定所有者(该文件的所有者)拥有该文件的权限。 --user
               第4-6位确定所属组(同用户组的)拥有该文件的权限。 --group
               第7-9位确定其他用户拥有该文件的权限。 --other

第二个栏位,表示文件个数。如果是文件的话,那这个数目自然是1了,如果是目录的话,那它的数目就是该目录中的文件个数了。

第三个栏位,表示该文件或目录的拥有者。若使用者目前处于自己的Home,那这一栏大概都是它的账号名称。

第四个栏位,表示所属的组(group)。每一个使用者都可以拥有一个以上的组,不过大部分的使用者应该都只属于一个组,只有当系统管理员希望给予某使用者特殊权限时,才可能会给他另一个组。

第五栏位,表示文件大小。文件大小用byte来表示,而空目录一般都是1024byte,当然可以用其它参数使文件显示的单位不同,如使用ls –k就是用kb莱显示一个文件的大小单位,不过一般我们还是以byte为主。  

第六个栏位,表示最后一次修改时间。以“月,日,时间”的格式表示,如Aug 15 5:46表示8月15日早上5:46分。

第七个栏位,表示文件名。我们可以用ls –a显示隐藏的文件名。

4. 修改权限

权限说明

前三位代表文件所有者的权限(u表示)

中间三位代表文件所在组的权限(g表示)

后三位代表其他组的权限(o表示)

所有人(a表示。u、g、o的总和)

方式一字符修改

+、-、=变更权限

  • +:增加权限
  • -:取消权限
  • =:设定权限
chmod u=rwx,g=rx,o=x 文件/目录名

chmod o+w 文件/目录名

chmod a-x 文件/目录名
1.给abc文件的所有者读写执行的权限,给所在组读执行权限,给其他组读执行权限
chmod u=rwx,g=rx,o=rx abc

2.给abc文件的所有者除去执行的权限,增加组写的权限
chmod u-x,g+w abc

3.给abc文件的所有者、所在组、其他组同时添加读的权限
chmod a+r abc

方式二数字修改

#给这个文件所有权限
chmod 777 文件/目录名

#给所有者所有权限,所属组读执行权限,其他组执行权限
chmod 751 文件/目录名
#将home/abc.txt文件的权限修改成 rwxr-xr-x,使用数字的方式实现
chmod 755 home/abc.txt

5. 修改文件所有者

语法

chown

例子

#将hell.taxt的文件所有者改为mary
chown mary hell.txt        

#将目录/opt/test的所有者改为mary  
chown mary /opt/test     

#将目录/opt/test及其所有子目录及文件的所有者改为mary  
chown -R  mary /opt/test

6. 修改文件所属组

语法

chgrp

例子

#将hell.taxt的文件所在的组改为mary
chgrp mary hell.txt        

#将目录/opt/test的所在的组改为mary  
chgrp mary /opt/test     

#将目录/opt/test及其所有子目录及文件的所在的组改为mary    
chgrp -R  mary /opt/test

7.其他组

除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组

修改用户所在组

语法

usermod -g 新组名 用户名

usermod -d 目录名 用户名 改变该用户登录的初始目录    #需用需要有进入新目录的权限,否则报错

例子

#修改用户zwj所在组为wudang
usermod -g wudang zwj