linux acl权限 软件,Linux账号管理与ACL权限设置

**Linux账号管理与ACL权限设置**

***

[TOC]

## 1 Linux的账号与用户组

每个登录Linux系统的用户至少都会取得2个ID:

* `UserID`:用户ID,UID

* `GroupID`:用户组ID,GID

### 1.1 用户账号

Linux系统中,用户登录主机取得shell的环境的过程

1. 用户要在计算机上利用tty1~tty7的终端机提供的login接口,输入用户账号和密码。

2. 系统寻找`/etc/passwd`文件里是否有输入的账号,如果没有则跳出,如果有则将账号和对应的UID、GID(从`/etc/group`中读出)、主文件夹、shell设置读出。

3. 系统核对密码。系统进入`/etc/shadow`找出记录的对应账号与UID,核对输入的密码与记录的密码是否一致。

4. 进入shell环境。

因为Linux系统中程序的运行都与权限有关,而权限与UID/GID有关。所以各个程序就需要读取`/etc/passwd`来了解不同账号的权限。

>[info] * 在登录Linux主机时,`/etc/passwd`与`/etc/shadow`系统必须可以读取。

> * `/etc/passwd`与`/etc/shadow`是Linux系统备份账号时的必须文件。

> * `/etc/passwd`的权限需设置为“-rw-r--r--”

> * `/etc/shadow`的默认权限为“-rw-------”“-r--------”。即只有`root`才能读写。

#### 1.1.1 `/etc/passwd`文件结构

:-: ![`/etc/passwd`文件结构](https://box.kancloud.cn/b8c585698a3dd037e32f5232cf91069b_400x81.png)

:-: 图1 `/etc/passwd`文件结构

如上图所示,head命令显示的是`/etc/passwd`文件里头4行的内容。

每一行代表一个系统的用户账号及其属性(7个,用‘:’分开)

以第一行为例:

1. 账号名称:root

2. 密码:x。具体的密码数据放在`/etc/shadow`文件中。

3. UID:root的UID为0。

4. GID:与`/etc/group`文件有关。

5. 用户信息说明:root。用于解释本账号的信息。

6. 主文件夹:/root。默认的用户主文件夹为`/home/yourIDName`。

7. Shell:/bin/bash。用于用户登录系统后取得shell来与系统的内核进行通信以进行用户的操作任务。而使用`/sbin/nologin`可以用来让账号登录系统后无法取得shell环境。

:-: Linux中UID的限制规则

| Id范围 | Id用户特性 |

| --- | --- |

| 0(系统管理员) | 如果要让其他账号也具有`root`的权限,可将其UID改为0。但不建议有多个账号的UID是0,会造成系统混乱。 |

| 1~499(系统账号) | 默认500一下的UID让给系统作为保留账号只是一个习惯。这些系统账号通常是不可登录的,所以其Shell的属性为`/sbin/nologin`。根据系统账号的由来,还可分为:1~99:由distribution自行创建的系统账号;100~499:用户有系统账号需求时,可以使用的UID |

| 500~65535(可登录账号) | 给系统的一般用户使用。 |

#### 1.1.2 `/etc/shadow`文件结构

![ `/etc/shadow`文件结构](https://box.kancloud.cn/03689ec4699b490cd5361ad5e3b5b3e9_646x94.png)

:-: 图2 `/etc/shadow`文件结构

如上图所示,head命令显示的是`/etc/shadow`文件里头4行的内容。

每一行代表一个系统的用户账号及其属性(9个,用‘:’分开)

以第一行为例:

1. 账号名称:root

2. 账号密码:内容是经过加密后的密码。由于特定的加密系统产生的密码长度必须一致,当让这个字段的长度改变后,该密码就会失效(无法解密)。很多软件通过这个方式,在此字段前加上`!`或`*`改变密码字段的长度,就会使得密码“暂时失效”了。

3. 最近改动密码的日期。Linux系统中日期的计算是以1970/1/1为1而累加的日期。

4. 密码不可被改动的天数。以第3个字段为基础。为“0”,表示随时可以改动密码。

5. 密码需要更新的天数。以第3个字段为基础。强制要求用户在这个天数内重新设置密码,否则该用户账号的密码就会变为过期特性。为“99999”,表示密码的更改没有强制性。

6. 密码需要更新期限前的警告天数。以第5个字段为基础。即是密码到期前的n天内,系统给用户账号在登录时发出警告。

7. 密码过期后的账号宽限天数。以第5个字段为基础。

8. 账号失效日期。类似第3个字段。都使用1970/1/1为1而累加的日期。在超过本字段规定的日期后,本账号不能再被使用。类似“收费服务”的系统中可以明确本字段的内容。

9. 保留

>[warning] * 密码的有效期:“更新日期”(第3个字段)+“更新的天数”(第5个字段)。

>* 密码过期特性:用户账号密码过期后,当用户账号登录时,系统会强制要求必须重新设置密码才能登录系统。

>

>

**忘记密码:**

* 一般用户忘记密码:利用`root`使用`passwd`命令重设密码。

* `root`密码忘记:

1. 重新启动Linux进入用户维护模式,系统会主动给予root权限的bash接口,此时使用`passwd`命令重设密码。

2. 以live CD开机后挂载根目录去修改`/etc/shadow`,将里面的root密码字段清空,再重新启动后root将不用密码即可登录!登录后使用`passwd`命令重设密码。

### 1.2 用户组

#### 1.2.1 `/etc/group`文件结构

![`/etc/group`文件结构](https://box.kancloud.cn/f8f5ae392cafaee131140ed5c022906f_354x79.png)

:-: 图3 `/etc/group`文件结构

如上图所示,head命令显示的是`/etc/shadow`文件里头4行的内容。

每一行代表一个系统的用户组及其属性(4个,用‘:’分开)

1. 用户组名称:

2. 用户组密码。通常不需要设置,设置后是给“用户组管理员”使用的。具体内容在`/etc/gshadow`。

3. GID。`/etc/passwd`第4个字段的GID使用的值。

4. 用户组包含的账号名称。各个名称间用`,`分隔。

#### 1.2.2 `/etc/gshadow`文件结构

![`/etc/gshadow`文件结构](https://box.kancloud.cn/3f0d298c7ff4ce8de4b004f48712f62b_365x79.png)

:-: 图4 `/etc/gshadow`文件结构

如上图所示,head命令显示的是`/etc/shadow`文件里头4行的内容。

每一行代表一个系统的用户组及其属性(4个,用‘:’分开)

1. 用户组名称。

2. 用户组密码。若开头为`!`表示无合法密码,也就无用户组管理员。

3. 用户组管理员的账号。

4. 用户组的所属账号。与`/etc/group`内容相同。

#### 1.2.3 有效与初始用户组 `groups`, `newgrp`

* 初始用户组(initial group)

用户登录系统后就由系统指定的用户组。即是`/etc/passwd`中用户账号所在行第4字段(`GID`)的值对应的用户组(用户组名:`/etc/group`中查询第3字段值为GID的那一行的第一字段值)。

* 有效用户组(effective group)

`groups`:该命令查看登录用户的所有用户组。第一个为有效用户组(effective group)。用户新建文件的权限与有限用户组的一致。

`newgrp`:更改登录用户的有效用户组。仅能在登录用户所属的用户组中进行更改。即是仅能在登录用户用`groups`查出的用户组中进行更改。

## 2 账号管理

### 2.1 用户的新增与删除

#### 2.1.1 用户新增

* **`useradd userName`**:创建新用户账号‘userName’。

系统会做:

1. 在`/etc/passwd`文件中创建一行与账号相关的数据,包括创建UID/GID/主文件夹(根据系统的默认值进行,可用`useradd -D`命令查看)等。

2. 在`/etc/shadow`文件中将此账号的密码相关参数填入,但无密码内容。

3. 在`/etc/group`文件中创建一个与账号名称一样的组名记录。

4. 在`/etc/gshadow`文件中创建一个与账号名称一样的组名记录。

5. 在`/home`目录创建一个与账号同名的目录作为用户主文件夹,权限为‘700’(仅仅用户自己可进入自己的主文件夹)。

创建新用户账号时系统的默认值通常都在这几个文件:

1. `/etc/default/useradd`

2. `/etc/login.defs`

3. `/etc/skel/*`

使用`man useradd`可以查看各个参数的作用。

* **`passwd`**:设置账号密码

>[danger] `root` 账号

> * 给一般账号设置密码:`passwd userName`

> * 给自己设置密码:`passwd`

常用参数:

`-l`:让账号失效

`-u`:恢复账号

`-S`:查看账号信息

`chage [-ldEImMW] userName`:对userName的账号信息进行细致的更改(针对userName在`/etc/passwd`文件中的记录)

~~~Linux

# chage -d 0 userName

~~~

>[info] 'userName'账号的密码新建时间被修改为1970/1/1,在该账号登录系统时会被系统强制要求修改密码,更改密码完成后被踢出系统。再次登录时就使用新密码。

* **`usermod`**:微调useradd增加的用户参数。

~~~Linux

# usermod [-cdegGlsuLU] userName

~~~

#### 2.1.2 用户

* **`userdel`**:微调useradd增加的用户参数。

~~~Linux

# userdel [-r] userName

~~~

带`-r`执行该命令后,系统会删除用户相关数据

1. 用户账号/密码,`/etc/passwd`,`/etc/shadow`

2. 用户组,`/etc/group`,`/etc/gshadow`

3. 用户个人文件,`/home/userName`,`/var/spool/mail/userName`

>[warning] * 如果账号只是暂时不用,只需要将`/etc/shadow`里的账号失效日期(第8字段)设为0就可以使得该账号无法使用,但所有与该账号有关的数据都会保留。

>* 如果要完整的将某个账号删除,在执行` userdel -r userName`前,先以`find / -user userName`查出整个系统内属于userName的文件后,再进行删除。

### 2.2 一般用户常用账号数据更改与查询

* **`finger`**

* **`chfn`**

* **`chsh`**

* **`id`**

你可能感兴趣的:(linux,acl权限,软件)