linux的文件权限通过用户,组和其它组来实现。一个文件只能属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入这个组,一个用户可以同时属于多个组。一般来说一个应用下不要有太多的文件组和用户,最好不要用 ROOT执行角本,这样权限都放放大,比较不安全
Linux下很重视权限,权限包括读,写,执行。所以即使Linux下染了病毒,也不一定中病毒,其实就是这个权限的问题。初学者在Linux执行 命令是会感觉比较累,每次都是要用su来切换用户,其实这也是Linux保护数据的一种模式。当然建议,用户登入是不要直接用root用户登入。如果知道 root登录命令的话。
Linux下有用户跟群组的观念。往往分为三个部分,持该文件的用户(user),跟持该文件同组的用户(group),剩下的其他用户(other)。一个用户可以属于很多个群组。Linux下表示权限有两种方式:
一种是八进制表示法(十位表示法,不是说八进制有十位,而是三个八进制位,再加一个最高位共十位),
另外一种十二位二进制表示法(十二个二进制位)。
先介绍第一种:
是三种模式,三个属组,就构成了9位。-代表无权限,r代表只读,w代表写的权限,x则代表执行。所以就有下面的组合。将-视为0,x视为1,w视 为2,r视为4.这种组合根据该位是否有这个数来确定,就确定如下的9种组合方式。刚好,总的权值0-7对应于八进制的全部。所以也可以说权限是可以用八 进制来表示的。最高的权限就是7,代表可读,可写,可执行。3就是代表只有写跟执行的权限。其他数字类推。
模式 数字
rwx 7 rw- 6 r-x 5 r-- 4 -wx 3 -w- 2 --x 1 --- 0每个八进制数其实可以转化为三位的二进制数,
r=100,w=010,x=001,-=000
r=4, w=2, x=1, -=0
这个关系在第二种表示方法中是有用的。由于r是出现在三位中的最高位,就相当于最高位才有效,可忽略0位。在这种方法中,你可以类似的在出现的地方对它置1,不出现的地方置0,然后三个三个的转化就出来三位的八进制数了。
还是举几个例子吧:
-rw-rw-r-- 1 samuel samuel 6479 07-08 08:46 Christians.pls
根据上面对应关系为664.-rwxr-xr-x 1 samuel samuel 0 Jan 9 17:44 scriptfile.sh
这个对应关系算出来就是755.所以根据数字也可以推出来777就是指-rwxrwxrwx的模式。
指定权限Linux的命令为chmod,比较自由可以用数字来表示也可以用英文形象的表示。
如chmod 777 samuel.sh所有用户取得最高的权限
chmod o+w samuel.sh其他用户被赋予了写的权限
chmod go-rw samuel.sh组跟其他用户被删去读跟写的权限
chmod的行为规范:
+ 表示添加权限
- 表示删除权限
= 表示使之成为唯一的权限
只有这样,自己写的shell脚本才可以被Linux执行。否则是不可能运行的,这个就是Linux有别于Windows的机制,也是采用这个方法可以防止病毒自我运行,因为运行的条件是必须要有运行的权限,而这个权限在Linux是用户所赋予的。
关于第一位最高位的解释:
第一位代表是文件的类型,类型可以是下面几个中的一个:
- d代表的是目录(directroy)
- -代表的是文件(regular file)
- s代表的是套字文件(socket)
- p代表的管道文件(pipe)或命名管道文件(named pipe)
- l代表的是符号链接文件(symbolic link)
- b代表的是该文件是面向块的设备文件(block-oriented device file)
- c代表的是该文件是面向字符的设备文件(charcter-oriented device file)
还有一个也是涉及到权限的,就是suid,sgid跟sticky。suid/sgid是为了适应“没有取得特权用户要完成一项必须要有特权才可以执行的任务”才产生的。
suid(set User ID,set UID)的意思是进程执行一个文件时通常保持进程拥有者的UID。然而,如果设置了可执行文件的suid位,进程就获得了该文件拥有者的UID。
sgid(set Group ID,set GID)意思也是一样,只要把上面的进程拥有者改成进程组就好了。
如果一个文件被设置了suid或sgid位,会分别表现在所有者或同组用户的权限的可执行位上。
如果还设置了x位,则相应的位表示为s(小写)。但是,如果没有设置x位,它将表示为S(大写)。如下例:
1、-rwsr-xr-x 表示suid和所有者权限中可执行位被设置
2、-rwSr--r-- 表示suid被设置,但所有者权限中可执行位没有被设置
3、-rwxr-sr-x 表示sgid和同组用户权限中可执行位被设置
4、-rw-r-Sr-- 表示sgid被设置,但同组用户权限中可执行位没有被社置。
再介绍第二种:
在UNIX的实现中,文件权限还可以用十二个二进制位表示,具体方法是在这十二位的每一位上都置值。如果该位置上的值是1,表示有相应的权限,而0表示没有此权限。
这十二位分别对应关系如下:
11 10 9 8 7 6 5 4 3 2 1 0 S G T r w x r w x r w x第11位为SUID位,第10位为SGID位,第9位为sticky位,第8-0位对应于上面的三组rwx位。
-rwsr-xr-x的值为: 1 0 0 1 1 1 1 0 1 1 0 1 -rw-r-Sr--的值为: 0 1 0 1 1 0 1 0 0 1 0 0其实两种方法都是互通的。
给文件加suid和sgid的命令如下(类似于上面chmod赋予一般权限的命令):
chmod u+s filename 设置suid位 chmod u-s filename 去掉suid设置 chmod g+s filename 设置sgid位 chmod g-s filename 去掉sgid设置但是在许多环境中,suid 和 suid 很管用,但是不恰当地使用这些位可能使系统的安全遭到破坏。最好尽可能地少用“suid”程序。passwd 命令是为数不多的必须使用“suid”的命令之一。
现在介绍sticky:
一般来说,只要对一个目录有写访问权,任何人都可以重命名或删除该目录中的文件。对于个别用户使用的目录,这种行为是很合理的。但是,对于很多用户 使用的目录来说,尤其是 /tmp 和 /var/tmp,这种行为可能会产生麻烦。因为任何人都可以写这些目录,任何人都可以删除或重命名任何其他人的文件,即使是不属于他们的!显然,当任何 其他用户在任何时候都可以输入“rm -rf /tmp/*”并损坏每个人的文件时,很难把 /tmp 用于任何有意义的文件。所幸,Linux 有叫做“粘滞位”(sticky bit)的东西。当给 /tmp 设置了粘滞位(用 chmod +t),唯一能够删除或重命名 /tmp 中文件的是该目录的所有者(通常是 root 用户)、文件的所有者或 root 用户。事实上,所有 Linux 分发包都缺省地启用了 /tmp 的粘滞位,而您还可以发现粘滞位在其它情况下也很管用。
总结:
正如上面所说的,其实两种方法可以互通。对于第二种,我们也可以三位三位的转化为4个八进制数。最高的一位八进制数就是suid,sgdi,sticky的值一个反应。777就是他们都设为了1.
语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。 r=4,w=2,x=1 若要rwx属性则4+2+1=7; 若要rw-属性则4+2=6; 若要r-x属性则4+1=7。范例:
chmod a=rwx file 和 chmod 777 file 效果相同 chmod ug=rwx,o=x file 和 chmod 771 file 效果相同 若用chmod 4755 filename可使此程式具有root的权限 指令名称 : 使用权限 : root 使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file... 说明 : Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自 己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。 把计 : user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群体(group)-c : 若该档案拥有者确实已经更改,才显示其更改动作-f : 若该档案拥有者无法被更改也不要显示错误讯息-h : 只对于连结(link)进行变更,而非该 link 真正指向的档案-v : 显示拥有者变更的详细资料-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)--help : 显示辅助说明--version : 显示版本 范例 : 将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie : chown jessie:users file1.txt 将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :chmod -R lamport:users * -rw------- (600) -- 只有属主有读写权限。 -rw-r--r-- (644) -- 只有属主有读写权限;而属组用户和其他用户只有读权限。 -rwx------ (700) -- 只有属主有读、写、执行权限。 -rwxr-xr-x (755) -- 属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。 -rwx--x--x (711) -- 属主有读、写、执行权限;而属组用户和其他用户只有执行权限。 -rw-rw-rw- (666) -- 所有用户都有文件读、写权限。这种做法不可取。 -rwxrwxrwx (777) -- 所有用户都有读、写、执行权限。更不可取的做法。 以下是对目录的两个普通设定: drwx------ (700) - 只有属主可在目录中读、写。 drwxr-xr-x (755) - 所有用户可读该目录,但只有属主才能改变目录中的内容的代表数字是4,比如4755的结果是-rwsr-xr-x sgid的代表数字是2,比如6755的结果是-rwsr-sr-x sticky位代表数字是1,比如7755的结果是-rwsr-sr-thttp://www.linuxso.com/command/chmod.html