版权声明:自我梳理及总结的内容,如果您需要转载请注明出处,非常感谢! https://blog.csdn.net/Smasegain/article/details/48230469
一.说明
Unix-Based操作系统中文件是否可以执行是通过文件本身的属性来控制的,而在Windows中则必须是.exe的文件。当然, Unix-Based系统的权限实际不止是是否可以执行。本文将着重说明我们常用的权限设置命令--chmod。
二.语法说明
通常情况下,我们多数时候都是用数字来设置权限,但是此处则按照chmod本身说明的顺序先说明字母描述权限的办法来设置权限。
2.1.字母描述权限说明
chmod实际是change mode的缩写,意为改变文件的模式,详细说明:chmod [OPTION] MODE[,MODE] FILE
OPTION可用选项包含:
-c:详细输出,仅输出有权限变更的内容;
-f:屏蔽错误信息;
-R:递归修改权限,包含子文件及子文件夹
MODE可用模式组合:[ugoa...][[+-=][rwxXstugo...]
ugoa表示文件相关的用户:
u(user)为文件属主,
g(group)为文件属组中的用户,
o(other)不在文件组中的其他用户,
a(all)表示所有用户,如果不指定关联用户则默认为所有用户( 但是无法覆盖umask设置的权限),范例如下:
[oracle@shadcplamc02a ~]$ cd test/
[oracle@shadcplamc02a test]$ umask
0022-->umask基于666进行权限设置,本例对应创建的文件权限为:644
[oracle@shadcplamc02a test]$ ls -ltr
total 0
[oracle@shadcplamc02a test]$ touch xxx
[oracle@shadcplamc02a test]$ ls -ltr
total 0
-rw-r--r-- 1 oracle dba 0 Sep 1 10:59 xxx
[oracle@shadcplamc02a test]$ chmod +w xxx--> 相当于a+w,但是umask为022故相当于权限未做变更
[oracle@shadcplamc02a test]$ ls -ltr
total 0
-rw-r--r-- 1 oracle dba 0 Sep 1 10:59 xxx
[oracle@shadcplamc02a test]$ chmod o+w xxx-->单独执行o+w可以为其他用户添加成功
[oracle@shadcplamc02a test]$ ls -ltr
total 0
-rw-r--rw- 1 oracle dba 0 Sep 1 10:59 xxx
[oracle@shadcplamc02a test]$ chmod -w xxx--> 移除w权限,因umask限制,不会修改其他用户的权限
chmod: xxx: new permissions are r--r--rw-, not r--r--r--
[oracle@shadcplamc02a test]$ ls -ltr
total 0
-r--r--rw- 1 oracle dba 0 Sep 1 10:59 xxx
[oracle@shadcplamc02a test]$ chmod o-w xxx-->指定o-w可以移除成功
[oracle@shadcplamc02a test]$ ls -ltr
total 0
-r--r--r-- 1 oracle dba 0 Sep 1 10:59 xxx
[oracle@shadcplamc02a test]$ umask 002-->修改umask为0002
[oracle@shadcplamc02a test]$ umask
0002
[oracle@shadcplamc02a test]$ chmod 644 xxx-->还原文件权限
[oracle@shadcplamc02a test]$ ls -ltr
total 0
-rw-r--r-- 1 oracle dba 0 Sep 1 11:10 xxx
[oracle@shadcplamc02a test]$ chmod +w xxx--> 再次+w,发现仅umask中设定的其他用户写权限无法添加w权限
[oracle@shadcplamc02a test]$ ls -ltr
total 0
-rw-rw-r-- 1 oracle dba 0 Sep 1 11:10 xxx
[+-=]表示给对应的用户如何设置权限:
+:表示为指定用户增加某些权限;
-:表示为某些用户移除某些权限;
=:表示不管原来权限是什么,直接设置为等号后面点额权限;
[rwxXstugo]为文件对应的权限:
r(Read,数值对应4):
文件-->通过vi, cat等工具 查看文件内容;
文件夹-->可以通过ls查看文件夹中的文件,但是 看不到文件的属性;
w(Write,数值对应2):
文件-->可以通过vi等命令编辑文件的内容;
文件夹-->可以在文件夹下创建或删除文件(也需要x权限),实际上是修改的文件夹的inode;
x(Execute,数值对应1):
文件-->可以执行文件;
文件夹-->可以进入文件夹
X(Execute):execute only if the file is a directory or already has execute permission for some user-->没测出来.
s(SetUID数值对应4/SetGID数值对应2):
SetUID对于文件--> 1). 必须是二进制文件; 2).文件用户本身需要有x权限(否则S为大写); 3).执行者将具备所有者的权限,passwd就是一个很好的例子因为每个用户都需要调用passwd去修改自己的密码,但是密码相关的的文件(/etc/passwd,/etc/shadow*)只有root可以修改。我们可以看到/usr/bin/passwd这个命令的属性为: -rwsr-xr-x,第四位的s即表示set Uid,且普通用户执行时可以看到程序的执行者是root。将mkdir设置Suid属性则普通用户创建的文件夹为root的所有者和普通用户的组:
[root@shadcplamc02a ~]# ls -ltr /bin/mkdir
-rw xr-xr-x 1 root root 31664 Mar 14 2012 /bin/mkdir
[root@shadcplamc02a ~]# chmod u+s /bin/mkdir
[root@shadcplamc02a ~]# ls -ltr /bin/mkdir
-rw sr-xr-x 1 root root 31664 Mar 14 2012 /bin/mkdir
[oracle@shadcplamc02a app]$ mkdir /app/test1-->切换到Oracle用户创建一个文件夹
[oracle@shadcplamc02a app]$ ls -ld /app/test1
drwxrwxr-x 2 root dba 4096 Sep 1 13:30 /app/test1
注:SetUid可以实现类似sudo才能实现的部分功能
SetGID对于文件-->同SetUid一致,以该用户的属组的权限去执行该文件,权限位描述为 -rwxrwsr-x;
SetGID对于文件夹-->主要特性包含:
1).如果用户对此目录包含r和x的权限,则用户能够进入此目录;
2).用户在具备此属性的目录下的有效用户组将会变成该目录的组;
3).如果用户在文件夹上有w权限,则用户创建的文件及文件夹与此目录的用户组相同。
t(Stick bit数值对应1):
文件--> Linux内核会忽略文件的粘滞位属性,有的操作系统只有root用户可以设置粘滞位;
文件夹-->文件夹的粘滞位可以确保在所有人都有读写执行的权限的文件夹下,文件只能被owner或root用户进行重命名,删除等操作, 例如/temp:
[ncaomon@shadcplamc02a test]$ ls -ld /tmp
drwxrwxrwt 14 root root 4096 Sep 1 11:53 /tmp-->所有普通用户都可以在/tmp下维护自己的文件,但是不能删除别人的文件。
注意:粘滞位设置需要确保原文件/文件夹本身有x权限,否则t将会是大写的(也就是 没有生效),例如:
[oracle@shadcplamc02a app]$ ls -ld test
drwxrwxrw- 2 oracle dba 4096 Sep 1 13:13 test
[oracle@shadcplamc02a app]$ chmod 1776 test-->第一位的1表示粘滞位,2表示set Gid, 4表示Set Uid
[oracle@shadcplamc02a app]$ ls -ld test
drwxrwxrwT 2 oracle dba 4096 Sep 1 13:13 test
u(User):将授予文件所有者的权限授予目标用户;
[oracle@shadcplamc02a app]$ ls -ltr
-rw------- 1 oracle dba 28 Sep 1 11:55 test.log
[oracle@shadcplamc02a app]$ chmod u=o test.log
[oracle@shadcplamc02a app]$ ls -ltr
---------- 1 oracle dba 28 Sep 1 11:55 test.log
g(Group):将授予文件组的权限授予目标用户;
o(Other):将授予其他用户的权限授予目标用户;
2.2.数字描述的文件权限
数字的权限主要通过四位数字来描述,例如0055(前面的0可以忽略,相当于常规的55,实际权限---r-xr-x),每一位上的数字都可以为4,2,1三种权限的组合(0为无此权限)
1).第一位的4-->suid,2-->sgid,1-->stick bit;2).第二位的4-->user的r,2-->user的w,1-->user的x;3).第三位的4-->group的r,2-->group的w,1-->group的x;4).第四位的4-->other的r,2-->other的w,1-->other的x;
三.权限设置范例
1).设置当前路径下print.sh文件对于属主有读的权限,对于属组用户有写的权限,对于其他用户有执行的权限:
chmod u=r,g=w,o=x print.sh-->等同于:chmod 421 print.sh-r---w---x 1 root root 0 Sep 5 21:53 print.sh
chmod u+s print.sh-->等效于:chmod 4421 print.sh-r-S-w---x 1 root root 0 Sep 5 21:53 print.sh-->大写S是因为该文件对于属主本身没有可执行的权限