2024年Linux最全Linux编程之权限系统与工具使用(二),最新BAT大厂面试者整理的Linux运维面试题目模板

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

1.1、文件基本权限

首先看下linux下的文件权限,可以使用ll命令或者是带-l(长列表选项)的ls命令。

文件列表信息分为:文件类型、权限、链接数、所属用户、所属用户组、文件大小、最后修改时间、文件名。

linux一共有7种文件类型,分别如下:

-:普通文件

d:目录文件
l: 软链接(类似Windows的快捷方式)
(下面四种是特殊文件)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如猫等串口设备)
s:套接口文件/数据接口文件(例如启动一个MySql服务器时会产生一个mysql.sock文件)

文件权限对应关系

我们看上面截图第一个文件权限信息,每三位为一组

rwxr-xr-x 5 root root 94 Jun 27 2017 xdg

rwx:代表文件所有者(u表示)权限,这里是root,root对该文件拥有读写执行权限。

r-x : 代表所属组(g表示)的权限,这里所属组拥有对该文件读和执行的权限。

r-x : 代表其他人(o表示)的权限,这里和上面权限一样。

当然我们也可以修改文件的权限。

linux中chmod命令就可以用来变更文件或目录的权限。

语法: chmod (选项) 模式 文件名

用法如下:

先创建一个文件a.txt,此时a.txt文件拥有者是没有执行权限,我们可以给它加上执行权限(x),u就是代表文件拥有者。

如果想给a.txt的用户组和其他用户也加上执行权限,可以加上多个。

既然可以加权限,也可以减权限,加号改成减号就行。

还有更简单的方式,直接用等于号赋予相应的权限

或者用a=的方式赋予,a就是代表all。

也可以给多个文件赋予权限,我们在创建一个文件b.txt

总结下,权限对文件及目录的作用

对于文件:

r : 可以读取文件内容(比如命令 cat more head tail)。

w : 可以编辑文件(比如命令 vim echo ),但是不能删除文件,因为文件名没有放在自己的文件空间,而是放在了上一级的目录空间下。

x : 可以执行。

对于目录:

r:可以查询目录下的文件(比如命令ls ll)。

w:具有修改目录结构的权限,比如新建文件和目录,删除此目录下文件和目录,重命名此目录下文件和目录,剪切和复制(比如命令cp mv touch rm)。

x:目录有执行权限但是不能运行,可以进入目录(cd命令)。

对文件来说最高权限是x,对于目录来说最高权限是w,一般给目录赋予权限0 ,5(rx),7(rxw),赋予4 ,1, 6都是没有意义的。对于文件能否删除,首先要对目录具有执行权限,同时对文件也具有执行权限。

chown命令:用来改变文件或目录的所有者和所属用户组。

chgrp命令 :用来改变文件或目录的所属的用户组。

示例:

[root@localhost test123]# ll
总用量 0
drwxr-x— 2 root root 20 5月 5 11:38 abc
[root@localhost test123]# chown test123:test123 abc 将abc用户组和所属者都改成test123 中间用:分割
[root@localhost test123]# ll
总用量 0
drwxr-x— 2 test123 test123 20 5月 5 11:38 abc

1.2、默认权限

我们在linux系统中新建一个文件或者目录,那么这个文件或目录会有一个权限,这个权限就是默认权限。这个权限就是靠umask的值来定义的。那么什么是umask?

umask(权限掩码) 就是指定当前用户在建立文件或目录时候的权限默认值。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次登录系统时,umask命令都被执行, 并自动设置掩码mode来限制新文件的权限。用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉。

我们可以执行umask命令来查看系统中文件默认权限。

[root@localhost local]# umask
0022

解释下0022

第一位0:文件特殊权限。

022:文件默认权限。

下面创建一个文件和一个目录。

[root@localhost tmp]# touch a.txt
[root@localhost tmp]# mkdir dir
[root@localhost tmp]# ll
总用量 54768
-rw-r–r-- 1 root root 0 5月 5 14:31 a.txt
drwxr-xr-x 2 root root 6 5月 5 14:31 dir

我们看文件默认权限是644,而目录的权限是755,那么是如何依靠umask来设定权限的呢。

我们先看下文件默认权限的特点:

1.文件默认不能建立为执行权限,必须手工赋予执行权限。所以文件的默认权限最大为666。这样能保护系统安全。

2.默认权限要换算成对应的字母权限在相减而不是数字。

3.建立文件或目录之后的默认权限,为666减去umask的值。

计算方式如下:

  1. 文件默认最大权限666,umask=022

-rw-rw-rw- 减去 -----w–w- 等于 -rw-r–r-- (644)

  1. 文件默认最大权限666,umask=033

-rw-rw-rw- 减去 -----wx-wx 等于 -rw-r–r-- (644)

其实是做了一个逻辑与的运算。

目录的默认权限:

1.目录默认权限最大是777。
2.目录默认权限换算成字符在相减。
3.建立目录之后的默认权限,是777减去umask的值。

修改umask的值:

使用umask + 值,比如umask 0000;

不过这样只是临时生效,要永久修改就要修改环境变量配置文件/etc/profile

1.3、ACL(Access Control List )权限

linux系统中一个文件只有一个所属组,一个所有者,acl权限是解决用户对文件权限不足,也就是用户身份不够的情况下。打算让某个用户对这个文件有权限,不用考虑这个用户是哪个所有组
还是其他人。用acl给这个用户赋予权限。ACL权限 是解决用户对文件身份不足的问题(该用户不属于 拥有者 所属组 其他人)。系统是否支持ACL是与文件系统有关的。

首先查看系统分区中ACL权限是否开启,命令如下:

先看下分区情况
[root@localhost tmp]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 39134548 29770328 9364220 77% /
devtmpfs 923152 0 923152 0% /dev
tmpfs 933636 80 933556 1% /dev/shm
tmpfs 933636 9128 924508 1% /run
tmpfs 933636 0 933636 0% /sys/fs/cgroup
/dev/mapper/centos-home 19105792 33080 19072712 1% /home
/dev/sda1 508588 177692 330896 35% /boot
.host:/ 127927292 118371212 9556080 93% /mnt/hgfs
tmpfs 186728 12 186716 1% /run/user/42
tmpfs 186728 0 186728 0% /run/user/0

因为我安装的是centos7,所以我的系统文件系统是xfs类型,用xfs_growfs命令查看,如果文件系统是ext2/ext3/ext4可以用dumpe2fs命令查看指定分区详细文件系统信息。
[root@localhost tmp]# xfs_growfs /dev/sda1
meta-data=/dev/sda1 isize=256 agcount=4, agsize=32000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0 spinodes=0
data = bsize=4096 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

查看系统是否支持ACL,使用dmesg命令(可以帮助用户了解系统的启动信息,可以查看ACL信息)查看,发现xfs文件系统是默认支持ACL权限的。

查看ACL权限:

设定ACL权限:

setfacl 选项 文件名
选项:

-m:设定ACL权限。

-x:删除指定的ACL权限。

-b:删除所有的ACL权限。

-d:设定默认的ACL权限。

-k:删除默认的ACL权限。

-R:递归设定ACL权限。

1.4、sudo权限

sudo是linux系统管理指令,操作对象是系统命令。是允许让普通用户执行部分或者全部的系统管理员才能执行的命令的一个工具,限制某个普通用户有限的命令有root权限(比如说重启,备份,添加用户,ifconfig命令等)。sudo 执行时候不需要知道超级管理员的密码。

sudo是超级用户赋予普通用户权限才能使用,sudo为系统管理员提供配置文件,使用visudo命令(这个命令可以防止两个用户同时修改它,也能进行有限的语法检查)可以打开该配置文件:

[root@localhost ~]# visudo 这个命令实际是打开了/etc/sudoers文件

Sudoers allows particular users to run various commands as

the root user, without needing the root password.

Examples are provided at the bottom of the file for collections

of related commands, which can then be delegated out to particular

users or groups.

… …

在文件98行有个例子

格式解释: 用户名(给哪个用户赋予权限,这里是root) 被管理的主机地址(第一个ALL)= (可使用身份(第二个ALL),这个可以省略直接跟授权的命令) 授权的命令(要写绝对路径,命令写的越简单权限就越大,越详细普通用户获得权限就越小)
使用 man 5 sudoers 命令查看配置文件详细解释

普通用户没有关闭系统的权限,如下提示。

[song@localhost ~]$ shutdown -r now
==== AUTHENTICATING FOR org.freedesktop.login1.reboot ===
Authentication is required for rebooting the system.
Authenticating as: root
Password: Failed to execute operation: 连接超时
Must be root.
polkit-agent-helper-1: pam_authenticate failed: Authentication failure

在配置文件中最后一行给song用户添加shutdown权限并保存

用song账号登录并用sudo -l 命令显示出自己(执行 sudo 的使用者)的权限。

[song@localhost ~]$ sudo -l
[sudo] password for song:
匹配此主机上 song 的默认条目:
requiretty, !visiblepw, always_set_home, env_reset, env_keep=“COLORS
DISPLAY HOSTNAME HISTSIZE INPUTRC 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

用户 song 可以在该主机上运行以下命令:
(ALL) /sbin/shutdown -r now 这里song身份就被切换成ALL

这里用sudo命令后面加配置文件赋予的命令去执行,不能写错,不然会执行不了,如下。

[song@localhost ~]$ sudo /sbin/shutdown -h now
对不起,用户 song 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/shutdown -h now。

所以写成配置文件里一模一样的就可以执行

[song@localhost ~]$ sudo /sbin/shutdown -r now

如果写多个可以用逗号分开

再看下

[song@localhost ~]$ sudo -l
匹配此主机上 song 的默认条目:
requiretty, !visiblepw, always_set_home, env_reset, env_keep=“COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC 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

用户 song 可以在该主机上运行以下命令:
(ALL) /sbin/shutdown -r now, (ALL) /sbin/ls

上面的例子是给某个用户赋予权限,当然我们也可以给一组用户赋予权限。也是在配置文件中

Same thing without a password

%wheel ALL=(ALL) NOPASSWD: ALL

上面wheel是组名,前面要加上%号,其它设置和用户一样。

sudo命令主要参数说明:

1.5、文件的特殊权限SetUid & SetGid & Sticky BIT

linux系统文件中除了读(r),写(w),执行(x)权限外,还有s和t这两个特殊的权限。当s这个标志出现在文件所有者的x权限上时,此时就被称为SetUid(简称SUID),当s出现在用户组(g)上就是SetGid,当s出现在其他用户(o)上就是Sticky Bit(简称SBIT)。

SetUid的功能:

只有可执行的二进制程序才能设定SUID权限,就是这个文件可以执行才可以设定,否则不起作用。
命令执行者要对该程序拥有x(执行)权限。
命令执行者在执行该程序是获得该程序文件属主身份,打个比方,user1用户没有passwd文件的读取权限,那么user1用户希望能看见passwd文件内容,只能将自己的身份添加到passwd文件所属的用户组,或 者是用root用户登录,或者就是修改passwd的文件权限,也就是setuid这个特殊的文件权限。
SetUid权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。

赋SUID权限方式:

数字赋予法:chmod 4755 文件名。

字母赋予法: chmod u+s 文件名 这里s就是SUID的意思,取消可以用chmod u-s 文件名。

普通用户不能设置SUID权限。要用root用户执行。

[song@localhost ~]$ chmod 4755 /bin/vi
chmod: 更改"/bin/vi" 的权限: 不允许的操作

下面有个文件aaa,并且用户对该文件拥有执行权限,我们去给该文件添加SUID权限。

红色箭头那里之前x变成了s,表示aaa文件拥有了s权限,同时aaa文件也变成了红色,表示不安全。

如果要是用户对aaa没有执行权限呢。我们创建一个新文件bbb,并修改其权限不包含执行权限。然后在赋予SUID。

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值