Linux权限详解 命令之 chmod:修改权限

权限简介

  • Linux系统上对文件的权限有着严格的控制,用于若是相对某个文件执行某种操做,必须具备对应的权限方可执行成功。
  • Linux下文件的权限类型通常包括读,写,执行。对应字母为 r、w、x。
  • Linux下权限的粒度有 拥有者 、群组 、其它组 三种。每一个文件均可以针对三个粒度,设置不一样的rwx(读写执行)权限。一般状况下,一个文件只能归属于一个用户和组, 若是其它的用户想有这个文件的权限,则能够将该用户加入具有权限的群组,一个用户能够同时归属于多个组。
  • Linux上一般使用chmod命令对文件的权限进行设置和更改。

1、快速入门

更改文件权限 (chmod命令)

通常使用格式

chmod [可选项] <mode> <file...>html

可选项: -c, --changes like verbose but report only when a change is made (若该档案权限确实已经更改,才显示其更改动做)  -f, --silent, --quiet suppress most error messages (若该档案权限没法被更改也不要显示错误讯息)  -v, --verbose output a diagnostic for every file processed(显示权限变动的详细资料)  --no-preserve-root do not treat '/' specially (the default)  --preserve-root fail to operate recursively on '/'  --reference=RFILE use RFILE's mode instead of MODE values  -R, --recursive change files and directories recursively (以递归的方式对目前目录下的全部档案与子目录进行相同的权限变动)  --help 显示此帮助信息  --version 显示版本信息 mode 权限设定字串,详细格式以下 [ugoa...][[+-=][rwxX]...][,...]其中 [ugoa...] u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其余之外的人,a 表示全部(包含上面三者)。 [+-=] + 表示增长权限,- 表示取消权限,= 表示惟一设定权限。 [rwxX] r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。 file... 文件列表(单个或者多个文件、文件夹)

范例:linux

  • 设置全部用户可读取文件 a.conf
chmod ugo+r a.sh 
 
chmod a+r  a.conf
  • 设置 c.sh 只有 拥有者能够读写及执行
chmod u+rwx c.sh
  • 设置文件 a.conf 与 b.xml 权限为拥有者与其所属同一个群组 可读写,其它组可读不可写
chmod a+r,ug+w,o-w a.conf b.xml
  • 设置当前目录下的全部档案与子目录皆设为任何人可读写
chmod -R a+rw *

数字权限使用格式

在这种使用方式中,首先咱们须要了解数字如何表示权限。 首先,咱们规定 数字 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 = 5ruby

上面咱们提到,每一个文件均可以针对三个粒度,设置不一样的rwx(读写执行)权限。即咱们能够用用三个8进制数字分别表示 拥有者 、群组 、其它组( u、 g 、o)的权限详情,并用chmod直接加三个8进制数字的方式直接改变文件权限。语法格式为 :markdown

chmod <abc> file...app

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

范例:socket

  • 设置全部人能够读写及执行
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 )

更改文件拥有者(chown命令)

linux/Unix 是多人多工做业系统,每一个的文件都有拥有者(全部者),若是咱们想变动文件的拥有者(利用 chown 将文件拥有者加以改变),通常只有系统管理员(root)拥有此操做权限,而普通用户则没有权限将本身或者别人的文件的拥有者设置为别人。post

语法格式:ui

chown [可选项] user[:group] file...spa

使用权限:root

说明:
[可选项] : 同上文chmod user : 新的文件拥有者的使用者  group : 新的文件拥有者的使用者群体(group)

范例:

  • 设置文件 d.key、e.scrt的拥有者设为 users 群体的 tom
chown tom:users file d.key e.scrt
  • 设置当前目录下与子目录下的全部文件的拥有者为 users 群体的 James
chown -R James:users  *

2、Linux权限详解

Linux系统上对文件的权限有着严格的控制,用于若是相对某个文件执行某种操做,必须具备对应的权限方可执行成功。这也是Linux有别于Windows的机制,也是基于这个权限机智,Linux能够有效防止病毒自我运行,由于运行的条件是必需要有运行的权限,而这个权限在Linux是用户所赋予的。

Linux的文件权限有如下设定:

  • Linux下文件的权限类型通常包括读,写,执行。对应字母为 r、w、x。
  • Linux下权限的属组有 拥有者 、群组 、其它组 三种。每一个文件均可以针对这三个属组(粒度),设置不一样的rwx(读写执行)权限。
  • 一般状况下,一个文件只能归属于一个用户和组, 若是其它的用户想有这个文件的权限,则能够将该用户加入具有权限的群组,一个用户能够同时归属于多个组。

若是咱们要表示一个文件的全部权限详情,有两种方式:

  • 第一种是十位二进制表示法,(三个属组每一个使用二进制位,再加一个最高位共十位),可简化为三位八进制形式
  • 另一种十二位二进制表示法(十二个二进制位),可简化为四位八进制形式

十位权限表示

常见的权限表示形式有:

-rw------- (600) 只有拥有者有读写权限。 -rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其余用户只有读权限。 -rwx------ (700) 只有拥有者有读、写、执行权限。 -rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其余用户只有读、执行权限。 -rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其余用户只有执行权限。 -rw-rw-rw- (666) 全部用户都有文件读、写权限。 -rwxrwxrwx (777) 全部用户都有读、写、执行权限。 

后九位解析: 咱们知道Linux权限总共有三个属组,这里咱们给每一个属组使用三个位置来定义三种操做(读、写、执行)权限,合起来则是权限的后九位。 上面咱们用字符表示权限,其中 -表明无权限,r表明读权限,w表明写权限,x表明执行权限。

实际上,后九位每一个位置的意义(表明某个属组的某个权限)都是固定的,若是咱们将各个位置权限的有无用二进制数 1和 0来代替,则只读、只写、只执行权限,能够用三位二进制数表示为

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

转换成八进制数,则为 r=4, w=2, x=1, -=0(这也就是用数字设置权限时为什么是4表明读,2表明写,1表明执行)

实际上,咱们能够将全部的权限用二进制形式表现出来,并进一步转变成八进制数字:

rwx = 111 = 7
rw- = 110 = 6
r-x = 101 = 5
r-- = 100 = 4
-wx = 011 = 3
-w- = 010 = 2
--x = 001 = 1
--- = 000 = 0

由上能够得出,每一个属组的全部的权限均可以用一位八进制数表示,每一个数字都表明了不一样的权限(权值)。如 最高的权限为是7,表明可读,可写,可执行。

故 若是咱们将每一个属组的权限都用八进制数表示,则文件的权限能够表示为三位八进制数

-rw------- = 600 -rw-rw-rw- = 666 -rwxrwxrwx = 777 

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

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

十二位权限(Linux附加权限)

附加权限相关概念

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

SET位权限:

suid/sgid是为了使“没有取得特权用户要完成一项必需要有特权才能够执行的任务”而产生的。 通常用于给可执行的程序或脚本文件进行设置,其中SUID表示对属主用户增长SET位权限,SGID表示对属组内用户增长SET位权限。执行文件被设置了SUID、SGID权限后,任何用户执行该文件时,将得到该文件属主、属组帐号对应的身份。在许多环境中,suid 和 sgid 很管用,可是不恰当地使用这些位可能使系统的安全遭到破坏。因此应该尽可能避免使用SET位权限程序。(passwd 命令是为数很少的必须使用“suid”的命令之一)。

  • suid(set User ID,set UID)的意思是进程执行一个文件时一般保持进程拥有者的UID。然而,若是设置了可执行文件的suid位,进程就得到了该文件拥有者的UID。
  • sgid(set Group ID,set GID)意思也是同样,只是把上面的进程拥有者改为进程组就行了。

SET位权限表示形式(10位权限):

若是一个文件被设置了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命令设置,给文件加suid和sgid的命令以下(相似于上面chmod赋予通常权限的命令):

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

粘滞位权限:

粘滞位权限即sticky。通常用于为目录设置特殊的附加权限,当目录被设置了粘滞位权限后,即使用户对该目录有写的权限,也不能删除该目录中其余用户的文件数据。设置了粘滞位权限的目录,是用ls查看其属性时,其余用户权限处的x将变为t。 使用chmod命令设置目录权限时,+t、-t权限模式可分别用于添加、移除粘滞位权限。

粘滞位权限表示形式(10位权限):

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

1-rwsr-xr-t 表示设置了粘滞位且其余用户组有可执行权限
2-rwSr--r-T 表示设置了粘滞位但其余用户组没有可执行权限

设置方式:

sticky权限一样能够经过chmod命令设置:

chmod +t <文件列表..>

十二位的权限表示方法 

附加权限除了用十位权限形式表示外,还能够用用十二位字符表示。

11 10 9 8 7 6 5 4 3 2 1 0
S  G  T r w x r w x r w x

SGT分别表示SUID权限、SGID权限、和 粘滞位权限,这十二位分别对应关系以下:

第11位为SUID位,第10位为SGID位,第9位为sticky位,第8-0位对应于上面的三组rwx位(后九位)。

在这十二位的每一位上都置值。若是有相应的权限则为1, 没有此权限则为0。

-rw-r-sr-- 的值为: 0 1 0  1 1 0  1 0 0  1 0 0
-rwsr-xr-x 的值为: 1 0 0  1 1 1  1 0 1  1 0 1
-rwsr-sr-x 的值为: 1 1 0  1 1 1  1 0 1  1 0 1 
-rwsr-sr-t 的值为: 1 1 1  1 1 1  1 0 1  1 0 1

若是将则前三位SGT也转换成一个二进制数,则

  • suid 的八进制数字是4
  • sgid 的表明数字是 2
  • sticky 位表明数字是1

这样咱们就能够将十二位权限三位三位的转化为4个八进制数。其中

  • 最高的一位八进制数就是suid,sgdi,sticky的权值。
  • 第二位为 拥有者的权值
  • 第三位为 所属组的权值
  • 最后一位为 其余组的权值

附加权限的八进制形式

经过上面,咱们知道,正常权限和附加权限能够用4位八进制数表示。相似于正常权限的数字权限赋值模式(使用三位八进制数字赋值)

chmod <abc> file...

咱们能够进一步使用4位八进制数字同时赋值正常权限和附加权限。

chmod <sabc> file...

其中s是表示附加权限的把八进制数字,abc与以前一致,分别是对应User、Group、及Other(拥有者、群组、其余组)的权限。由于SUID对应八进制数字是4,SGID对于八进制数字是2,则“4755”表示设置SUID权限,“6755”表示同时设置SUID、SGID权限。

咱们进一步将上小节的例子中的二进制数转变为八进制表示形式,则

-rw-r-sr-- = 0 1 0 1 1 0 1 0 0 1 0 0 = 2644 
-rwsr-xr-x = 1 0 0 1 1 1 1 0 1 1 0 1 = 4755
-rwsr-sr-x = 1 1 0 1 1 1 1 0 1 1 0 1 = 6755
-rwsr-sr-t = 1 1 1 1 1 1 1 0 1 1 0 1 = 7755

对比范例:

  • 设置 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用户的权限,从而顺利上网。

 
 

 

 

在 Linux 命令中,chmod用于修改文件或者目录的权限。对于文件或者目录的普通权限,共有 3 种,分别为:

  • r:读取;
  • w:写入;
  • x:执行。

此外,还有 3 种特殊权限,分别为:

  • suid:Set User ID;
  • sgid:Set Group ID;
  • sticky:粘滞位。

在此,咱们仅介绍如何利用chmod修改文件及目录的普通权限。

权限范围及代号

文件及目录的权限范围,包括:

  • u:User,即文件或目录的拥有者;
  • g:Group,即文件或目录的所属群组;
  • o:Other,除了文件或目录拥有者或所属群组以外,其余用户皆属于这个范围;
  • a:All,即所有的用户,包含拥有者、所属群组以及其余用户。

权限的代号包括:

  • r:读取权限,数字代号为4
  • w:写入权限,数字代号为2
  • x:执行或切换权限,数字代号为1
  • -:不具任何权限,数字代号为0
  • s:当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限。

语法及选项说明

  • chmod语法:

    • chmod [-cfRv][--help][--version][<权限范围>+/-/=<权限设置...>][文件或目录...]
    • chmod [-cfRv][--help][--version][数字代号][文件或目录...]
    • chmod [-cfRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]
  • 选项说明:

    • -c--changes:效果相似-v参数,但仅返回更改的部分;
    • -f--quiet--silent:不显示错误信息;
    • -R--recursive:递归处理,将指定目录下的全部文件及子目录一并处理;
    • -v--verbose:显示指令执行过程;
    • --help:显示在线帮助信息;
    • --reference=<参考文件或目录>:把指定文件或目录的权限所有设成和参考文件或目录的权限相同;
    • --version:显示版本信息;
    • <权限范围>+<权限设置>:开启权限范围的文件或目录的该项权限设置;
    • <权限范围>-<权限设置>:关闭权限范围的文件或目录的该项权限设置;
    • <权限范围>=<权限设置>:指定权限范围的文件或目录的该项权限设置。

示例

首先,咱们经过ls -l命令来看看文件及目录的相关信息:

lsl

如上图所示,以其为例,咱们依次来分析各内容表明的含义,

  • 第 1 行:total 16,表示所列出内容的磁盘占用空间总和值,单位为KB
  • 第 1 列:dr-xr-x-r-x,表示文件或目录的类型及权限;
  • 第 2 列: 4,表示文件或目录的连接个数;
  • 第 3 列:bin.guo,表示文件或目录的全部者;
  • 第 4 列:staff,表示文件或目录的所在群组;
  • 第 5 列:136,表示文件或目录自己的大小;
  • 第 6 列:Nov 24 11:26,表示文件或目录的最后更新时间;
  • 第 7 列:a,表示文件或目录的名称。

其中 第 1 列 的内容(除total外)特别丰富,以dr-xr-x-r-x为例(共 10 个字符),咱们对其进一步分析:

  • 第 1 个字符d,表示文件或目录的类型,其类型包括
    • p,表示命名管道文件;
    • d,表示目录文件;
    • l,表示符号链接文件;
    • -,表示普通文件;
    • s,表示 Socket 文件;
    • c,表示字符设备文件;
    • b,表示块设备文件。
  • 第 2 ~ 4 个字符r-x,表示文件或目录的全部者权限;
  • 第 5 ~ 7 个字符r-x,表示文件或目录的全部者同组用户权限;
  • 第 8 ~ 10 个字符r-x,表示文件或目录的其余用户权限。

此外,你们可能还注意到有些文件或目录在其显示的权限后面还跟着一个字符,或者为.或者为@,具体:

  • 在 Mac 终端中显示为@
  • 在 Linux 系统中显示为.

这表示其所属的文件或目录开启了SELinux安全上下文标签,若是没有,则表示未开启。

接下来,演示一些具体的操做示例:

  • 示例 1:添加全部用户对test-one的执行权限

xxxx

  • 示例 2:取消test-one全部者群组用户的执行权限及其余用户的写入权限

gxow

  • 示例 3:递归取消文件夹a的全部用户的执行权限

ccccc

  • 示例 4:添加全部用户对test-one的全部权限

777

  • 示例 5:取消test-one全部者的执行权限及其余用户的全部权限

670

在 Linux 的众多命令中,chmod命令算是比较简单的一个了。以此为始,让咱们一块儿感觉 Linux 的魅力吧!

转自:

 https://blog.csdn.net/u013197629/article/details/73608613

https://blog.csdn.net/qq_35246620/article/details/78624256

相关文章
相关标签/搜索