一、权限定义

1、文件权限作用的对象

owner :属主 — u
group :属组 — g
other :其他人 — o

2、文件的三种权限

 //针对文件的权限
r 可读 可以使用cat命令查看文件的类容
w 可写 可以编辑或删除文件
x 可执行 在命令行界面下当做命令提交给内核执行 //针对目录的权限
r 可读 可以使用ls命令查看目录里面包含哪些文件
w 可写 可以在此目录中创建其他的文件或删除此目录中的文件
x 可执行 可以使用cd命令切换至此目录,也可以使用ls -l查看目录内部文件的详细信息 //其他:
rw:可以使用vim编辑器打开文件并保存
rx :可以执行执行类似脚本;需要将命令提交给内核才能执行的文件 ;单独使用x可能无法达到想要的效果

3、r、w、x 权限与十进制的转换

r  — 4
w — 2
x — 1 

二、权限管理命令

1、chmod —— 修改权限命令(可以修改文件或目录)

chmod
-R(recursive):递归处理,将该目录下的所有文件及子目录一起处理 <权限范围>+<权限设置>:开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置>:关闭权限范围的文件或目录的该选项权限设置;
<权限范围>=<权限设置>:指定权限范围的文件或目录的该选项权限设置;
示例
chmod u+r filename
chmod g+w filename
chmod o+x filename chmod u-r filename
chmod g-w filename
chmod o-x filename chmod u=rwx filename
chmod g=rw filename
chmod o=x filename chmod a+r filename
chomd a+w filename
chomd a+x filename
chomd a-r filename
chomd a-w filename
chomd a-x filename
chomd a=rw filename
chomd a=x filename

2、chown —— 修改文件或目录的属主或属组权限的命令

chown
-R(recursive):递归处理,将指定目录下的所有文件及子目录一并处理 示例
chown username:groupname filename //修改属主和属组
chown username.groupname filename //可以使用点代替冒号 chown username filename //只修改属主
chown :groupname filename //只修改属组
chown .groupname filename chown -R username:groupname filename //递归修改文件属主和属组 

三、遮罩码

1、什么是遮罩码

在Linux系统创建一个文件或目录时,一个文件的权限是644,而一个目录的权限时755,这些看上去好像是固定的?

仔细看看就会发现:

1️⃣:该文件都没有执行的权限;且该文件除了属主以外,其他的都没有写和执行的权限;

2️⃣:而目录除了属主以外,其他=都没有写的权限。这些都是由umask遮罩码控制的,遮罩码umask的目的就隐藏一些权限。

3️⃣:umask的默认大小是0022

4️⃣:文件的最终权限是:文件:666 — umask (0022;第一个不用减,从第二个开始;666 — 0022=644)

5️⃣:目录的最权限:目录:777 — umask (0022;第一个不用减,从第二个开始;777—0022=755)

2、查看遮罩码

[root@localhost ~]# umask
0022

四、Linux安全上下文

1、进程有属主和主组;文也有属主和属组

任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限
启动为进程后,其进程的属主为发起者,属组为发起者所属的组
进程访问文件时的权限取决于进程的发起者
进程的发起者是文件的属主时,则应用文件属主权限
进程的发起者是文件的属组时,则应用文件属组权限
应用文件“其它”权限

五、特殊权限

1、SUID(4)、SGID(2)、Sticky(1)

SUID
十进制:4 chmod u+s filename
chmod u-s filename
或者
chomd 4644 filename
//如果file本身原来就有执行权限,则SUID显示为s(小写),否则显示为S(大写) SGID
十进制:2 chmod g+s filename
chomd g-s filename
或者
chmod 2644 filename
//如果file本身原来就有执行权限,则SGID显示为s(小写),否则显示为S(大写) Sticky
十进制:1 chomd o+t filename
chomd o-t filename
或者
chmod 1644 filename
//如果DIR本身原来就有执行权限,则Sticky显示为t,否则显示为T

2、特殊权限的作用

  • SUID

    1、SUID权限仅对二进制程序(binary program)有效;
    2、执行者对于该程序需要具有x的可执行权限;
    3、本权限仅在执行该程序的过程中有效(run-time);
    4、执行者将具有该程序拥有者(owner)的权限。 SetUID 的典型应用场景是 passwd 命令。普通用户可以用 passwd 命令修改自己的密码,修改密码实际上是修改 /etc/shadow 文件,而该文件的权限是 000,那么这时就需要普通用户暂时获得 root 用户的身份,来修改 /etc/shadow 文件,以达到修改密码的目的
  • SGID

    1、SGID对二进制程序有用;
    2、程序执行者对于该程序来说,需具备x的权限;
    3、SGID主要用在目录上; 如果用户在此目录下具有w权限的话,若使用者在此目录下建立新文件,则新文件的群组与此目录的群组相同
  • Sticky

    sticky 在英文里面是粘着的意思,而 bit 是位的意思,所以 Sticky BIT 也叫做粘着位。
    
    1、粘着位目前只对目录有效
    2、普通用户对该目录拥有 w 和 x 权限,即普通用户可以在此目录拥有写入权限
    3、如果没有粘着位,因为普通用户拥有 w 权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了 root 可以删除所有文件,普通用户就算拥有 w 权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件 典型如 /tmp/,任何人都可以在这个目录下进行创建文件或目录,但是只能删除自己创建的目录或文件

3、演示

 //SUID
[root@localhost ~]# touch file
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 8月 6 16:02 file
[root@localhost ~]# chmod u+x file
[root@localhost ~]# ll file
-rwxr--r--. 1 root root 0 8月 6 16:02 file
[root@localhost ~]# chmod u+s file
[root@localhost ~]# ll file
-rwsr--r--. 1 root root 0 8月 6 16:02 file
[root@localhost ~]# chmod u-x file
[root@localhost ~]# ll file
-rwSr--r--. 1 root root 0 8月 6 16:02 file //SGID
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 8月 6 16:02 file
[root@localhost ~]# chmod g=rwx file
[root@localhost ~]# ll file
-rw-rwxr--. 1 root root 0 8月 6 16:02 file
[root@localhost ~]# chmod g+s file
[root@localhost ~]# ll file
-rw-rwsr--. 1 root root 0 8月 6 16:02 file
[root@localhost ~]# chmod g-x file
[root@localhost ~]# ll file
-rw-rwSr--. 1 root root 0 8月 6 16:02 file //Sticky
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 8月 6 16:02 file
[root@localhost ~]# chmod o=rwx file
[root@localhost ~]# ll file
-rw-r--rwx. 1 root root 0 8月 6 16:02 file
[root@localhost ~]# chmod o+t file
[root@localhost ~]# ll file
-rw-r--rwt. 1 root root 0 8月 6 16:02 file
[root@localhost ~]# chmod o-x file
[root@localhost ~]# ll file
-rw-r--rwT. 1 root root 0 8月 6 16:02 file 或
//SUID
[root@localhost ~]# touch file
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 8月 6 16:09 file
[root@localhost ~]# chmod 4644 file
[root@localhost ~]# ll file
-rwSr--r--. 1 root root 0 8月 6 16:09 file
[root@localhost ~]# chmod u+x file
[root@localhost ~]# ll file
-rwsr--r--. 1 root root 0 8月 6 16:09 file
[root@localhost ~]# chmod 0644 file
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 8月 6 16:09 file //SGID
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 8月 6 16:09 file
[root@localhost ~]# chmod 2644 file
[root@localhost ~]# ll file
-rw-r-Sr--. 1 root root 0 8月 6 16:09 file
[root@localhost ~]# chmod g+x file
[root@localhost ~]# ll file
-rw-r-sr--. 1 root root 0 8月 6 16:09 file
[root@localhost ~]# chmod 0644 file
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 8月 6 16:09 file //Sticky
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 8月 6 16:09 file
[root@localhost ~]# chmod 1644 file
[root@localhost ~]# ll file
-rw-r--r-T. 1 root root 0 8月 6 16:09 file
[root@localhost ~]# chmod o+x file
[root@localhost ~]# ll file
-rw-r--r-t. 1 root root 0 8月 6 16:09 file
[root@localhost ~]# chmod 0644 file
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 8月 6 16:09 file

六、命令委派

1、什么是命令委派

sudo可以实现某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令

2、主配置文件

/etc/sudoers

3、sudo配置

sudo
使用visudo直接打开/etc/sudoers文件,每一行就是一个sudo条目 格式
who hosts=(runas) command
who :运行命令着的身份
hosts :通过哪些主机
(runas) :以哪个用户的身份
command :运行哪些命令

4、示例

[root@localhost ~]# visudo
..........
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zhangsan ALL=(ALL) ALL
..........
//添加一个zhangsan用户,在任何位置、以任何身份、执行任何命令

5、别名分类

用户别名
User_Alias NETWORKADMIN =
用户的用户名
组名,使用%引导
还可以其它已经定义的用户别名 主机别名
Host_Alias =
主机名
IP地址
网络地址
其它主机别名 runas(用户身份)别名
Runas_Alias =
用户名
%组名
其它的Runas别名 命令别名
Cmnd_Alias =
命令路径
目录(此目录内的所有命令)
其它已定义的命令别名

6、sudo命令语法

sudo [options] command
-b:在后台执行指令
-v:延长密码有效期限5分钟,如果超过会再次提示输入密码
-l:列出目前用户可执行与无法执行的指令
-V :显示版本信息
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份

7、演示

 //创建一个zhangsan用户
[root@localhost ~]# ls /home/
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# id zhangsan
uid=1000(zhangsan) gid=1000(zhangsan) 组=1000(zhangsan)
[root@localhost ~]# ls /home/
zhangsan
[root@localhost ~]# echo '123456' | passwd --stdin zhangsan
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。 //在/etc/sudoers里面添加一条sudo条目
[root@localhost ~]# visudo
..........
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zhangsan ALL=(ALL) /usr/sbin/useradd
...........
[root@localhost ~]# cat /etc/sudoers |grep zhangsan
zhangsan ALL=(ALL) /usr/sbin/useradd //切换至zhangsan用户执行useradd命令
[root@localhost ~]# su - zhangsan
[zhangsan@localhost ~]$ pwd
/home/zhangsan
[zhangsan@localhost ~]$ sudo useradd lisi 我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点: #1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。 [sudo] zhangsan 的密码:
[zhangsan@localhost ~]$ id lisi
uid=1001(lisi) gid=1001(lisi) 组=1001(lisi)
[zhangsan@localhost ~]$ ls /home/
lisi zhangsan //查看zhsngsan用户可以执行的权限
[zhangsan@localhost ~]$ pwd
/home/zhangsan
[zhangsan@localhost ~]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin 用户 zhangsan 可以在 localhost 上运行以下命令:
(ALL) /usr/sbin/useradd //以zhangsan身份查看版本信息
[zhangsan@localhost ~]$ sudo -V
Sudo 版本 1.8.25p1
Sudoers 策略插件版本 1.8.25p1
Sudoers 文件语法版本 46
Sudoers I/O plugin version 1.8.25p1

七、管理命令

1、last —— 显示用户最近登录信息

单独执行last命令,它会读取/var/log/wtmp的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。

last       //显示用户登录历史及系统重启历史
-n # //显示最近#次的相关信息 示例
[root@localhost ~]# last
root pts/2 192.168.174.1 Fri Aug 7 15:05 still logged in
root pts/1 192.168.174.1 Sat Aug 1 14:30 gone - no logout
root pts/0 192.168.174.1 Sat Aug 1 00:56 gone - no logout
root tty1 Sat Aug 1 00:54 gone - no logout
reboot system boot 4.18.0-147.el8.x Sat Aug 1 00:54 still running
root pts/2 10.0.0.1 Tue Jul 28 19:52 - 10:43 (2+14:51)
root pts/1 10.0.0.1 Tue Jul 28 19:50 - 10:43 (2+14:53)
root pts/1 10.0.0.1 Tue Jul 28 01:14 - 01:23 (00:08)
root pts/0 10.0.0.1 Tue Jul 28 01:10 - 10:43 (3+09:33)
root tty1 Tue Jul 28 00:44 - 10:43 (3+09:59)
reboot system boot 4.18.0-147.el8.x Tue Jul 28 00:41 - 10:43 (3+10:01) wtmp begins Tue Jul 28 00:41:43 2020
[root@localhost ~]# last -n 3
root pts/2 192.168.174.1 Fri Aug 7 15:05 still logged in
root pts/1 192.168.174.1 Sat Aug 1 14:30 gone - no logout
root pts/0 192.168.174.1 Sat Aug 1 00:56 gone - no logout wtmp begins Tue Jul 28 00:41:43 2020

2、lastb —— 显示用户错误的登录列表,此指令可以发现系统的登录异常

单独执行lastb命令,它会读取位于/var/log目录下,名称为btmp的文件,并把该文件内容记录的登入失败的用户名单,全部显示出来

lastb
-n # //显示最近#次的相关信息 示例
[root@localhost ~]# lastb btmp begins Sat Aug 1 00:54:30 2020
[root@localhost ~]# lastb -n 3 btmp begins Sat Aug 1 00:54:30 2020
//由于错误登录比较少,所以只有这一个

3、lastlog —— 显示系统中所有用户最近一次成功登录信息

lastlog文件在每次有用户登录时被查询。可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志/var/log/lastlog的内容  

lastlog
-u<用户名>:显示指定用户的最近登录信息
-t<天数>:显示指定天数以来的登录信息
-b<天数>:显示指定天数前的登录信息 示例
[root@localhost ~]# lastlog
用户名 端口 来自 最后登陆时间
root pts/2 192.168.174.1 五 8月 7 15:05:21 +0800 2020
bin **从未登录过**
daemon **从未登录过**
adm **从未登录过**
lp **从未登录过**
sync **从未登录过**
shutdown **从未登录过**
............... [root@localhost ~]# lastlog -u root
用户名 端口 来自 最后登陆时间
root pts/2 192.168.174.1 五 8月 7 15:05:21 +0800 2020

4、basename、dirname —— 显示路径基名

basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称

[root@localhost ~]# basename /usr/local/src/
src
[root@localhost ~]# dirname /usr/local/src/
/usr/local

Linux_权限管理理论概述的更多相关文章

  1. Linux_日志管理理论概述

    一.日志系统 1.kernel -->物理终端(/dev/console) --> /var/log/dmesg(系统启动时信息(包括错误信息)记录到该文件) 或者:# dmesg 或 # ...

  2. Linux_磁盘管理理论概述

    一.磁盘阵列 1.什么是磁盘阵列? 1️⃣:磁盘整列就是将多块独立的磁盘组合到一起,形成容量大的磁盘组. 2️⃣:将相同的数据存放到不多个的磁盘的不同位置 2.RAID0 1️⃣:RAID0是磁盘整列 ...

  3. Linux_源码安装包管理理论概述

    一.源码包基本概述 1️⃣:源码包的编译用到了linux系统里的编译器,通常源码包都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言 2️⃣:Linux上的C语言编译器叫做gcc,利用 ...

  4. 译-BMC Remedy Action Request System权限控制概述

    原文链接:Access control overview 说明: BMC Remedy Action Request System是BMC ITSM产品平台,简称AR 或者Remedy,可实现基于IT ...

  5. Linux_权限

    一.查看文件或文件夹权限 [root@hadoop09-linux etc]# ll -h /etc #ll 是ls -l 的缩写方式 -h文件大小单位k 截取其中三行说明 drwxr-xr-x. 2 ...

  6. linux_权限小练习

    下面是解释: 当前# root用户, ls列出列表 mkdir 新建目录 赋予目录744权限      对others来说是  r--  只可读 touch 新建在目录下的同名文件 赋予文件600权限 ...

  7. python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制

    django  Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...

  8. SQL Server 数据库的安全管理(登录、角色、权限)

    ---数据库的安全管理 --登录:SQL Server数据库服务器登录的身份验证模式:1)Windows身份验证.2)Windows和SQL Server混合验证 --角色:分类:1)服务器角色.服务 ...

  9. ASP.NET MVC 基于角色的权限控制系统的示例教程

    上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法,接下来讲解基于 ...

随机推荐

  1. 利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理

    在Asp.net Web API中,对业务数据的分页查询处理是一个非常常见的接口,我们需要在查询条件对象中,定义好相应业务的查询参数,排序信息,请求记录数和每页大小信息等内容,根据这些查询信息,我们在 ...

  2. 深入剖析共识性算法 Raft

    一. Raft简介 1.1 Raft简介 Raft 是一种为了管理日志复制的分布式一致性算法.Raft 出现之前,Paxos 一直是分布式一致性算法的标准.Paxos 难以理解,更难以实现.Raft ...

  3. 【笔记】《Redis设计与实现》chapter15 复制

    15.1 旧版复制功能的实现 同步 命令传播 旧版复制功能的缺陷 15.3 新版复制功能的实现 Redis2.8开始,使用PSYNC命令替代SYNC命令来执行复制时的同步操作 PSYNC命令具有完整重 ...

  4. Python的文本和字节序列

    一.字符串的表示和存储 字符串是字符的序列,每个字符都有有一个数字作为标识,同时会有一个将标识转换为存储字节的编码方案: s = 'hello world python' for c in s: pr ...

  5. Day17_106_IO_利用Buffered和BufferWriter完成复制

    利用Buffered和BufferWriter完成复制 代码示例: 用BufferedReader 和 BufferWriter完成复制 import java.io.*; public class ...

  6. Scrapy 爬虫项目框架

    1. Scrapy 简介 2. Scrapy 项目开发介绍 3. Scrapy 项目代码示例 3.1 setting.py:爬虫基本配置 3.2 items.py:定义您想抓取的数据 3.3 spid ...

  7. Java JFR 民间指南 - 事件详解 - jdk.ObjectAllocationOutsideTLAB

    重新申请 TLAB 分配对象事件:jdk.ObjectAllocationOutsideTLAB 引入版本:Java 11 相关 ISSUES: JFR: RecordingStream leaks ...

  8. JDK8新特性(二) 流式编程Stream

    流式编程是1.8中的新特性,基于常用的四种函数式接口以及Lambda表达式对集合类数据进行类似流水线一般的操作 流式编程分为大概三个步骤:获取流 → 操作流 → 返回操作结果 流的获取方式 这里先了解 ...

  9. 趁五一撸个纯Flutter版的心情日记App

    前言 最近真的是太忙了,只能趁着五一期间把之前Android版的心情日记App移植到Flutter平台,并且已经上架华为应用市场以及苹果App Store. 整体框架沿用了两个星期,用Flutter撸 ...

  10. 【beego】beego的路由设置

    beego 存在三种方式的路由:固定路由.正则路由.自动路由 基础路由 从 beego 1.2 版本开始支持了基本的 RESTful 函数式路由,应用中的大多数路由都会定义在 routers/rout ...