linux中的权限

前言

最近使用ansible搭建了mongo的replica set。发现很多次的失败都是文件权限不对造成的。那么就总结下吧。

数字权限

数字权限,我们常见的是三位的数字表示的权限,当然四位的我们也难免会遇到,接下我们看下他们直接的区别。

三位数字权限

linux中的文件权限分为读、写、执行.对应的字母就是r、w、x.

读(r)

Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。

写(w)

Write对文件而言,具有修改文件内容的权限;对于目录来说,具有删除移动目录内文件的权限。

执行(x)

Execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。

无权限(-)

-表示不具有该项选项

linux下的权限粒度有 拥有者群组其他组三种。每个文件都可以针对这三个粒度,设置不同的(r,w,x)读写执行权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。

Linux上通常使用chmod命令对文件的权限进行设置和更改。

我们规定数字4、2、1表示读、写、执行的权限。即r=4,w=2,x=1。

栗如:

rwx = 4 + 2 + 1 = 7
rw = 4 + 2 = 6
rx = 4 +1 = 5

若要同时设置 rwx (可读写运行) 权限则将该权限位 设置 为 4 + 2 + 1 = 7

若要同时设置 rw- (可读写不可运行)权限则将该权限位 设置 为 4 + 2 = 6

若要同时设置 r-x (可读可运行不可写)权限则将该权限位 设置 为 4 +1 = 5

三位数字权限的转换

读,写,执行对应的权限二进制表示为

r-- = 100
-w- = 010
--x = 001
--- = 000

将二进制转换成十进制就是

r-- = 100 4
-w- = 010 2
--x = 001 1
--- = 000 0

rwx 权限就是 4 + 2 + 1 = 7
rw- 权限就是 4 + 2 = 6
...
如何设置权限

每个文件都有拥有者群组其他组三种权限的粒度。我们在设置权限的时候也是针对这几个粒度进行配置的。即我们可以使用三个数字来配置这三个权限粒度的权限。

chmod file...

其中
a,b,c各为一个数字,分别代表User、Group、及Other的权限。
相当于简化版的
chmod u=权限,g=权限,o=权限 file...
而此处的权限将用8进制的数字来表示User、Group、及Other的读、写、执行权限

栗子:

设置所有人可以读写及执行

chmod 777 file  (等价于  chmod u=rwx,g=rwx,o=rwx file 或  chmod a=rwx file)

设置拥有者可读写,其他人不可读写执行

chmod 600 file (等价于  chmod u=rw,g=---,o=--- file 或 chmod u=rw,go-rwx file )

一些常见的权限

-rw------- (600)      只有拥有者有读写权限。
-rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) 只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限
最高位的含义

关于第一位最高位的解释: 上面我们说到了权限表示中后九位的含义,剩下的第一位代表的是文件的类型,类型可以是下面几个中的一个:

d代表的是目录(directroy)
-代表的是文件(regular file)
s代表的是套字文件(socket)
p代表的管道文件(pipe)或命名管道文件(named pipe)
l代表的是符号链接文件(symbolic link)
b代表的是该文件是面向块的设备文件(block-oriented device file)

四位数字权限

linux除了设置正常的读写操作权限外,还有关于一类设置也是涉及到权限,叫做Linxu附加权限。包括 SET位权限(suid,sgid)和粘滞位权限(sticky)。

SUID

让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。

1、SUID权限仅对二进制程序有效。
2、执行者对于该程序需要具有x的可执行权限。
3、本权限仅在执行该程序的过程中有效。
4、执行者将具有该程序拥有者的权限。

栗子:

$ ls -la /bin/su
-rwsr-xr-x 1 root root 63568 7月 16 06:52 /bin/su

对于su这个命令,拥有者是root,但是实际上是无论任何人,都可以执行,并且拥有的执行权限和root一样。因为这个设置了SUID,并且设置了拥有者有可执行权限。从上面可以看到,不管是文件拥有者,文件拥有者所属组,还是其他人,都是具有x权限的,所以都可以执行该程序,执行之后就将具有该程序拥有者的权限,即root的权限,这也就是su命令能够切换用户权限的实现原理。

SGID

和SUID类似,不过SGID是针对所属用户组权限的。

1、SGID对二进制程序有用;
2、程序执行者对于该程序来说需具备x的权限;
3、SGID主要用在目录上;

SET位权限表示形式:

如果一个文件被设置了suid或sgid位,会分别表现在所有者或同组用户的权限的可执行位上;如果文件设置了suid还设置了x(执行)位,则相应的执行位表示为s(小写)。但是,如果没有设置x位,它将表示为S(大写)。如:

1、-rwsr-xr-x 表示设置了suid,且拥有者有可执行权限
2、-rwSr--r-- 表示suid被设置,但拥有者没有可执行权限
3、-rwxr-sr-x 表示sgid被设置,且群组用户有可执行权限
4、-rw-r-Sr-- 表示sgid被设置,但群组用户没有可执行权限

设置方式:

SET位权限可以可以使用chmod命令设置,栗子:

chmod u+s filename 	设置suid位
chmod u-s filename 去掉suid设置
chmod g+s filename 设置sgid位
chmod g-s filename 去掉sgid设置
SBIT

目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。

栗子:

最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件

注:SBIT对文件不起作用。

粘滞位权限表示形式:

一个文件或目录被设置了粘滞位权限,会表现在其他组用户的权限的可执行位上。如果文件设置了sticky还设置了x(执行)位,其他组用户的权限的可执行位为t(小写)。但是,如果没有设置x位,它将表示为T(大写)。如:

1、-rwsr-xr-t 表示设置了粘滞位且其他用户组有可执行权限
2、-rwSr--r-T 表示设置了粘滞位但其他用户组没有可执行权限
四位数字权限的转换

同样使用二进制表示下:

SGT分别表示SUID权限、SGID权限、和 粘滞位权限

S-- = 100
-G- = 010
--T = 001
--- = 000

和前面的rwx的转换一样,转换成是十进制就是

S-- = 100 4
-G- = 010 2
--T = 001 1
--- = 000 0
  • suid 位代表数字是 4
  • sgid 位代表数字是 2
  • sticky 位代表数字是 1
如何设置权限

使用chmod进行权限的设置

chmod <abcd> file

栗子:

使用一个栗子对比下吧

设置 netlogin 的权限为拥有者可读写执行,群组和其他权限为可读可执行

chmod 755 netlogin

设置 netlogin 的权限为拥有者可读写执行,群组和其他权限为可读可执行,并且设置SUID

chmod 4755 netlogin

chmod 4755与chmod 755对比多了附加权限值4,这个4表示其他用户执行文件时,具有与所有者同样的权限(设置了SUID)。

为什么要设置4755 而不是 755?

假设netlogin是root用户创建的一个上网认证程序,如果其他用户要上网也要用到这个程序,那就需要root用户运行chmod 755 netlogin命令使其他用户也能运行netlogin。但假如netlogin执行时需要访问一些只有root用户才有权访问的文件,那么其他用户执行netlogin时可能因为权限不够还是不能上网。这种情况下,就可以用 chmod 4755 netlogin 设置其他用户在执行netlogin也有root用户的权限,从而顺利上网。

如何改变文件属性

我们先介绍几个常用于群组、拥有者、各种身份的权限之修改的指令,如下所示:

chgrp :改变文件所属群组

chown :改变文件拥有者

chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

改变所属群组, chgrp

改变一个文件的群组真是很简单的,直接以chgrp来改变即可。chgrp的拼写也是有点意思的,这个指令就是change group的缩写。

不过需要注意的是,我们要改变的用户组,必须在在/etc/group文件内存在才行。

假设你是以root的身份登入Linux系统的,那么在你的家目录内有一个install.log的文件, 如何将该文件的群组改变一下呢?假设你已经知道在/etc/group里面已经存在一个名为users的群组, 但是testing这个群组名字就不存在/etc/group当中了,此时改变群组成为users与testing分别会有什么现象发生呢?

发现了吗?文件的群组被改成users了,但是要改成testing的时候, 就会发生错误

改变文件拥有者, chown

chown的拼写也是change owner的拼写。同样用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有纪录的用户名称才能改变。

chown同时也可以修改所属群组

同时chown也可以简单的修改用户的组

chown .sshd install.log

其中的sshd代表的就是用户的群组

改变权限, chmod

文章开头已经描述的很清楚了

参考

【第六章、Linux 的文件权限与目录配置】http://cn.linux.vbird.org/linux_basic/0210filepermission.php

【Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)】https://blog.csdn.net/u013197629/article/details/73608613

【深入Linux文件权限 SUID/SGID/SBIT】https://blog.csdn.net/imkelt/article/details/53054309?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

【第六章、Linux 的文件权限与目录配置】http://cn.linux.vbird.org/linux_basic/0210filepermission.php#filepermission_ch

linux下面权限的含义以及修改的更多相关文章

  1. 【记录】linux 文件权限的查看和修改

    从上图可以看出每个文件权限与类型都是不一样的,如果对各个字母表达的含义不了解,那么看的真是一脸懵逼. 别急,具体解释如下: d rwx  rwx  rwx -  rwx  r--  rw- 第一列含义 ...

  2. linux文件权限的查看和修改(转)

    原文链接:https://www.cnblogs.com/sxdcgaq8080/p/7498906.html 命令: chmod 777 scan_record.js 格式: chmod 权限数字 ...

  3. linux 系统权限 数字含义

    摘抄: sudo chmod XXX dir_name XXX是你要设置的权限代号,第一位代表Owner,第二位代表Group,第三位代表Others XXX中0代表什么都不可以,1代表可执行,2代表 ...

  4. 修改linux文件权限

    Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁 ...

  5. 修改linux文件权限命令:chmod 【转载】

    Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. chmod  命令可以改变所有子目录的权限,下面有2种方法 改变一个文件的权限: chmod ...

  6. 修改linux文件权限命令

    修改linux文件权限命令:chmod Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文 ...

  7. linux中权限的修改

    修改访问权限的linux名是:Linux访问权限的问题是这样子的:比如 d rwx rwx rwx ,d是文件所在的文件,后面有9位,分别代表不同者的权限.第一个rwx代表这文件的所有者的权限,r是r ...

  8. linux 管理权限

    linux 管理权限 linux 文件 权限 1.使用 ls -l 命令 执行结果如下(/var/log) : drwxr-x--- 2 root adm 4096 2013-08-07 11:03 ...

  9. Linux之权限详解

    如何知道你有什么权限 我能干什么?这是我最关心的问题! 切换到普通用户 [root@luffy-01 ~]# su - pizza [pizza@luffy-01 ~]$ ls /root ls: c ...

  10. Linux ACL 权限之进阶篇

    笔者在<Linux ACL 权限>一文中介绍了 Linux ACL 权限的基本用法,本文笔者将尝试探究 ACL 中的基本概念和实现原理,希望能够通过进一步的加深对 Linux 权限系统的理 ...

随机推荐

  1. PPT 文字太多如何处理

    Piti 插件 http://www.piti.fun

  2. Pycharts在测试工作中的应用

    Pycharts在测试工作中的应用 pycharts是一个基于Python的数据可视化库,支持多种折线图.柱状图.饼图等.Pycharts底层依赖于Echarts pip install pyecha ...

  3. 视频云AI时代,穿越市场第一,想象更多

    国际权威数据公司IDC发布<中国视频云市场跟踪(2023 H1)>报告:自2018年至今,阿里云持续保持中国视频云整体市场第一,整体市场占比达24.4%. 01 第一之外,低谷之上 近期, ...

  4. Redis 内存优化在 vivo 的探索与实践

    作者:vivo 互联网服务器团队- Tang Wenjian 一. 背景 使用过 Redis 的同学应该都知道,它基于键值对(key-value)的内存数据库,所有数据存放在内存中,内存在 Redis ...

  5. 消息服务 + Serverless 函数计算如何助力企业降本提效?

    作者 | 柳下 背景介绍 消息队列服务(下文均以 Message Service 命名)作为云计算 PaaS 领域的基础设施之一,其高并发.削峰填谷的特性愈发受到开发者关注.Message Servi ...

  6. vue 状态管理 一、状态管理概念和基本结构

    系列导航 vue 状态管理 一.状态管理概念和基本结构 vue 状态管理 二.状态管理的基本使用 vue 状态管理 三.Mutations和Getters用法 vue 状态管理 四.Action用法 ...

  7. 每天学五分钟 Liunx 0110 | 服务篇:守护进程 systemd

    有些进程会在系统上运行较长时间,如前面的 Hello World 程序运行时产生的进程.有些进程运行瞬间就结束了,如执行 ps 命令产生的进程,也有的进程会常驻在内存中,提供相应的服务,这样的进程称为 ...

  8. 在Python中使用Process创建子进程遇到的问题

    假如使用Process创建子进程,那么在最后的函数调用时需要加上if __name__ == "__main__":语句,否则会报错. 未使用该语句 代码示例 from multi ...

  9. TLS1.3的简单学习

    TLS1.3的简单学习 TLS的历史 From GTP3.5 TLS(传输层安全)是一种加密协议,旨在确保 Internet 通信的安全性和隐私保护.下面是 TLS 的历史概述: SSL(安全套接层) ...

  10. [转帖]TLS 1.2 浏览器兼容性

    https://support-splashtopbusiness.splashtop.com/hc/zh-cn/articles/4414002633883-TLS-1-2-%E6%B5%8F%E8 ...