Linux setUid,setGid 实例

本文通过实例详细介绍了Linux中setUid和setGid的用法和效果,展示了如何通过这两个权限改变程序执行时的用户权限,以及它们对文件所有权的影响,帮助理解这些权限的实际作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里我不想讲解各种关于setUid,setGid的定义.

我们通过一系列例子来看看setUid,setGid都干了些什么.

下面我介绍时: # 开头表示的是root账户,$ 表示的是我的一个普通账号fengfulee

# ls -l `which touch`

# -rwxr-xr-x 1 root root /bin/touch

这是目前系统内部 touch程序的权限和所有者.

# ls -ld /root

# dr-xr-x--- 4 root root /root


这是/root目录的权限和所属.

# chmod o+rx /root


给/root 目录一个其他用户可以进入并且查看的权限.现在/root权限是这样的.
# ls -ld /root/
# dr-xr-xr-x 4 root root /root

# cd  /root 进入/root 目录.

切换到普通用户.

$ touch a.txt

提示权限不够.

解释:当然了啊,目前该/root目录普通用户不具有写权限.无法创建文件.


$ su root

# chmod  u+s /bin/touch

给touch程序一个setUid.

# ls  -l  /bin/touch

-rwsr-xr-x root root /bin/touch

然后再切换到普通账户

#exit

$ touch a.txt

创建成功!

$ ls  -l a.txt

$ -rw-r--r-- root fengfulee a.txt

注意:这里的权限为644,观察文件的所有者为root账户,但是所属组为普通账户.


②下面来做第二个实验.我将touch文件的所有者修改为普通账户,看看创建文件的情况.

$ su root

# chown fengfulee:fengfulee /bin/touch

# ls  -l /bin/touch

# -rwxr-xr-x fengfulee fengfulee /bin/touch

这里要注意一点,之前的s消失了.之前设置的setUid失效了. 现在我重新设置它的setUid

# chmod  u+s /bin/touch

# ls  -l /bin/touch

# -rwsr-xr-x fengfulee fengfulee /bin/touch

切换账户

#exit

$ touch  b.txt

无法创建b.txt,权限不够.

我又切换到该普通用户的家目录.

$ cd ~

$ touch b.txt

$ -rw-r--r-- fengfulee fengfulee b.txt

这里似乎不能说明什么内容,因为我就是这个普通用户.

于是 我切换到root账户.

$ su root

# touch  c.txt

# ls  -l  c.txt

# -rw-r--r-- fengfulee root c.txt

这里就能说明一点东西了.这里说明setUid其实是使用该程序的所有者的权限执行程序的,于是创建的文件就是属于该程序的所有者.


# chmod g+s  /bin/touch

# ls  -l  /bin/touch

# -rwsr-sr-x 1 fengfulee fengfulee /bin/touch

# touch d.txt

# ls  -l d.txt

# -rw-r--r-- fengfulee fengfulee d.txt

这个似乎能说明了setGid的作用.

我还是没哟确定,我又做了一件事.

# chown fengfulee:spider /bin/touch

# ls -l  /bin/touch

# -rwxr-xr-x fengfulee spider /bin/touch

这里千万要记住一点,之前我修改/bin/touch程序所属的时候,其setUid, 会消失.这里也是一样的结果.

# chmod u+s,g+s /bin/touch

# touch e.txt

# ls  -l e.txt

# -rw-r--r-- fengfulee spider e.txt

现在看出点什么了吧.对,setGid和setUid类似,

总结一下,只要任何对该程序有执行权限的用户执行该程序,如果设置了setUid或者setGid的话,


其执行时,都会按照该程序实际所有者,所属组来执行文件...

④这里我又做了一个实验

# exit 切换到普通用户.

$ cd /root/

$ touch f.txt

无法创建f.txt,权限不足.


这里显示权限不足,当然啦.该程序的所有者是fengfulee,执行者还是fengfulee,尽管设置了setUid,但是按照程序所有者的权限执行的话,还是无法创建文件的.

受到启发,

$ su root

# touch f.txt

无法创建,权限不足.

我擦,这就对了...现在还是设置了setUid,并且程序所有者为 fengfulee, 虽然执行的是root账户,但是执行时时具有fengfulee权限的,但是

/root账户是不允许其他账户写入内容的.

好啦,初步探测就写到这里了.

多多关照...






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值