权限 Linux权限详解(chmod、600、644、700、711、755、777、
(如果觉得文章写得好,可以关注我的个人账号)
权限介绍
Linux 上通常使用 chmod 命令设置和更改文件权限。
一、快速启动更改文件权限(chmod 命令)通用格式
chmod [可选]
参数说明:
[可选项]
-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...]
文件列表(单个或者多个文件、文件夹)
p>
例子:
chmod ugo+r a.conf
或
chmod a+r a.conf
chmod u+rwx c.sh
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(读写执行)权限进行不同的设置。即我们可以用三个八进制数来表示 owner 、 group 和其他组( u 、 g 、 o )的权限详情,使用 chmod 直接加上三个八进制数可以直接改变文件权限。语法格式为:
chmod 文件…
其中
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是多人多任务系统,每个文件都有Owner(所有者),如果我们要更改文件的所有者(使用chown来更改文件的所有者),一般只有系统管理员(root)有此操作权限,而普通用户无权更改自己或他人的文件属主设置为其他人。
语法:
chown [可选] 用户[:group] 文件…
使用权限:root
说明:
[可选项] : 同上文chmod
user : 新的文件拥有者的使用者
group : 新的文件拥有者的使用者群体(group)
例子:
chown tom:users file d.key e.scrt
chown -R James:users *
二、Linux 权限详情
Linux系统文件的权限在上面有严格的控制,如果对一个文件进行某种操作,必须有相应的权限才能执行成功。这也是Linux区别于Windows的机制。基于这种权限机制,Linux可以有效防止病毒自行运行,因为运行的条件是有运行的权限,而这个权限是Linux中的用户给的。
Linux的文件权限有如下设置:
如果我们要表示一个文件的所有权限细节,有两种方式:
十个权限表示
权限的常见表示是:
-rw------- (600) 只有拥有者有读写权限。
-rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) 只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限。
最后九位解析:我们知道Linux权限一共有三组,这里我们用每组的三个位置来定义三种操作(读、写、执行)权限,它们加起来就是最后九位数的权限。上面我们用字符来表示权限,其中-代表无权限,r代表读权限权限 Linux权限详解(chmod、600、644、700、711、755、777、,w代表写权限,x代表执行权限。 (后9位前3位对应所有者权限,4-6位对应组权限,7-9对应其他组权限)
其实最后九位数字(代表某组的A权限)每个位置的含义是固定的。如果我们用二进制数 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
第一位和最高位的解释:上面我们讲了权限表示中最后九位的含义,剩下的第一位代表文件的类型,可以是以下之一:
p>
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表示给owner用户增加SET位权限,SGID表示给组内用户增加SET位权限。
执行文件设置SUID和SGID权限后,任何用户执行该文件时,都会获取该文件的所有者和组帐号对应的身份。
在许多情况下使用 suid 和 sgid 很有用,但不当使用这些权限可能会给系统带来安全风险。所以你应该尽量避免使用 SET 位权限程序。 (passwd 命令是少数必须使用“suid”的一) 命令之一。
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 bit权限时,即使用户对该目录有写权限,也无法删除该目录下其他用户的文件数据。对于设置了sticky bit权限的目录,用ls查看其属性时,其他用户权限下的x会变成t。使用chmod命令设置目录权限时,+ t和-t权限模式可分别用于添加和删除sticky bit权限。
sticky bit权限的表示(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权限、粘位权限,这12位分别对应如下:
第11位是SUID位,第10位是SGID位权限,第9位是粘性位,第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
p>
如果前三个SGT也转换成二进制数,那么
这样我们就可以将12位权限,3-3和3-3转换成4个八进制数。其中
附加权限的八进制形式
从上面我们知道,普通权限和附加权限可以用4位八进制数来表示。一种类似于普通权限的数字权限分配模式(使用三个八进制数字进行分配)
chmod 文件…
我们可以进一步使用 4 个八进制数字来分配普通权限和附加权限。
chmod 文件…
其中s是一个八进制数权限,表示附加权限,abc和之前一样,分别对应User、Group、Other(owner,group)、其他组)权限。因为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
比较示例:
chmod 755 netlogin
chmod 4755 netlogin
chmod 4755与chmod 755相比,多了一个权限值4。这个4表示其他用户执行文件时,拥有与所有者相同的权限(设置了SUID)。
为什么设置 4755 而不是 755?
假设 netlogin 是由 root 用户创建的在线认证程序。如果其他用户想使用该程序上网,root用户需要运行chmod 755 netlogin命令,使其他用户可以运行netlogin。但是如果netlogin需要访问一些只有root用户才能访问的文件权限 Linux权限详解(chmod、600、644、700、711、755、777、,其他用户在执行netlogin时可能会因为权限不足而无法上网。在这种情况下,您可以使用 chmod 4755 netlogin 设置其他用户在执行 netlogin 时具有 root 用户权限,以便顺利上网。
——-
评论前必须登录!
注册