linux下文件的权限问题
我在linux下编写了这样一段代码:
<img src="8553.jpg" alt="PHPbookmark logo" bordor="0" align="left" valign="bottom" height="55" width="57"/>
可是图片却显示不出来,后来得知是因为linux下有 权限问题,像我添加的图片我对它没有设置可读的权限,所以显示不出来,后来对图片执行 sudo chmod 777 8553.jpg (因为我不是root用户所以加了sudo)后就可以了。
于是我在网上查了下关于linux的权限问题,总结如下:
Linux是一个对权限管理非常严格的系统,Linux下每个文件的权限分为三个组:User(u),Group(g),Other(o)。每个组又有三种不同的权限,可读(r),可写(w),可执行(x),一共用3个八进制数来表示一个文件的权限。
User组代表文件的拥有者,通常文件的创建者就是文件的拥有者,当然,可以使用chown来改变拥有者。
Group组代表拥有文件的用户组,任何在这个组中的用户都被视作拥有这个文件,并且拥有相同的访问权限,这个是很有用的,比如,你有一个项目,需要多人合作,必须让开发者拥有访问权限,而其他人没有,那么就可以把这些用户添加到一个组,然后设置文件归这个组所有。
Other组代表既不是文件的拥有者,也不属于拥有文件的用户组的用户。相当于Windows中Everyone组,对这个组设置的权限会影响到其他所有人。
一.查看权限
我们可以用ll(为ls -l的缩写或说为别名)或ls -l 来查看当前目录下的文件的权限,例如得到的列表如下:
drwxr-xr-x 3 sunsun ss 4096 2012-08-07 08:46 mulu drwxr-xr-x 2 ss ss 4096 2012-08-07 08:46 bin -rw-r--r-- 1 root root 529 2012-07-22 07:30 atk.json -rwxrwxrwx 1 cloud www-data 702261 2012-04-17 17:48 rootdabitch-0.1.zip
第一部分表示文件的类型,在linux下一共有七种文件类型,包括套接字(s),符
号链接文件(l),普通文件(-),快设备文件(b),目录(d),字符设备(c)和命名管道(P) ,在上面的例子里只出现了两种d和—;
然后接下来的9个字符以每三个为一组分别表示user,group,other的权限;
接下来的数字表示文件链接数;
再接下来的两组名字分别表示拥有者的名字和用户组的名字;
在 接下来的数字表示文件大小;
然后是最后修改日期;
最后文件名。
以例子的第一行来做进一步分析:文件mulu,是个目录,拥有者是sunsun,拥有可读可写可执行的权限(rwx)用户组是ss,拥有可读可执行权限(r-x),其他用户拥有可读可执行权限(r-x),它的文件连接数是3,大小为4096,最后修改时间是2012-07-22 07:30.
二.修改权限
当我们要改变文件权限时既可以用字符方式,又可以用二进制或八进制数的方式。改变文件权限的命令是chmod。
chmod 【参数】【模式】<文件或目录>
【参数】为:
-c 只有在文件的权限确认改变才进行详细说明
-f 不输出权限不能改变的文件的错误
-v 详细说明权限的变化
-r 改变目录及其子目录的文件的权限(比较有用)
【模式】用字符方式的话:
u 代表所有者(user)
g 代表所有者所在的组群(group)
o 代表其他人,但不是u和g (other)
a 代表全部的人,也就是包括u,g和o
+:增加
-:去掉
=:指定文件的权限
r 表示文件可以被读(read)
w 表示文件可以被写(write)
x 表示文件可以被执行(如果它可执行的话)
X:只有目标文件对某些用户是可执行的火灾该目标文件是目录是才追加X属性。
t:T位,拒绝删除的权限位
s:设置SUID,SGID,指拥有这样的权限的可执行程序当某一用户执行的时候拥有属主或者属主所在的组的权限。
这两个权限位主要是设定用户或用户组的运行ID。SUID功能是
当用户(不一定是该文件的拥有者)执行SUID文件时, 这个文件有效用户号(UID)就会被设
定为该文件拥有者的用户号(UID);对于GUID,类似SUID当用户(不一定是该文件的用户组
成员)这行SGID文件时,这个文件的有效用户组号(GID)就会被设定为该文件的用户组号(GIU)。
对于SUID和SGID位我们只能用u+/-s或g+/-s来改变;
例如:
chmod -r u+x ss //对所有者增加对目录及其子目录可执行的权限
chmod u+x ss.txt //对所有者增加可执行权限
chmod +x ss.txt //对所有用户增加可执行权限
chmod +w ss.txt //这个却不能对所有用户增加可写权限,只对所有者,和所有者所在的组增加了可写权限。
//要想对所有用户增加可写权限
chmod a+w ss.txt
chmod u+/-s ss.txt //这样就改变了用户的UID
chmod g+/-s ss.txt //这样就改变了用户组的GID
//ll就会显示
-rwsr-sr-x 3 sunsun ss 4096 2012-08-07 08:46 ss.txt //这样文件的用户号和用户组号就都设定了。
chmod a+t/+t ss.txt //这样就使得所有用户都不能删除该文件,不能用数字表示
//ll就会显示
-rwsr-sr-T 3 sunsun ss 4096 2012-08-07 08:46 ss.txt //这样所有用户只能删除属于自己的文件不能删除属于其他人的
【模式】用数字方式为:
也可以用八进制数来表示,当某一位使能时就把这一位符值为1,如rw-就表
示读和写位使能,对应的位赋1,用八进制6表示。如果要设置suid(4)和sgid(2)和T(1)位就是用4位数字,如果不设置它们就是三位
如:
chmod 4755 ss.txt //将设置suid,所有者为可读可写可执行,所有者组为可读可执行,其它用户为可读可执行
chmod 2755 ss.txt //将设置sgid,所有者为可读可写可执行,所有者组为可读可执行,其它用户为可读可执行
chmod 1755 ss.txt //将设置所有者为可读可写不可删除不属于自己的文件,所有者组为可读不可删除不属于自己的文件,其他用户组为可读不可删除不属于自己的文件
chmod 755 ss.txt //将设置所有者为可读可写可执行,所有者组为可读可执行,其他用户为可读可执行
最后还有chown的用法,用于改变文件的所有人和组:sudo chown 用户名:组名 目录或者文件