参看了 http://hi.baidu.com/hehongrong/item/b64a6d6b094cf634ac3e8382 里面说
-s :在文件执行时把进程的属主或组ID置为该文件的文件属主。
这句话当时我看就有点误解
到底是谁设置成谁呢?
现在明白了,是进程的主变了,不是文件的主变
总之就是 进程的主临时改变了,变成了进程文件的主。
所以这样要求这个文件是exe的进程文件,不能是脚本。
其次,是临时变,就是在动态运行的过程变。
<权限范围>+<权限设置> 开启权限范围的文件或目录的该项权限设置。
<权限范围>-<权限设置> 关闭权限范围的文件或目录的该项权限设置。
<权限范围>=<权限设置> 指定权限范围的文件或目录的该项权限设置。
权限范围的表示法如下:
u:User,即文件或目录的拥有者。
g:Group,即文件或目录的所属群组。
o:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围。
a:All,即全部的用户,包含拥有者,所属群组以及其他用户。
权限设置的表示法如下:
-s :在文件执行时把进程的属主或组ID置为该文件的文件属主。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置.
setuid: 设置使文件在执行阶段具有文件所有者的权限. 典型的文件是 /usr/bin/passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root权
限, 从而可以更改用户的密码.
当其他用户执行oracle的sqlplus这个程序时,他的身份因这个程序暂时变成oracle(这句话也是指代不清,他的身份是谁的身份呢?)
chmod u+s sqlplus
首先 sqlplus本来就属于oracle的,所以要说清 执行chmod u+s sqlplus实在非oracle用户环境地下执行。
这样才可以使得执行chmod命令的这个非oracle用户 对 sqlplus 拥有临时的oracle的权限。