用sudo进行操作 和用真正的root身份来操作有没有区别?

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
头像
Amankwah
帖子: 624
注册时间: 2006-10-16 7:24
来自: 安康/西安/广州
联系:

#16

帖子 Amankwah » 2008-09-03 21:30

BigSnake.NET 写了:
Amankwah 写了:楼上说得很有道理,sudo的权限会被管道或者重定向阶段,有时候就很郁闷。
比如打开内核的IP转发:
sudo echo '1' >/proc/sys/net/ipv4/ip_forward
是不行的,而root就可以。
要用sudo的话我目前只知道这样解决:
echo '1'|sudo tee /proc/sys/net/ipv4/ip_forward

而且sudo执行的uid一般是当前执行sudo的用户ID,而root直接执行的uid应该是0
错, sudo 执行的东西当然是 EUID 0,问题出在你那个 > ,那个是当前 shell 给你重定向的,当然就不是 root 身份
那sudo echo $UID和sudo echo $EUID的结果呢?
你可以试试~
而且你看红字部分!我过了,只不过不小心吧“截断”打成“阶段”了,不好意思。
读书取正,读易取变,读骚取幽,读庄取达,读汉文取坚,最有味卷中岁月。
与菊同野,与梅同疏,与莲同洁,与兰同芳,与海棠同韵,定自称花里神仙。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#17

帖子 BigSnake.NET » 2008-09-03 21:35

Amankwah 写了:
BigSnake.NET 写了:
Amankwah 写了:楼上说得很有道理,sudo的权限会被管道或者重定向阶段,有时候就很郁闷。
比如打开内核的IP转发:
sudo echo '1' >/proc/sys/net/ipv4/ip_forward
是不行的,而root就可以。
要用sudo的话我目前只知道这样解决:
echo '1'|sudo tee /proc/sys/net/ipv4/ip_forward

而且sudo执行的uid一般是当前执行sudo的用户ID,而root直接执行的uid应该是0
错, sudo 执行的东西当然是 EUID 0,问题出在你那个 > ,那个是当前 shell 给你重定向的,当然就不是 root 身份
那sudo echo $UID和sudo echo $EUID的结果呢?
你可以试试~

代码: 全选

echo sudo echo $UID
echo sudo echo $EUID
那个 $UID 是当前shell给你扩展的,换句话说你执行的就是 sudo echo 1000 ...
假设你的UID是1000

为什么不截断呢, 你要明白管道和重定向是当前 shell 的功能,不关 sudo 事
上次由 BigSnake.NET 在 2008-09-03 21:38,总共编辑 1 次。
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

#18

帖子 yjcong » 2008-09-03 21:37

diony 写了: 只是环境变量之类的东西还是普通用户的。不过好像sudoer里也有环境变量相关的设置。
对吗??
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
Amankwah
帖子: 624
注册时间: 2006-10-16 7:24
来自: 安康/西安/广州
联系:

#19

帖子 Amankwah » 2008-09-03 21:42

BigSnake.NET 写了:
Amankwah 写了:
BigSnake.NET 写了:
Amankwah 写了:楼上说得很有道理,sudo的权限会被管道或者重定向阶段,有时候就很郁闷。
比如打开内核的IP转发:
sudo echo '1' >/proc/sys/net/ipv4/ip_forward
是不行的,而root就可以。
要用sudo的话我目前只知道这样解决:
echo '1'|sudo tee /proc/sys/net/ipv4/ip_forward

而且sudo执行的uid一般是当前执行sudo的用户ID,而root直接执行的uid应该是0
错, sudo 执行的东西当然是 EUID 0,问题出在你那个 > ,那个是当前 shell 给你重定向的,当然就不是 root 身份
那sudo echo $UID和sudo echo $EUID的结果呢?
你可以试试~

代码: 全选

echo sudo echo $UID
echo sudo echo $EUID
那个 $UID 是当前shell给你扩展的,换句话说你执行的就是 sudo echo 1000 ...
假设你的UID是1000

为什么不截断呢, 你要明白管道和重定向是当前 shell 的功能,不关 sudo 事
哦,管道和重定向这个我倒明白,是为了给别人解释sudo的不同表现。
关于$UID确实受教了,谢谢。
不过,拿如何看sudo执行的程序的UID呢?能给个方法么?
读书取正,读易取变,读骚取幽,读庄取达,读汉文取坚,最有味卷中岁月。
与菊同野,与梅同疏,与莲同洁,与兰同芳,与海棠同韵,定自称花里神仙。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#20

帖子 BigSnake.NET » 2008-09-03 21:43

sudo bash
#做你想做的事。。。
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
crossie
帖子: 241
注册时间: 2008-05-25 20:35

#21

帖子 crossie » 2008-09-04 10:12

Amankwah 写了:楼上说得很有道理,sudo的权限会被管道或者重定向截断,有时候就很郁闷。
比如打开内核的IP转发:
sudo echo '1' >/proc/sys/net/ipv4/ip_forward
是不行的,而root就可以。
要用sudo的话我目前只知道这样解决:
echo '1'|sudo tee /proc/sys/net/ipv4/ip_forward

而且sudo执行的uid一般是当前执行sudo的用户ID,而root直接执行的uid应该是0
我正是遇到这个问题才发这个帖子的
有一个文件的权限是rw-r--r--
我发现root可以对它写,而sudo不行,所以才觉得两者有所不同....
crossie
帖子: 241
注册时间: 2008-05-25 20:35

#22

帖子 crossie » 2008-09-04 10:13

BigSnake.NET 写了:sudo bash
#做你想做的事。。。
切换到root用户了喔...
和直接su有没有区别?
头像
milujite
帖子: 644
注册时间: 2007-01-01 22:14
联系:

#23

帖子 milujite » 2008-09-04 10:23

Amankwah 写了:
BigSnake.NET 写了:
Amankwah 写了:楼上说得很有道理,sudo的权限会被管道或者重定向阶段,有时候就很郁闷。
比如打开内核的IP转发:
sudo echo '1' >/proc/sys/net/ipv4/ip_forward
是不行的,而root就可以。
要用sudo的话我目前只知道这样解决:
echo '1'|sudo tee /proc/sys/net/ipv4/ip_forward

而且sudo执行的uid一般是当前执行sudo的用户ID,而root直接执行的uid应该是0
错, sudo 执行的东西当然是 EUID 0,问题出在你那个 > ,那个是当前 shell 给你重定向的,当然就不是 root 身份
那sudo echo $UID和sudo echo $EUID的结果呢?
你可以试试~
而且你看红字部分!我过了,只不过不小心吧“截断”打成“阶段”了,不好意思。
为什么这里要看$EUID?这个玩意不是只有设置了suid才用来看实际的UID的么?
ThinkPad SL400 DC
CPU:Intel® Core 2 Duo processor T5670
RAM:2x1GB,Dual
HARDDISK:Seagate 160G SATA
CD-ROM:COMBO
头像
想入非非
帖子: 8078
注册时间: 2008-07-14 22:42
来自: Beijing
联系:

#24

帖子 想入非非 » 2008-09-04 18:11

应该是没有什么本质上的区别的
Ubuntu User
头像
jarlyyn
帖子: 4671
注册时间: 2006-04-12 18:54
联系:

#25

帖子 jarlyyn » 2008-09-04 21:41

Amankwah 写了:楼上说得很有道理,sudo的权限会被管道或者重定向截断,有时候就很郁闷。
比如打开内核的IP转发:
sudo echo '1' >/proc/sys/net/ipv4/ip_forward
是不行的,而root就可以。
要用sudo的话我目前只知道这样解决:
echo '1'|sudo tee /proc/sys/net/ipv4/ip_forward

而且sudo执行的uid一般是当前执行sudo的用户ID,而root直接执行的uid应该是0
sudo sh -c "echo 1>/proc/sys/net/ipv4/ip_forward"

参照 man sudo 的最后一个examples。

这个明显是终端解析命令行上的问题 .
头像
jarlyyn
帖子: 4671
注册时间: 2006-04-12 18:54
联系:

#26

帖子 jarlyyn » 2008-09-04 21:46

专业点可以是 sudo $SHELL -c "内容"
回复