-
Linux权限
2018-03-31 17:37:29Linux权限 说明 权限符号 r: 读权限 w: 写权限 x: 执行权限 特殊权限:s 和 t s权限:强制位。 t权限:粘贴位。让普通用户可以cp,不可以mv、rm。t权限有效的前提是普通用户有x权限 用户符号...Linux权限
说明
权限符号
r: 读权限
w: 写权限
x: 执行权限特殊权限:s 和 t
s权限:强制位。
t权限:粘贴位。让普通用户可以cp,不可以mv、rm。t权限有效的前提是普通用户有x权限用户符号
u:拥有者
g:拥有者同组
o:其他用户
a: 所有用户权限说明
r、w、x 对应位为1,表示拥有该权限
同时,可以把rwx三位组成的二进制数写成10进制修改权限
chmod
chmod [参数] 权限 文件名
常用选项: R, 递归修改目录文件的权限chown 修改文件拥有者
chown [参数] 用户名 文件名
chgrp 修改文件或目录所属的组
chgrp [参数] 用户组名 文件名
常用选项: R, 递归修改目录文件的所属组umask 查看或修改文件掩码
查看掩码(查看默认权限)
umask
单独的一个umask就可以查看。
可以看到,当创建了文件try之后它的默认权限是-rw-r–r–,而掩码的值为0022。这其中有什么联系呢?
我们先来看一看掩码值的含义:
这是什么意思呢? 很简单——掩码,就是掩盖住权限的码。当掩码值对应的二进制位为1时,新建的文件无相应的权限。在上个例子中,我们创建了名为try的文件,掩码为0022,写成二进制就是000 000 010 010。我们将try的权限和二进制序列对比一下:- rw- r-- r-- 000 000 010 010
第一个:000对应的“-”,表示这是一个普通文件
第二个:000对应rw-,表示该文件的所有者对此文件有r和w权限
第三个:010对应r–,表示与该文件所有者同组的用户对此文件有r权限
第四个:010对应r–,表示其它用户对此文件有r权限
实际上没有的权限是被掩码对应为1的二进制屏蔽了,010屏蔽了w权限,所以同组用户和其它用户没有对该文件的w权限。
那么问题来了,明明x权限对应的位置是0,为什么所有用户都没有对文件的x权限呢?
原因在于:缺省创建的文件没有可执行权限。
我们可以用chmod命令设置,使文件有运行的权限。修改掩码
格式:
umask mode
例子:
umask 007
结果:运行umask命令只对当前shell环境起作用
-
linux 权限
2018-06-01 17:20:490 表示管理员(root),超级管理员,最大权限 1 - 500 表示系统用户,与一些系统服务有关 501 - 65535 表示普通用户,也就是自己创建的用户 不同的 Linux 发行版,这些数字可能不一样 #创建用户 useradd ...Linux 系统中,UID以如下的方式划分:
0 表示管理员(root),超级管理员,最大权限
1 - 500 表示系统用户,与一些系统服务有关
501 - 65535 表示普通用户,也就是自己创建的用户不同的 Linux 发行版,这些数字可能不一样
#创建用户 useradd zhangsan #删除用户 #仅删除用户 userdel zhangsan #删除家目录 userdel -r zhangsan #显示用户id id zhangsan #修改用户密码 echo "newpassword" | passwd --stdio zhangsan
文件权限
每一列分别为 权限,文件硬链接数 ,所属用户,所属组,大小,时间,名称其中权限里
第一个 为d代表是目录,为-代表用户可以查看的如文本文件,为c或者d代表块或者设备文件
r,w,x分别代表读,写,执行权限,没有该权限为-,不能省略
例如,只能读,则为 r–
然后r,w,x又分别对应4,2,1
那么 rwx=7, r-x=5, -wx=3#改变文件权限,a代表所有,u代表拥有者,g代表组,o代表其他 #把拥有者权限改成读写执行 chmod u=rwx test.txt #单独增加某项权限,给所有用户执行权限 chmod a+x test.txt #一起改变三类用户权限,权限分别为 rwx,r-x,-w- chmod 752 test.txt #更改文件所属用户 chown root test.txt
还有3个特殊权限
SUID,SGID和SBIT
分别出现在文件所属用户,所属组,和其他上的执行位
若当这些权限存在,执行位为-时,该位为s(t),执行位为x时,该位为S(T)SUID
1.SUID只对二进制文件有效
2.调用者对该文件有执行权
3.在执行过程中,调用者会暂时获得该文件的所有者权限
4.该权限只在程序执行的过程中有效SGID
它对普通二进制文件和目录都有效。当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。当SGID作用于目录时,意义就非常重大了。当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。SBIT
即Sticky Bit,它出现在其他用户权限的执行位上,它只能用来修饰一个目录。当某一个目录拥有SBIT权限时,则任何一个能够在这个目录下建立文件的用户,该用户在这个目录下所建立的文件,只有该用户自己和root可以删除,其他用户均不可以。4表示SUID 2表示SGID 1表示SBIT
写在前面的三种权限之前,若都有,则为7777chattr命令用来改变文件属性。又称隐藏权限,不会改变前面的几种权限
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:a:让文件或目录仅供附加用途;
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;
u:预防意外删除。#增加和删除a权限 chattr +a test.txt chattr -a test.txt #查看隐藏权限 lsattr
对单个用户设置权限
文件访问权限控制列表 facl#设置权限 setfacl -Rm u:zhangsan:rwx momo #查看权限 getfacl momo
-
Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)
2017-06-22 17:01:42Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。 Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。 Linux下权限的粒度有 拥有者 ...权限简介
- Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。
- Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。
- Linux下权限的粒度有 拥有者 、群组 、其它组 三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。
- Linux上通常使用chmod命令对文件的权限进行设置和更改。
一、快速入门
更改文件权限 (chmod命令)
一般使用格式
chmod [可选项] <mode> <file...>
参数说明: [可选项] -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...] 文件列表(单个或者多个文件、文件夹)
范例:
- 设置所有用户可读取文件 a.conf
chmod ugo+r a.conf 或 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 = 5
上面我们提到,每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。即我们可以用用三个8进制数字分别表示 拥有者 、群组 、其它组( u、 g 、o)的权限详情,并用chmod直接加三个8进制数字的方式直接改变文件权限。语法格式为 :
chmod <abc> 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 )
更改文件拥有者(chown命令)
linux/Unix 是多人多工作业系统,每个的文件都有拥有者(所有者),如果我们想变更文件的拥有者(利用 chown 将文件拥有者加以改变),一般只有系统管理员(root)拥有此操作权限,而普通用户则没有权限将自己或者别人的文件的拥有者设置为别人。
语法格式:
chown [可选项] user[:group] file...
使用权限: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 *
二、Linux权限详解
Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。这也是Linux有别于Windows的机制,也是基于这个权限机制,Linux可以有效防止病毒自我运行,因为运行的条件是必须要有运行的权限,而这个权限在Linux是用户所赋予的。
Linux的文件权限有以下设定:
- Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。
- Linux下权限的属组有 拥有者 、群组 、其它组 三种。每个文件都可以针对这三个属组(粒度),设置不同的rwx(读写执行)权限。
- 通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。
如果我们要表示一个文件的所有权限详情,有两种方式:
- 第一种是十位二进制表示法 ,(三个属组的每个权限使用一个二进制位,再加一个最高位共十位),可简化为三个八进制数字形式(如 755)
- 另外一种十二位二进制表示法(十二个二进制位),可简化为四个八进制数字形式(如4755)
十位权限表示
常见的权限表示形式有:
-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代表执行权限。(后九位的前3位对应拥有者权限、4-6位对应群组权限、7-9对应其他组权限)
实际上,后九位每个位置的意义(代表某个属组的某个权限)都是固定的,如果我们将各个位置权限的有无用二进制数 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 权限赋予
2018-06-05 19:02:53查看权限如下: 通过 ll 命令查看当前文件夹下所有文件和文件夹第一行显示的就是 权限 拥有人 分组权限说明:一个用户、一个组 我们来看一看 Linux 权限和所有权模型。我们已经看到每个文件属于一个用户和一个组。...查看权限如下: 通过 ll 命令查看当前文件夹下所有文件和文件夹第一行显示的就是 权限 拥有人 分组
权限说明:
一个用户、一个组
我们来看一看 Linux 权限和所有权模型。我们已经看到每个文件属于一个用户和一个组。这正是 Linux 中权限模型的核心。您可以在 ls -l 清单中查看用户和组:$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
在这个特殊的示例中,/bin/bash 可执行文件属于 root 用户,并且在 wheel 组中。Linux 权限模型通过允许给每个文件系统对象设置三种独立的权限级别来工作 — 它们为文件的所有者、文件的组以及所有其他用户。理解“ls -l”
我们来看一看我们的 ls -l 输出,检查一下这个清单的第一栏:
$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
第一个字段 -rwxr-xr-x 包含该特殊文件的权限的符号表示。该字段中的首字符(-)指定该文件的类型,本例中它是一个常规文件。其它可能的首字符还有:
“d”目录
“l”符号链接
“c”字符专门设备文件
“b”块专门设备文件
“p”先进先出
“s”套接字
三个三元组
$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
该字段的其余部分由三个三元组字符组成。第一个三元字符组代表文件所有者的权限,第二个代表文件的组的权限,第三个代表所有其他用户的权限:
"rwx"
"r-x"
"r-x"
上面,r 表示允许读(查看文件中的数据),w 表示允许写(修改文件以及删除),x 表示允许“执行”(运行程序)。将所有这些信息放在一起,我们可以发现每个人都能够读该文件的内容和执行该文件,但是只允许文件所有者(root 用户)可以以任何方式修改该文件。因此,虽然一般用户可以复制该文件,但是只允许 root 用户更新或删除它。
我是谁?
在我们看怎样改变文件的用户所有权和组所有权之前,我们首先来看一看怎样得知您当前的用户标识和组成员资格。除非最近您使用过 su 命令,否则您当前的用户标识是您用来登录系统的用户标识。但是,如果您经常使用 su,您可能不记得您当前有效的用户标识。要查看用户标识,输入 whoami:
# whoami
root
# su drobbins
$ whoami
drobbins
我在哪一组?
要看看您属于哪一组,使用 group 命令:
$ groups
drobbins wheel audio
在上面的示例中,我是 drobbins、wheel 和 audio 组的成员。如果您想看看其他用户在什么组,指定他们的用户名作为参数:
$ groups root daemon
root : root bin daemon sys adm disk wheel floppy dialout tape video
daemon : daemon bin adm
改变用户和组所有权
为了改变文件或其它文件系统对象的所有者或组,分别使用 chown 或 chgrp。这两个命令都要一个用户名或组名作参数,后面跟上一个或多个文件名。# chown root /etc/passwd
# chgrp wheel /etc/passwd
您还可以用 chown 命令的另一种形式同时设置所有者和组:
# chown root.wheel /etc/passwd
除非您是超级用户,否则您不可以使用 chown,然而任何人都可以使用 chgrp 来将文件的组所有权改为他们所属的组。
递归的所有权改变
chown 和 chgrp 都有一个 -R 选项,该选项可以用来告诉它们递归地将所属权和组改变应用到整个目录树中。例如:
# chown -R drobbins /home/drobbins
介绍 chmod
chown 和 chgrp 可以用来改变文件系统对象的所有者和组,而另一个程序 — 叫做 chmod — 用来改变我们可以在 ls -l 清单中看到的 rwx 权限。chmod 带有两个或多个参数:“mode”,描述怎样改变权限,后面跟将会受到影响的文件或文件列表:
$ chmod +x scriptfile.sh
在上面的示例中,我们的“mode”是 +x。您可能会猜到,+x 模式告诉 chmod,使该特殊文件对于用户、组以及其它任何人都是可执行的。如果我们想要除去一个文件的所有执行权限,我们应该这样做:
$ chmod -x scriptfile.sh
用户/组/其他粒度
到此,我们的 chmod 示例已经影响到了所有三个三元组 — 用户、组和所有其他用户。通常,一次只修改一个或两个三元组很方便。要这样做,只需要在 + 或 - 符号之前,给您想要修改的特定的三元组指定符号字符。对于“用户”三元组使用 u,对于“组”三元组使用 g,对于“其他/每个人”使用 o:
$ chmod go-w scriptfile.sh
我们刚除去了组和所有其他用户的写权限,而保留“所有者”权限不动。
重新设置权限
除了交替打开和关闭权限位以外,我们还可以一起重新设置它们。通过使用 = 操作符,我们可以告诉 chmod 我们要指定权限和取消别的权限:
$ chmod =rx scriptfile.sh
上面,我们只设置了所有的“read”和“execute”位,没有设置所有的“write”位。如果您仅仅想重新设置特定的三元组,您可以像下面这样,在 = 之前指定该三元组的符号名:
$ chmod u=rx scriptfile.sh
数字模式
直到现在为止,我们使用了叫做“符号”的模式来用 chmod 指定权限的改变。然而,指定权限还有
一种普遍使用的方法 — 使用 4 位八进制数。使用叫做数字权限语法的语法,每一位代表一个权限
三元组。例如,在 1777 中,777 设置本章我们所讨论的“owner”、“group”和“other”
标志。1 用来设置专门的权限位,我们将在本章的结束部分讲到。这个图表说明了怎样解释第二到
四位(777):
模式 数字
rwx 7
rw- 6
r-x 5
r-- 4
-wx 3
-w- 2
--x 1
--- 0
数字权限语法
当您需要给一个文件指定所有权限时,数字权限语法特别有用,比如在下面的示例中:
$ chmod 0755 scriptfile.sh
$ ls -l scriptfile.sh
-rwxr-xr-x 1 drobbins drobbins 0 Jan 9 17:44 scriptfile.sh
在该示例中,我们使用了 0755 模式,它展开为一个完整的权限设置“-rwxr-xr-x”。
Umask
当进程创建了新文件时,它指定新文件应该具有的权限。通常,所请求的模式是 0666(每个人可读和可写),它比我们希望的具有更多的权限。幸运的是,不管什么时候创建了新文件,Linux 将参考叫做“umask”的东西。系统用 umask 值来将初始指定的权限降低为更合理、更安全的权限。您可以通过在命令行中输入 umask 来查看您当前的 umask 设置:
$ umask
0022
Linux 系统上,umask 的缺省值一般为 0022,它允许其他人读您的新文件(如果他们可以得到它们),但是不能进行修改。为了在缺省的情况下使新文件更安全,您可以改变 umask 设置: $ umask 0077umask 将确保组和其他用户对于新创建的文件绝对没有任何权限。那么,umask 怎样工作呢?与文件的“常规”权限不同,umask 指定应该关闭哪一个权限。我们来参阅一下我们的“模式到数字”映射表,从而使我们可以理解 0077 的 umask 的意思是什么: 模式 数字 rwx 7 rw- 6 r-x 5 r-- 4 -wx 3 -w- 2 --x 1 --- 0 使用该表,0077 的最后三位扩展为 ---rwxrwx。现在,请记住 umask 告诉系统禁用哪个权限。根据推断,我们可以看到将关闭所有“组”和“其他”权限,而“用户”权限将保留不动。
介绍 suid 和 sgid
当您最初登录时,将启动一个新的 shell 进程。您已经知道,但是您可能还不知道这个新的 shell
进程(通常是 bash)使用您的用户标识运行。照这样,bash 程序可以访问所有属于您的文件和
目录。事实上,作为用户,我们完全依靠其它程序来代表我们执行操作。因为您启动的程序继承了
您的用户标识,因此它们不能访问任何不允许您访问的文件系统对象。
例如,一般用户不能直接修改 passwd 文件,因为“write”标志已经对除“root 用户”以外的每个用户关闭:
$ ls -l /etc/passwd
-rw-r--r-- 1 root wheel 1355 Nov 1 21:16 /etc/passwd
但是,一般用户确实需要在他们需要改变其密码的任何时候,能够修改 /etc/passwd(至少间接地)。但是,如果用户不能修改该文件,究竟怎样完成这个工作呢?
Suid
幸好,Linux 权限模型有两个专门的位,叫做“suid”和“sgid”。当设置了一个可执行程序的“suid”这一位时,它将代表可执行文件的所有者运行,而不是代表启动程序的人运行。现在,回到 /etc/passwd 问题。如果看一看 passwd 可执行文件,我们可以看到它属于 root 用户:
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root wheel 17588 Sep 24 00:53 /usr/bin/passwd
您还将注意到,这里有一个 s 取替了用户权限三元组中的一个 x。这表明,对于这个特殊程序,设置了 suid 和可执行位。由于这个原因,当 passwd 运行时,它将代表 root 用户执行(具有完全超级用户访问权),而不是代表运行它的用户运行。又因为 passwd 以 root 用户访问权运行,所以能够修改 /etc/passwd 文件,而没有什么问题。
suid/sgid 告诫说明
我们看到了 suid 怎样工作,sgid 以同样的方式工作。它允许程序继承程序的组所有权,而不是当前用户的程序所有权。这里有一些关于 suid 和 sgid 的其它的但是很重要的信息。首先,suid 和 sgid 占据与 ls -l 清单中 x 位相同的空间。如果还设置了 x 位,则相应的位表示为 s(小写)。但是,如果没有设置 x 位,它将表示为 S(大写)。另一个很重要的提示:在许多环境中,suid 和 suid 很管用,但是不恰当地使用这些位可能使系统的安全遭到破坏。最好尽可能地少用“suid”程序。passwd 命令是为数不多的必须使用“suid”的命令之一。
改变 suid 和 sgid
设置和除去 suid 与 sgid 位相当简单。这里,我们设置 suid 位:
# chmod u+s /usr/bin/myapp
此处,我们从一个目录除去 sgid 位。我们将看到 sgid 位怎样影响下面几屏中的目录:
# chmod g-s /home/drobbins
权限和目到此为止,我们从常规文件的角度来看权限。当从目录的角度看权限时,情况有一点不同。目录使用同样的权限标志,但是它们被解释为表示略微不同的含义。 对于一个目录,如果设置了“read”标志,您可以列出目录的内容;“write”表示您可以在目录中创建文件,“execute”表示您可以进入该目录并访问内部的任何子目录。没有“execute”标志,目录内的文件系统对象是不可访问的。没有“read”标志,目录内的文件系统对象是不可查看的,但是只要有人知道磁盘上对象的完整路径,就仍然可以访问目录内的对象。目录和 sgid如果启用了目录的“sgid”标志,在目录内创建的任何文件系统对象将继承目录的组。当您需要创建一个属于同一组的一组人使用的目录树时,这种特殊的功能很管用。只需要这样做:
# mkdir /home/groupspace
# chgrp mygroup /home/groupspace
# chmod g+s /home/groupspace
现在,mygroup 组中的所有用户都可以在 /home/groupspace 内创建文件或目录,同样,他
们也将自动地分配到 mygroup 的组所有权。根据用户的 umask 设置,新文件系统对象对于
mygroup 组的其他成员来说,可以或不可以是可读、可写或可执行的。
目录和删除
缺省情况下,Linux 目录以一种不是在所有情况下都很理想的方式表现。一般来说,只要对一个
目录有写访问权,任何人都可以重命名或删除该目录中的文件。对于个别用户使用的目录,这种行
为是很合理的。
但是,对于很多用户使用的目录来说,尤其是 /tmp 和 /var/tmp,这种行为可能会产生麻烦。
因为任何人都可以写这些目录,任何人都可以删除或重命名任何其他人的文件 — 即使是不属于
他们的!显然,当任何其他用户在任何时候都可以输入“rm -rf /tmp/*”并损坏每个人的文
件时,很难把 /tmp 用于任何有意义的文件。
所幸,Linux 有叫做“粘滞位”(sticky bit)的东西。当给 /tmp 设置了粘滞位(用
chmod +t),唯一能够删除或重命名 /tmp 中文件的是该目录的所有者(通常是 root 用户)
、文件的所有者或 root 用户。事实上,所有 Linux 分发包都缺省地启用了 /tmp 的粘滞位,
而您还可以发现粘滞位在其它情况下也很管用。
难以理解的第一位
总结本章,我们最后来看一看数字模式的难以理解的第一位数。您可以看到,这个第一位数
用来设置 sticky、suid 和 sgid 位:
suid sgid sticky 模式数字 on on on 7 on on off 6 on off on 5 on off off 4 off on on 3 off on off 2 off off on 1 off off off 0
这里有一个怎样用 4 位数字模式来设置一个目录的权限的示例,该目录将由一个工作组使用:
# chmod 1775 /home/groupfiles
请想一想 1755 数字模式权限设置的含义。 -
Linux权限管理
2018-06-30 17:40:461、ACL权限的简介与开启 Linux权限只有所属者,所属组和其他人,身份权限不够用,但是ACL权限可以解决这个问题,具体做法是找到这个人的id,赋予其权限即可。 查看分区的ACL权限是否开启: dumpe2fs -h /dev/sda3... -
linux=> Linux权限不够
2015-12-16 16:00:30Linux权限不够 sudo su输入密码就行了 -
Linux权限修改(详细)
2019-01-08 22:15:17Linux权限修改(详细) 前言:本人最近在学Linux相关操作,虽然之前也有部署过自己的网站以及个人博客,但是对于Linux系统的基本操作终究只是知其然并不知其所以然,故特地学习。 基本权限查看 首先,当我们连接上... -
Linux权限详解-chmod与chown
2019-01-14 16:43:09阅读目录(Content)权限简介一、快速入门更改文件权限 (chmod命令)一般使用格式数字权限使用格式更改文件拥有者(chown命令)二、Linux权限详解十位权限表示十二位权限(Linux附加权限)附加权限相关概念十二位的... -
linux权限说明
2018-06-04 01:16:37Linux系统中的每个文件和目录都有访问许可权限,用他来确定谁能通过何种方式对文件和目录进行访问和操作。 文件或目录的访问权限分为只读,只写和可执行三种。 我们可以通过设置用户权限、组权限、其他人权限、... -
关于linux权限s权限和t权限详解
2019-08-12 11:16:04linux系统内有档案有三种身份 u:拥有者 g:群组 o:其他人 这些身份对于文档常用的有下面权限: r:读权限,用户可以读取文档的内容,如用cat,more查看 w:写权限,用户可以编辑文档 x:该目录具有可以被系统执行... -
linux权限详解
2008-01-17 18:48:00一个用户、一个组 我们来看一看 Linux 权限和所有权模型。我们已经看到每个文件属于一个用户和一个组。这正是 Linux 中权限模型的核心。您可以在 ls -l 清单中查看用户和组: $ ls -l /bin/bash -rwxr-xr-x 1 root... -
linux权限和指令
2017-11-28 18:50:27linux的权限和指令相关问题 -
Linux权限管理(用户权限、用户组权限、文件权限、目录权限)
2020-04-15 17:46:48本篇内容主要包括以下几个方面:1、用户权限;2、用户组权限;3、文件权限;4、目录权限; 5、权限的概念;6、权限配置方法等 -
linux权限及ntfs文件系统权限的知识
2014-05-10 01:25:13linux权限及ntfs文件系统权限的知识 文件的权限: [-dcbps][u:rwx][g:rwx][a:rwx] 其中: r=4, w=2, x=1, u=owner, g=group, a=all user d=dir, -=file, l=symbolic link, p=pipe, c=character device -
Linux权限详解。
2018-06-09 14:21:11在理解权限之前我们要知道linux中的用户组:在Linux中每个用户都属于一个组,Linux中每个文件都都有所有者、所有组、其他组。这几个概念我们可以用现实中的例子来理解。比如说你有一本书,那么你就是这本书的所有者... -
Linux权限详解,多用户多组各种权限配置原理
2015-01-12 19:37:12网上有太多关于Linux权限详解,这里不啰嗦那些。主要解释下这些权限是杂用的,否则知道了什么用户、组之类的权限也配不好。 一、权限分类 r:读取权限,数字代号为"4"。 w:写入权限,数字代号为"2"。 x:执行或切换... -
linux权限详细介绍
2018-12-26 10:09:17这些信息中包含了这个文件的权限信息和所有者以及所在组,还有该文件的大小,该文件最后修改的日期时间,文件名称等信息. 从左往右看, 第一个代表文件的类型, 如果是一个普通文件为"-", 如果是一个目录... -
Linux权限管理(基本权限、默认权限)
2017-08-30 23:39:56一、文件基本权限 1-1.基本权限的修改 -rw-r--r-- - 第一个"-"表示文件类型(- 文件,d 目录,l 软链接文件) - rw- r-- r-- u所有者 g所属组 o其它人 其中r读,w写,x执行 (1).chmod [选项] ... -
linux权限不够
2016-02-24 16:52:06想操作某个目录,或者某个目录下的文件,提示权限不够; 最简单的方法:chmod 777 文件/文件夹名称 赋给所有用户这个文件/文件夹的读,写,看权限; 其他特别指定方法,请参照官方文档。 -
不小心把Linux权限 777 后的补救方案
2018-03-07 09:56:35不小心把Linux权限 777 后的补救方案 手贱把 /var 777 了,真是不小心,恢复搞了一天,估计还是有坑,就先这么用吧。 恢复权限脚本 #!/bin/sh foreachd(){ for file in $1/* do # 如果是目录就打印处理,然后... -
Linux权限管理及用户与用户组
2013-05-11 16:36:17第一部分:Linux权限管理 1.基本权限 2.高级权限 3.特殊权限 第二部分:用户与用户组 -
Linux -- Linux权限对应的数字
2018-02-06 08:28:14x=1 w=2 r=4 例: 在Linux中,对file.sh文件执行#chmod 645 file.sh中,该文件的权限是-rw-r--r-x 因为6是rw- 4是r-- 5是r-x -
linux权限之可操作性权限x
2017-07-15 17:18:02Linux系统中,对于文件目录和文件权限都有rwx即读、写、操作权限,其中r为read,读权限,w为write,写权限,好理解。那么x 的execute操作权限该如何理解呢? 这里需要区分文件、目录和可执行脚本三类来查看:文件... -
Linux权限设置方法
2018-09-21 21:54:42修改某个目录下的所有文件的权限,包括子目录中的文件,例子如下: chmod 777 /home/user 注:仅把/home/user目录的权限设置为rwxrwxrwx chmod -R 777 /home/user 注:表示将整个/home/user目录与其中的文件和子... -
关于LINUX权限-bash: ./startup.sh:
2017-01-09 18:14:45关于LINUX权限-bash: ./startup.sh: Permission denied 在执行./startup.sh,或者./shutdown.sh的时候,爆出了Permission denied, 其实很简单,就是今天在执行tomcat的时候,用户没有权限,而导致无法执行, 用... -
linux 权限掩码 umask
2016-03-13 17:32:54一 权限掩码umask umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读(4)+写(2)+执行(1),同组的和其它...