文件权限

权限

Linux系统中对文件/目录的权限设置是很重要的部分,通常通过ls来查看: ls -l README -rw-r--r-- 1 xxxx staff 234 Nov 9 11:27 README 说明:
第一列就是权限,有10位,从左至右第一位表示文件的类型,-__表示是文件,__d__表示是目录。接下来的9位分成3组,分别对应文件拥有者,共享文件所在组以及其他用户拥有的权限。__r__表示可读,__w__表示可写,__x__表示可执行,-__表示没有该项权限。
第二列数字1表示索引节点的目录连接。 第三列就是文件拥有者的名字,第四列则是共享文件所在组。 第五列是文件的字节数,第六、七、八列是时间,最后一列是名字。 其中文件权限可以用二进制表达,该例对应的则是: 110100100,用十进制表达则是: 644。因此,有时候修改权限 777的时候,就一定要小心了,要么是小白行为,要么就是带有恶意。

SUID/SGID

通常情况下,执行一个程序时,相应的进程具有执行这一程序的用户的权限,但有时这并没有赋予进程正确完成任务所必要的权限。这个时候,可以直接修改文件权限以满足程序的运行,但是这样可能会对系统安全造成伤害。Linux系统的解决办法是设置SUID/SGID使得用户分别以程序拥有者用户组的权限,而不是它自己的权限去运行程序。
这里SUID代表 "set user ID",SGID则代表 "set group ID",同时设置SUID和SGID的话,SUID的优先级高。
设置的方法:

chmod u+s filename //设置SUID位
chmod u-s filename //去掉SUID设置
chmod g+s filename //设置SGID位
chmod g-s filename //去掉SGID设置

举个例子:

$ ls -l
total 8
-rw-r--r--  1 xxxxxx  staff  3 Nov  9 16:51 hello
$ chmod u+s hello 
$ ls -l
total 8
-rwSr--r--  1 xxxxxx  staff  3 Nov  9 16:51 hello

因为原本的拥有者不具备x权限,所以设置后显示S;如果有对应的 x权限,设置后则会显示 s