【Linux流浪之旅】第一讲 管理用户和文件权限

系列文章目录

第一讲 管理用户和文件权限


文章目录

前言

一、管理用户和组帐号

1.1. 用户和组账号介绍

1.1.1. 用户帐号文件 passwd

1.1.2. 用户帐号文件 shadow

1.2. 用户账号管理

1.2.1. 添加用户账号

1.2.2. 用户帐号的初始配置文件

1.2.3. 设置/更改用户口令

1.2.4. 修改用户帐号的属性

1.2.5. 删除用户账号

1.3. 组账号管理

1.3.1 组帐号文件 group、gshadow

1.3.2 添加组账号

1.3.3. 添加、删除组成员

1.3.4. 删除组账号

1.4. 用户和组帐号查询

二、管理文件/目录的权限和归属

2.1. 文件/目录的权限和归属

2.2. 设置文件/目录的权限

2.3. 设置文件/目录的归属

2.4. 使用附加权限

2.4.1. SET位权限

2.4.2. 粘滞位权限 Sticky

2.4.3. 设置SET位、粘滞位权限


前言

今天要跟大家聊的是关于Linux操作系统的“管理用户和文件权限”,主要是以下几个点:

  • 了解用户和组帐号的配置文件 
  • 会管理用户帐号和组帐号
  • 会设置文件和目录权限
  • 会设置文件和目录归属

【Linux流浪之旅】第一讲 管理用户和文件权限_第1张图片

一、管理用户和组帐号

1.1. 用户和组账号介绍

Linux基于用户身份对资源访问进行控制。

1、用户帐号:

  • 超级用户:即root用户,类似于Windows系统中的Administrator用户,非执行管理任务时不建议使用root用户登录系统
  • 普通用户:普通用户帐号一般只在用户自己的宿主目录中有完全权限
  • 系统用户:用于维持系统或某个程序的正常运行,一般不允许登录到系统。例如:bin、daemon、ftp、mail等

2、组帐号:

  • 基本组(私有组)
  • 附加组(公共组)

3、UID和GID:

  • UID(User Identity,用户标识号)
  • GID(Group Identify,组标识号)

root用户的UID的固定值为0、root组帐号的GID号为固定值0;
1~499的UID、GID默认保留给程序用户使用,普通用户/组使用的UID、GID号在500~60000之间。

1.1.1. 用户帐号文件 passwd

用户帐号文件用于保存用户的帐号基本信息。

文件位置:/etc/passwd,每一行对应一个用户的帐号记录。

举例释义:

[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/dev/null
nobody:x:99:99:Nobody:/:/dev/null
test:x:996:996::/home/test:/bin/bash
  • 字段1:用户帐号的名称
  • 字段2:用户密码字串或者密码占位符“x”
  • 字段3:用户帐号的UID号
  • 字段4:所属基本组帐号的GID号
  • 字段5:用户全名
  • 字段6:宿主目录
  • 字段7:登录Shell信息 

说个小秘密:

        (1)基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改;

        (2)在早期的UNIX操作系统中,用户帐号的密码信息是保存在passwd文件中的,不法用户可以很容易的获取密码字串并进行暴力破解,因此存在一定的安全隐患;

        (3)后来经改进后,将密码转存入专门的shadow文件中(见下页)并严格控制全新,而passwd文件中仅保留密码占位符“x” 。

1.1.2. 用户帐号文件 shadow

shadow用于保存密码字串、密码有效期等信息。

文件位置:/etc/shadow,每一行对应一个用户的密码记录。

举例释义:

[root@localhost ~]# cat /etc/shadow
root:$1$po/zD0XK$4HSh/Aeae/eJ6dNj1k7Oz1:19079:0:99999:7:::
bin:!*:18131:0:99999:7:::
nobody:!*:18131:0:99999:7:::
test:$1$po/zD0XK$4HSh/Aeae/eJ6dNj1k7Oz1:19649:6:99999:30:::
  • 字段1:用户帐号的名称
  • 字段2:加密的密码字串信息
  • 字段3:上次修改密码的时间
  • 字段4:密码的最短有效天数,默认值为0
  • 字段5:密码的最长有效天数,默认值为99999
  • 字段6:提前多少天警告用户口令将过期,默认值为7
  • 字段7:在密码过期之后多少天禁用此用户
  • 字段8:帐号失效时间,默认值为空
  • 字段9:保留字段(未使用)

说个小秘密:

        (1)默认只有root用户能够读取文件中的内容,并且不允许root直接编辑该文件中的内容。

        (2)上次修改密码的时间,表示从1970年01月01日(可理解为Unix系统的诞生日)算起到最近一次修改密码时间隔的天数。

1.2. 用户账号管理

1.2.1. 添加用户账号

useradd命令
        格式:useradd  [选项]...  用户名
常用命令选项
        -u:指定 UID 标记号
        -d:指定宿主目录,缺省为 /home/用户名
        -e:指定帐号失效时间
        -g:指定用户的基本组名(或UID号)
        -G:指定用户的附加组名(或GID号)
        -M:不为用户建立并初始化宿主目录
        -s:指定用户的登录Shell

最简单的用法是,不添加任何选项,只使用用户名作为useradd命令的参数,按系统默认配置建立指定的用户帐号。
下面演示以下添加用户的操作,重点演示 -d、-e、-g、-G、-s 等几个选项的用法,例如:

  • 创建名为test1的用户帐号,并将其UID号指定为501

        [root@localhost ~]# useradd -u 501 test1
        [root@localhost ~]# cat /etc/passwd
        test1:x:501:501::/home/test1:/bin/bash

  • 创建一个考试测试用的帐号test2,指定属于users组,该帐号于2029-07-30失效

        [root@localhost ~]# useradd -g users -e 2029-07-30 test2 

1.2.2. 用户帐号的初始配置文件

 文件来源:新建用户帐号时,从 /etc/skel 目录中复制而来

主要的用户初始配置文件:

  • ~/.bash_profile:用户每次登录时执行
  • ~/.bashrc:每次进入新的Bash环境时执行
  • ~/.bash_logout:用户每次退出登录时执行

说个小秘密:

        (1)充分理解这些文件的作用,便于我们安排一些自动运行的后台管理任务,例如:.bashrc文件中默认设置了一些命令别名;

        (2)默认情况下,用户宿主目录下的初始配置文件只对当前用户有效,而全局配置文件对所有用户有效。

1.2.3. 设置/更改用户口令

passwd命令:

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

常用命令选项:

        -d:清空用户的密码,使之无需密码即可登录
        -l:锁定用户帐号
        -S:查看用户帐号的状态(是否被锁定) 
        -u:解锁用户帐号


说个小秘密:

       (1) “未设置密码”的用户帐号尚未完成初始化,处于不可登录状态,这与“空密码”的情况(已经为用户设置密码,但密码字串为空)是不同的—— “未设置密码”的用户将被禁止登录系统,而拥有“空密码”的用户是可以在本地终端登录的。
        (2)普通用户也可以使用passwd命令,但只能更改自己的密码,密码要求有一定的复杂性(如不要直接使用英文单词,长度保持在6位以上),否则系统可能拒绝进行设置.
        (3)被锁定的帐号也将无法登录系统。

1.2.4. 修改用户帐号的属性

usermod命令:

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

常用命令选项:

        -l:更改用户帐号的登录名称
        -L:锁定用户账户
        -U:解锁用户账户
        以下选项与useradd命令中的含义相同
                 -u、-d、-e、-g、-G、-s

注:usermod有两个选项“-L”、“-U”,分别用于锁定、解锁用户帐号,这两个选项与passwd命令的“-l”、“-u”选项作用基本相同,只不过大小写存在区别

1.2.5. 删除用户账号

userdel命令:

        格式:userdel  [-r]  用户名
        添加 -r 选项时,表示连用户的宿主目录一并删除

[root@localhost ~]# useradd test
[root@localhost ~]# ls -ld /home/test/
drwx------ 2 test test 4096 08-09 12:11 /home/test/
[root@localhost ~]# userdel -r test
[root@localhost ~]# ls -ld /home/test/
ls: /home/stu01/: 没有那个文件或目录

1.3. 组账号管理

1.3.1 组帐号文件 group、gshadow

与用户帐号文件相类似:
        /etc/group:保存组帐号基本信息
        /etc/gshadow:保存组帐号的密码信息

  • 与组帐号相关的配置文件也有2个,分别是/etc/group、/etc/gshadow
  • group文件内的最后一个字段中列出属于该组的用户成员(一般不包括基本组对应的用户帐号),多个成员之间以逗号“,”分隔

1.3.2 添加组账号

groupadd命令:
        格式:groupadd  [-g GID]  组帐号名

[root@localhost ~]# groupadd -g 1000 test
[root@localhost ~]# cat /etc/group
test:x:1000:

1.3.3. 添加、删除组成员

gpasswd命令:

        用途:设置组帐号密码、添加/删除组成员
        格式:gpasswd  [选项]...  组帐号名

常用命令选项:

[root@localhost ~]# grep "test" /etc/group
test:x:1000:test,root,adm
[root@localhost ~]# gpasswd -d test test
将用户“root”从“market”组中删除
[root@localhost ~]# grep "test" /etc/group
test:x:1000:test,adm

注:使用“-M”选项时可以为指定组帐号定义成员列表(注意:会覆盖原有组成员),需要添加多个用户到指定的组中时非常方便。

1.3.4. 删除组账号

groupdel命令:

        格式:groupdel  组帐号名

[root@localhost ~]# groupdel test
[root@localhost ~]# grep "test" /etc/group
[root@localhost ~]#

注:删除组帐号后,从/etc/group文件中将查不到相应的记录

1.4. 用户和组帐号查询

id命令
        用途:查询用户身份标识
        格式:id  [用户名]
groups命令
        用途:查询用户所属的组
        格式:groups  [用户名]
finger命令
        用途:查询用户帐号的详细信息
        格式:finger  [-l]  [用户名]
users、w 、who命令
        用途:查询已登录到主机的用户信息

二、管理文件/目录的权限和归属

2.1. 文件/目录的权限和归属

访问权限:
        读取:允许查看文件内容、显示目录列表
        写入:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
        可执行:允许运行程序、切换目录
归属(所有权):
        属主:拥有该文件或目录的用户帐号
        属组:拥有该文件或目录的组帐号

【Linux流浪之旅】第一讲 管理用户和文件权限_第2张图片

  • “-rw-r—r--”部分的第一个字符表示文件类型,可以是d(目录)、b(块设备文件)、c(字符设备文件),减号“-”(普通文件)、字母“l”(链接文件)等,其余部分指定了文件的访问权限
  • 在表示属主、属组内用户或其他用户对该文件的访问权限时,主要使用了四种不同的权限字符: r    可读 ;w   可写 ;x   可执行 ;-   无权限 
  • r、w、x、- 权限字符还可分别表示为8进制数字4、2、1、0

2.2. 设置文件/目录的权限

chmod命令:

        chmod是 Linux 和 Unix 系统中的一个命令,用于改变文件或目录的访问权限。这个命令可以控制哪些用户或用户组可以对文件或目录进行读取、写入或执行操作。

        格式1(符号模式):chmod   [ugoa]  [+-=]  [rwx]  文件或目录... 

        格式2(八进制模式):chmod nnn 文件或目录...

常用命令选项:

        -R:递归修改指定目录下所有文件、子目录的权限

# 重新设置test文件的权限,为属主用户添加执行权限,去除其他用户的读取权限
[root@localhost ~]# chmod u+x,o-r test
[root@localhost ~]# ls -l test
-rwxr----- 1 root root 29588 05-12 06:19 test
# 重新设置test文件的访问权限,恢复为“rwxr-xr-x”
[root@localhost ~]# chmod 755 test
[root@localhost ~]# ls -l test
-rwxr-xr-x 1 root root 29588 05-12 06:19 test 
# 使用递归的方式将“/home/test/”目录中所有子目录、文件的权限都设置为“rw-r--r--”
[root@localhost ~]# chmod -R 755 /home/test/
# 需要设置的具体权限值,如“777”、“644”等

2.3. 设置文件/目录的归属

chown命令:

        chown是Unix和Linux系统中的一个命令,主要用于修改文件或目录的所属用户和组。这个命令的功能非常强大,它允许用户改变文件或目录的所有权,使其归属于另一个用户或组。

格式:

        chown  属主   文件或目录
        chown  :属组  文件或目录
        chown  属主:属组  文件或目录

常用命令选项:

        -R:递归修改指定目录下所有文件、子目录的权限

注:需要设置文件或者目录的归属时,可以通过chown、chgrp命令进行chown命令既可以修改属主,也可以修改属组,而chgrp命令只用于修改属组信息。

2.4. 使用附加权限

2.4.1. SET位权限

主要用途:

        为可执行(有 x 权限的)文件设置,权限字符为“s”,其他用户执行该文件时,将拥有属主或属组用户的权限

SET位权限类型:

        SUID:表示对属主用户增加SET位权限
        SGID:表示对属组内的用户增加SET位权限

应用示例:/usr/bin/passwd
【Linux流浪之旅】第一讲 管理用户和文件权限_第3张图片

Q:问题来了,普通用户并没有权限修改“/etc/shadow”文件,那为什么可以修改自己的登录密码呢?
A:这是因为,passwd命令程序被设置了SUID权限,普通用户在执行该命令时临时获得相当于属主用户(root)的权限。

注意:不要轻易为可执行文件设置SET位权限,特别是对于那些属主、属组是root的执行程序,使用SET位权限时更应该慎重。例如,若为vim编辑器程序设置SUID权限,将导致普通用户也可以使用vim编辑器修改系统中的任何配置文件。

2.4.2. 粘滞位权限 Sticky

主要用途:
        为公共目录(例如,权限为777的)设置,权限字符为“t”
        用户不能删除该目录中其他用户的文件
应用示例:

【Linux流浪之旅】第一讲 管理用户和文件权限_第4张图片

        由于系统及服务程序运行的需要, Linux提供了/tmp、/var/tmp等临时目录,允许任意用户、程序写入数据。
        设置粘滞位以后,正好可以保持一种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据 。

2.4.3. 设置SET位、粘滞位权限

使用权限字符:
        chmod  ug±s  可执行文件...
        chmod  o±t  目录名...
使用权限数字:
        chmod  mnnn  可执行文件...
        m为4时,对应SUID,2对应SGID,1对应粘滞位,可叠加

注意:

  1. SET位标记字符为“s”,若使用8进制数字形式,则SUID对应为“4”、SGID对应为“2”。
  2. 在权限模式中可采用“nnnn”的形式时,如“4755”表示设置SUID权限、“6755”表示同时设置SUID、SGID权限。
  3. 以为 /bin/touch 命令设置SUID权限为例进行演示,普通用户使用该命令创建测试文件,比较新建文件的属主变化。
  4. 为普通文件(无执行权限的)设置SET位权限从语法上虽然也可行,但没有实际意义(标记字符将变为大写字母“S”)。
  5. 为普通文件或者用户本没有写入权限的目录设置粘滞位语法上也是可行的,但没有实际意义(标记字符将变为大写字母“T”)。

        欢迎私信交流学习,有时间一定会回复。

你可能感兴趣的:(流浪运维,linux,运维,服务器)