目录的读权限允许查看目录内部的文件,写权限允许在目录内部新建、删除、重命名文件,执行权限允许在访问目录内的文件时使用该目录名。
如果只对目录有读权限而没有执行权限,则可以查看该目录下文件的inode信息(如文件名,权限,大小,访问时间等等),但不能查看这些文件的具体内容。
如果对目录有写权限,由于文件名信息是存在目录中,因此可以在该目录下新建文件,或重命名、删除其中的任一文件,不管该文件原来的权限如何。即使对该目录下的文件没有读权限,仍可对这些文件做重命名。
如果对目录具有执行权限,但没有读权限,则不能直接查看该目录下的文件列表,但可以在已知该目录下某些文件名的情况下直接使用这些文件。
Unix如何决定用户新建文件所属的group:
1、System V-based systems:进程有效的group id。即,除非当前是个SGID进程,否则就是primary group membership。
2、BSD:文件所在目录所属的group。
3、其他系统比较麻烦,推荐新建一个空文件,然后ls -l看看就行了。
使用目录的set group ID (setgid)位来控制group权限。如果chmod g+s,那么采用BSD的做法;如果chmod g-s,那么采用System V的做法。
chgrp给文件换新group的时候,用户得是该新group的成员。
如果要设置目录为group-accessible,注意还要chmod g+x,否则不如chmod g-s。
粘滞位:对目录具有写权限的用户可以重命名或删除此目录下、不属于该用户的文件。为禁止此类操作,该目录的所有者可以对目录设置sticky bit。
jerry% mkdir share
jerry% chmod 1777 share
jerry% ls −ld share
drwxrwxrwt 2 jerry ora 32 Nov 19 10:31 share
设置粘滞位后,能在该目录重命名或删除文件的只可能是:文件的所有者,目录的所有者,超级用户。
chmod o-x,g+r foo
chmod a=rw foo
chmod go-w foo
chmod g=u foo 将foo的group权限设为与owner权限相同。
对目录具有写权限,但具有该目录下文件的写权限,仍可修改该文件,安全漏洞:
% ls −l unwritable
−r−r−r− 1 john 334 Mar 30 14:57 unwritable
% cat > unwritable
unwritable: permission denied
% cat unwritable > temp
% vi temp
...
% mv temp unwritable
override protection 444 for unwritable? y
% cat unwritable
John wrote this originally, and made the file read−only.
But then Mike came along and wrote:
I should not have been able to do this!!!
可见其他人拥有对目录的写权限会有很大的问题。。。注意设置好umask,或者重新chmod一下已有的目录权限。如果实在想放开目录的写权限,那么得记得设粘滞位chmod +t dir1。
父目录不可见,而子目录可见的例子:
hanna% chmod 711 project
hanna% chmod 777 project/pLaN
hanna% ls −ld project project/pLaN
drwx−−x−−x 3 hanna 512 Jul 27 17:36 project
drwxrwxrwx 2 hanna 512 Jul 27 17:37 project/pLaN
此时:
cd /home/hanna/project/pLaN && ls 是可以看里面的东西的。
cd /home/hanna/project/pLaN && pwd 是看不到目录名的,因为pwd要冲到父目录里取名字,而现在没有父目录的读权限。
BSD UNIX下,用户总是其所属所有群组的成员。System V UNIX下,用户可以是一些群组的成员,但是每次只能处于一个群组之中,如果要访问其他组的文件,则需要用到newgrp groupname切换用户所属的群组。
参考:Newgrp
newgrp指令类似login指令,当它是以相同的帐号,另一个群组名称,再次登入系统。
欲使用newgrp指令切换群组,您必须是该群组的用户,否则将无法登入指定的群组。
单一用户要同时隶属多个群组,需利用交替用户的设置。
若不指定群组名称,则newgrp指令会登入该用户名称的预设群组。
一些BSD-based系统有个wheel group,root必须在这个wheel组内。
大多系统都有tty group,只有属于这个组的用户才具有对终端的写权限,而组外的其他用户除非运行setgid程序(比如write),否则不能往终端写字符。
groups username 查看用户属于哪个组。
二进制文件必须有可执行权限才能执行,不一定要有可读权限。
shell script必须有可读权限才能被shell处理,但不一定要有可执行权限,比如 sh scriptfile 只要scriptfile可读就能执行。而scriptfile的可执行权限是告诉内核在只敲文件名 scriptfile 的时候可以试着执行该文件。
使用su切换用户。中间可以ctrl-z暂时蹦回原来的身份。如果同时su多个用户的进程都suspend,可以jobs看一下,再 fg %n 恢复第n个后台进程。
没有评论:
发表评论