权限简介 Linux系统上对
文件的
权限有着严格的控制,用于如果相对某个文件执行某种 *** 作,必须具有对应的权限方可执行成功。 Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。 Linux下权限的粒度有拥有者 、群组 、其它组 三种。每个文件都可以针对三个粒度,
设置不同的rwx(读写执行)权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。 Linux上通常使用chmod命令对文件的权限进行设置和更改。一、快速入门 更改文件权限 (chmod命令) 一般使用格式chmod [可选项] 可选项: -c, --changes like verbose but report onlywhena change is made (若该档案权限确实已经更改,才显示其更改动作) -f, --silent, --quiet suppress most error messages(若该档案权限无法被更改也不要显示错误讯息) -v, --verbose output a diagnosticforevery file processed(显示权限变更的详细资料) --no-preserve-rootdonottreat'/'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 设置 c.sh 只有 拥有者可以读写及执行 设置文件 a.conf 与 b.xml 权限为拥有者与其所属同一个群组 可读写,其它组可读不可写 设置当前目录下的所有档案与子目录皆设为任何人可读写数字权限使用格式在这种使用方式中,首先我们需要了解数字如何表示权限。首先,我们规定 数字 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 file... 其中a,b,c各为一个数字,分别代表User、Group、及Other的权限。相当于简化版的chmod u=权限,g=权限,o=权限file...而此处的权限将用8进制的数字来表示User、Group、及Other的读、写、执行权限 范例: 设置所有人可以读写及执行 设置拥有者可读写,其他人不可读写执行更改文件拥有者(chown命令)linux/Unix 是多人多工作业系统,每个的文件都有拥有者(所有者),如果我们想变更文件的拥有者(利用 chown 将文件拥有者加以改变),一般只有系统管理员(root)拥有此 *** 作权限,而普通用户则没有权限将自己或者别人的文件的拥有者设置为别人。 语法格式: chown [可选项] user[:group] file... 使用权限:root说明:[可选项] :同上文chmoduser :新的文件拥有者的使用者group :新的文件拥有者的使用者群体(group) 范例: 设置文件 d.key、e.scrt的拥有者设为 users 群体的 tom 设置当前目录下与子目录下的所有文件的拥有者为 users 群体的 James二、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=7rw-=110=6r-x=101=5r--=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赋予一般权限的命令): chmodu+sfilename设置suid位chmodu-sfilename去掉suid设置chmodg+sfilename设置sgid位chmodg-sfilename去掉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 <文件列表..> 十二位的权限表示方法附加权限除了用十位权限形式表示外,还可以用用十二位字符表示。 11109876543210S 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--的值为:010110100100-rwsr-xr-x的值为:100111101101-rwsr-sr-x的值为:110111101101-rwsr-sr-t的值为:111111101101 如果将则前三位SGT也转换成一个二进制数,则 suid 的八进制数字是4 sgid 的代表数字是 2 sticky 位代表数字是1 这样我们就可以将十二位权限三位三位的转化为4个八进制数。其中 最高的一位八进制数就是suid,sgdi,sticky的权值。 第二位为 拥有者的权值 第三位为 所属组的权值 最后一位为 其他组的权值附加权限的八进制形式通过上面,我们知道,正常权限和附加权限可以用4位八进制数表示。类似于正常权限的数字权限赋值模式(使用三位八进制数字赋值) chmod file... 我们可以进一步使用4位八进制数字同时赋值正常权限和附加权限。 chmod file... 其中s是表示附加权限的把八进制数字,abc与之前一致,分别是对应User、Group、及Other(拥有者、群组、其他组)的权限。因为SUID对应八进制数字是4,SGID对于八进制数字是2,则“4755”表示设置SUID权限,“6755”表示同时设置SUID、SGID权限。 我们进一步将上小节的例子中的二进制数转变为八进制表示形式,则 -rw-r-sr-- =010110100100=2644-rwsr-xr-x =100111101101=4755-rwsr-sr-x =110111101101=6755-rwsr-sr-t =111111101101=7755 对比范例: 设置 netlogin 的权限为拥有者可读写执行,群组和其他权限为可读可执行 设置 netlogin 的权限为拥有者可读写执行,群组和其他权限为可读可执行,并且设置suid 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系统上的文件目录权限,有时候你会发现为什么刚创建的文件是 -rw-r--r-- 这个权限,目录是 drwxr-xr-x 权限,有些是 -rwsr-xr-x ,又有些是 drwsrws--T ?这些则与umask、特殊权限有关。
什么是umask?umask一般是用在你初始创建一个目录或者文件的时候赋予他们的权限。它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、
或用户家目录下的.bash_profile或.profile中设置umask值。
默认的umask是0022,0022四个数字代表是赋值初始化准备丢弃的权限。(相对应文件来说,x权限就算没说明出来丢弃一样必须默认丢弃)
第一个0代表suid 丢弃的权限;
第二个0代表本文件/目录拥有者什么权限都没丢弃;
第三个2代表本文件/目录的用户组丢弃了w权限;
第四个2代表本文件/目录的文件/目录的用户组丢弃了w权限。
一般我们会这样表示:
umask +default permission(默认权限) =777(目录)/666(文件)
但存在特殊情况如果把umask设为135呢?
要了解特殊权限需对安全上下文有一个概念:
前提:进程有属主和属组;文件有属主和属组
(1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
(c) 应用文件“其它”权限
1.SUID 权限仅对二进制程序(binary program)有效;
2.执行者对于该程序需要具有x 的可执行权限;
3.本权限仅在执行该程序的过程中有效(run-time);
4.执行者将具有该程序拥有者(owner) 的权限。
5.SUID设置在目录上无意义
权限设定:
chmod u+s FILE...
chmod u-s FILE...
s 标志在文件拥有者的x 项目为SUID,那s 在群组的x 时则称为Set GID
[root@centos7 ~]# ls -l /usr/bin/locate
-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate
与SUID 不同的是,SGID 可以针对文件或目录来设定!如果是对文件来说, SGID 有如下的功能:
-1.SGID 对二进制程序有用;
-2.程序执行者对于该程序来说,需具备x 的权限;
-3.执行者在执行的过程中将会获得该程序群组的支持!
[root@centos7 ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate
-rw-r-----. 1 root slocate 2349055 Jun 15 03:44 /var/lib/mlocate/mlocate.db
与SUID 非常的类似,使用xiaoming 这个账号去执行locate 时,那xiaoming将会取得slocate 群组的支持, 因此就能够去读取 mlocate.db 。
SGID 也能够用在目录上,这也是非常常见的一种用途
目录设定了SGID 的权限后,他将具有如下的功能:
-1. 用户若对于此目录具有r 与x 的权限时,该用户能够进入此目录;
-2.用户在此目录下的有效群组(effective group)将会变成该目录的群组;
-3.用途:若用户在此目录下具有w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。
这个 Sticky Bit, SBIT 目前只针对目录有效,sticky 设置在文件上无意义。SBIT 对于目录的作用是:
-1.当用户对于此目录具有w, x 权限,亦即具有写入的权限时;
-2.当用户在该目录下建立文件或目录时,仅有自己与root 才有权力删除该文件
SUID/SGID/SBIT 权限设定
-rwSrwSrwT 1 root root 0 Jun 16 02:53 test
设定权限成为 -rws--x--x 的模样:
[root@centos7 tmp]# chmod u=rwxs,go=x testls -l test
-rws--x--x 1 root root 0 Jun 16 02:53 test
承上,加上 SGID 与 SBIT 在上述的文件权限中!
[root@centos7 tmp]# chmod g+s,o+t testls -l test
-rws--s--t 1 root root 0 Jun 16 02:53 test
1】ACL 是Access Control List 的缩写,主要的目的是在提供传统的owner,group,others 的read,write,execute 权限之外的细部权限设定。ACL 可以针对单一使用者,单一文件或目录来进行
ACL 主要可以针以下来控制权限呢:
1.使用者 (user):可以针对使用者来设定权限;
2.群组 (group):针对群组为对象来设定其权限;
3.默认属性(mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限;
及1.ACL:Access Control List,实现灵活的权限管理;2.CentOS7默认创建的xfs和ext4文件系统具有ACL功能;3.CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加tune2fs –o acl/dev/sdb1
mount –o acl/dev/sdb1 /mnt/test
4.ACL生效顺序:所有者,自定义用户,自定义组,其他人
为多用户或者组的文件和目录赋予访问权限rwx
2】ACL 的设定技巧: getfacl, setfacl
-x :删除后续的 acl 参数,不可与 -m 合用;
-b :移除『所有的』 ACL 设定参数;
-k :移除『预设的』 ACL 参数,
-R :递归设定 acl ,亦即包括次目录都会被设定起来;
-d :设定『预设 acl 参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值
例:[root@centos7 ~]# touch acl_test1
[root@centos7 ~]# ll acl_test1
-rw-r--r--. 1 root root 0 Jul 21 17:33 acl_test1
[root@centos7 ~]# setfacl -m u:xiaoming:rx acl_test1
[root@centos7 ~]# ll acl_test1
-rw-r-xr--+ 1 root root 0 Jul 21 17:33 acl_test1
[root@centos7 ~]# setfacl -m u::rwx acl_test1
[root@centos7 ~]# ll acl_test1
-rwxr-xr--+ 1 root root 0 Jul 21 17:33 acl_test1
设定值中的 u 后面无使用者列表,代表设定该文件拥有者
2.getfacl 指令用法余setfacl一样
例:[root@centos7 ~]# getfacl acl_test1
file: acl_test1 <==说明档名而已!
owner: root <==说明此文件的拥有者,亦即 ls -l 看到的第三使用者字段
group: root <==此文件的所属群组,亦即 ls -l 看到的第四群组字段
user::rwx <==使用者列表栏是空的,代表文件拥有者的权限
user:xiaoming:r-x <==针对xiaoming 的权限设定为 rx ,与拥有者并不同!
group::r-- <==针对文件群组的权限设定仅有 r
mask::r-x <==此文件预设的有效权限 (mask)
other::r--
3】特定的单一群组的权限设定:『g:群组名:权限』
4】主要的文件 *** 作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
getfacl -R /tmp/dir1 >acl.txt
setfacl -R -b /tmp/dir1
清除dir目录的ACL权限
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt
getfacl -R /tmp/dir1
评论列表(0条)