当前位置: 技术问答>linux和unix
请教:关于设置setuid的问题
来源: 互联网 发布时间:2015-07-20
本文导语: 最近看资料,说是setuid设置可以使文件在执行阶段具有文件所有者的权限. 然后我以root用户建立一个测试文件/test/1.sh,内容如下: ================================= #!/bin/bash echo -e "This is a test sample.n" echo $(ls /root) =============...
最近看资料,说是setuid设置可以使文件在执行阶段具有文件所有者的权限.
然后我以root用户建立一个测试文件/test/1.sh,内容如下:
=================================
#!/bin/bash
echo -e "This is a test sample.n"
echo $(ls /root)
=================================
给这个文件设置setuid:chmod 4755 1.sh
而且以root用户执行得到正确结果.
但是我以另一个用户u01执行这个文件,却得到如下结果:
"This is a test sample.
ls: /root: Permission denied"
请问这是怎么回事?不是说setuid设置可以使文件在执行阶段具有文件所有者的权限吗?
然后我以root用户建立一个测试文件/test/1.sh,内容如下:
=================================
#!/bin/bash
echo -e "This is a test sample.n"
echo $(ls /root)
=================================
给这个文件设置setuid:chmod 4755 1.sh
而且以root用户执行得到正确结果.
但是我以另一个用户u01执行这个文件,却得到如下结果:
"This is a test sample.
ls: /root: Permission denied"
请问这是怎么回事?不是说setuid设置可以使文件在执行阶段具有文件所有者的权限吗?
|
你给这个脚本文件加上setuid 后 你只是具有了执行这个脚本的权限,但是里面的命令内容还只是u01用户执行的。
如果不对脚本加上setuid,你根本就执行不了这个脚本文件。
linux系统中对权限分配是很细的,一层一层可以有不同的权限。
如果不对脚本加上setuid,你根本就执行不了这个脚本文件。
linux系统中对权限分配是很细的,一层一层可以有不同的权限。
|
setuid,是在执行命令之前把uid改成能够执行这个命令的uid,执行
完这条命令之后,还要把uid还原,然后执行程序的用户的uid。
这个我不清楚是否对shell程序,但是我知道在c程序中好用,我做过
用c程序调用root用户才能够执行的命令,并且这个c程序不是在root
用户下执行,在root的用户下把c程序4775,这样在c程序中,调用
root用户才能执行命令的之前,把uid=0,gid=0,执行完这个命令之后
把uid和gid恢复原来的值。
供参考。
完这条命令之后,还要把uid还原,然后执行程序的用户的uid。
这个我不清楚是否对shell程序,但是我知道在c程序中好用,我做过
用c程序调用root用户才能够执行的命令,并且这个c程序不是在root
用户下执行,在root的用户下把c程序4775,这样在c程序中,调用
root用户才能执行命令的之前,把uid=0,gid=0,执行完这个命令之后
把uid和gid恢复原来的值。
供参考。