Linux 的权限管理

Linux 的权限操作同用户与用户组操作是兄弟操作,二者经常同时存在。

1. 权限概述

  • Linux系统一般将文件写入/读取发给你问的身份分为三个类别:owner, group, others。且3种身份各有read , write , execute等权限

  • 权限: 在多用户计算机的管理中,权限是指某个特定的用户具有特定的系统资源使用权力,像是文件夹、特定系统指令的使用或存储量的限制

  • 读权限(read):
    对于文件夹来说,读权限影响用户是否可以列出目录结构
    对于文件来说,读权限影响用户是否可以查看文件内容

  • 写权限 (write):
    对于文件夹来说,写权限影响用户是否可以创建/删除/复制 目录或文档 对于文件来说, 写权限影响用户是否可以编辑文件
    在linux中,如果要删除一个文件,不是看文件有没有写权限,而是看文件所在目录有没有写权限

  • 执行权限 (execute): 一般是对于文件来说特别是脚本文件,给目录赋予执行权限没有作用。

2. 身份介绍

2.1 owner身份(文件所有者)

由于linux是多用户、多任务的操作系统,因此可能常常有多人同时 在某台主机上个工作,但每个人均可以在主机上设置文件的权限,让其成为个人的“私密文件”,即个人所有者,因为设置了适当的权限,除owner外用户无法查看此文件


2.2 group身份(与文件所有者同组的用户)

与文件所有者同组最有用的功能体现在多个团队在同一台主机上开发资源的时候。例如主机上用户结构如下图:

group

members

A

a1,a2,a3

B

b1,b2,b3

这两个团队要共同完成一份报告F,由于设置了适当的权限,A,B团体中各个成员都能互相修改对方的数据,但是团队C 的成员则无法修改F的内容,甚至连查看内容的权限都没有。同时,团体的成员也能设置自己的私密文件,让团队的其他成员也读取不了文件数据,在Linux中每个账户支持多个用户组,例如a1,b2既可以属于A也可以属于B。


2.3 other 身份(相对与所有者)

对于所有者来讲,除与所有者同组的用户以外的用户叫other


2.4 root用户(超级管理员)

在linux中,还有一个拥有相比于其他用户的最高权限用户,就是root,它可以完全管理其他任何用户,其他用户设置的权限无法控制root用户

3. Linux 权限操作

3.1查看权限

要设置权限,就需要知道文件的一些基本属性和权限的分配规则,在linux中ls命令常用来看文件的属性。

  • 指令:ls -l 路径 //等价于 ll

实例: drwxr-xr-x 为linux对文件权限的描述

d

rwx

r-x

r-x

类型

所有者权限

用户组权限

其他用户权限

目录

可读写,可执行

可读,不可写,可执行

可读,不可写,可执行

  • 类型:
    d: 表示目录 directory
    -: 表示文件
    l : 快捷方式 link
    s: 套接字

3.2 权限设置

  • 指令:chmod 选项 权限模式 文档

    • 常用 -R 选项 表示递归设置权限

    • 权限模式:该文档要设置的权限信息

    • 文档: 可以是文件,也可以是文件夹,绝对路径和相对路径通用

注意: 如要对某文件进行权限设置,则操作者要么是root用户要么是文件的owner

  1. 字母形式:

option

char

note

who

u

给用户自己设置

who

g

给某个组设置

who

o

给其他人设置

who

a

给所有人设置 (默认)

opr

+

增加权限

opr

-

减少权限

opr

=

确定权限

aut

r

可读

aur

w

可写

aur

x

执行

例如给本文档设置权限:所有者拥有所有权限 其他用户有写权限
修改前:-rw-rw-r--
chmod u+x,o+w 'linux authority.md'
chmod u=rwx,o=rw 'linux authority.md'
修改后:-rwxrw-rw-

注意: 当所有用户都拥有一个文件的执行权限时,在终端中此文件为绿色

  1. 数字形式
    利用数字来设置权限,比字母形式更加简便

    数字

    权限

    表达

    0

    无读,无写,无执行

    ---

    1

    无读,无写,可执行

    --x

    2

    无读,可写,无执行

    -w-

    3

    无读,可写,可执行

    -wx

    4

    可读,无写,无执行

    r--

    5

    可读,无写,可执行

    r-x

    6

    可读,可写,无执行

    rw-

    7

    可读,可写,可执行

    rwx

    读权限:4
    写权限:2
    执行权限:1
    例如:完全开放(所有用户拥有所有权限)4+2+1 = 7

    • 开放本文档的所有权限: chmod 777 'linux authority.md'
      执行结果:-rwxrwxrwx

    • 只向所有者开放全部权限,同组用户给予读写权限,其他用户只给执行权限:chmod 761 'linux authority.md'
      执行结果: -rwxrw---x

注意1: 如果用root用户给一个文档的权限设置指令为:chmod -R 731 aaa,此指令有什么问题:

  • 拥有者:可读可写可执行

  • 同组用户: 不可写可读可执行

  • 其他用户:不可读不可写可执行

当同组用户登录时,他有写权限,却没有读权限。故此权限设置会拒绝此用户的一切访问,除非用他用追加输出向文件中加入文字。要想写文档,必须先读文档


问题1 假如作为root,你如何让一个目录的非所有者能够读取,修改,执行目录下的文件,但不能在此目录下新建文件或文件夹的同时此文件夹下的所有文件也无法被复制,移动?
答案: 给予此目录下的文件全权限,但是不给予这个目录的写权限。 因为对于目录来讲,写权限影响用户是否可以在此目录下创建,删除,重命名文件。


4. 属主和属组设置

  • 属主:owner

  • 属组:用户所属的用户组

-rw-rw-r-- 1 cooder cooder 2699 1月 7 23:43 'network config.md'
两个'cooder'中前一个是所属用户,第二个是所属用户组

文档创建时会使用当前用户的用户名(作为属主),主组(作为属组)等信息

如果说有时候去删除某个用户,则该用户对应的文档的属主和属组就需要更改

4.1 chown (change owner)

  • 所用:更改文档的所属用户。

  • 语法:chown -R 用户名 文件路径 // 加 -R表示递归,如果要更改文件夹,则需要添加此选项

案例:将rt.txt 文件的所有者改为test
更改前文件属主:cooder
chown test rt.txt
更改后文件属性:-rw-rw-r-- 1 test cooder 25 1月 28 23:31 rt.txt

4.2 chgrp (change group)

  • 作用:更改用户组

  • 语法:chgrp -R 用户组名 文档路径 // -R 表示 递归 ,修改文件夹时使用

案例:将rt.txt文件的属组改为test
更改前文件属组:cooder
chgrp test rt.txt
更改后文件属性:-rw-rw-r-- 1 test test 25 1月 28 23:31 rt.txt

如何通过一个命令更改文件属主和属组

通过chown即可达到效果

  • 语法:chown -R 用户名:用户组名 文档路径
    如上两个案例可以合并成:chown test:test rt.txt

##普通用户的提权
reboot ,shutodwn ,init ,halt ,User管理这些操作在普通身份下无法执行,但是有些特殊情况下又需要执行权限,同时也不可能让root用户把自己的密码告诉普通用户,如何让普通用户能够执行这些操作?

可以使用 sudo命令来提升普通用户权限。
sudo可以让管理员事先定义某些特殊命令可以让普通用户执行。默认情况下sudo中是没有除root用户之外用户的规则,如需使用则要修改sudo的配置文件。

  • 配置文件:/etc/sudoers
    默认root用户没有sudoers的修改权限,但是提供了一个修改的方式

  • 修改sudo配置文件:visudo

User privilege specification
root ALL=(ALL:ALL) ALL

配置文件的这两行 :

标记

解释

root

表示用户名

ALL

表示允许登录的主机(地址的白名单)通过此配置决定用户在哪台远程设备能够登录服务器

(ALL)

表示 以谁的身份执行,all表示root

ALL

表示当前用户可以执行的命令,多个命令用 ‘,’分割

在写速度哦规则是不建议直接写命令,而是写命令的完整格式 查看命令的完整格式:which 命令

案例 使cooder用户 可以添加用户并且可以修改非root用户的密码
cooder ALL=(ALL) /usr/sbin/useradd,/usr/bin/passwd
使用命令:cooder用户下执行:sudo useradd
目前此操作可以更改root用户的密码,故需要进一步修改
/usr/sbin/useradd,!/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root


本文章使用limfx的vscode插件快速发布