sudo与root之间的区别

最大的社区版本,Ubuntu的发源地
回复
yangdawei.hit
帖子: 245
注册时间: 2015-01-02 15:32
系统: Debian

sudo与root之间的区别

#1

帖子 yangdawei.hit » 2015-10-05 10:58

我正在使用一款软件ansys,参见论坛内:viewtopic.php?f=35&t=472714

一直以来存在一个疑问:正常情况下,安装完的软件是不需要sudo授与root权限的,但奇怪的是只有当使用sudo时程序才能正常运行。如:

代码: 全选

sudo ansys150
但如果不使用sudo或切换到root运行程序:

代码: 全选

ansy150
则程序就会报错:

代码: 全选

input contexts not freed before XCloseIM
forrtl: error (76): Abort trap signal
Image              PC                Routine            Line        Source             
libc.so.6          00007F604487D107  Unknown               Unknown  Unknown
libc.so.6          00007F604487E4E8  Unknown               Unknown  Unknown
libtcl8.4.so       00007F5FFB77A0DE  Unknown               Unknown  Unknown
libtcl8.4.so       00007F5FFB77A16B  Unknown               Unknown  Unknown
libtk8.4.so        00007F5FFB562D56  Unknown               Unknown  Unknown
libtk8.4.so        00007F5FFB55E85F  Unknown               Unknown  Unknown
libtcl8.4.so       00007F5FFB7555F7  Unknown               Unknown  Unknown
libAnsTclTk.so     00007F5FFB9C834B  Unknown               Unknown  Unknown
libAnsTclTk.so     00007F5FFB9C90E4  Unknown               Unknown  Unknown
libansys.so        00007F604E0CBA07  Unknown               Unknown  Unknown
libansys.so        00007F60511D7BC0  Unknown               Unknown  Unknown
libansys.so        00007F605161397F  Unknown               Unknown  Unknown
libansys.so        00007F604FACF854  Unknown               Unknown  Unknown
libansys.so        00007F604E32AA1F  Unknown               Unknown  Unknown
libansys.so        00007F604CAE7F08  Unknown               Unknown  Unknown
libansys.so        00007F604CAE830C  Unknown               Unknown  Unknown
libXt.so.6         00007F6045BCC57D  Unknown               Unknown  Unknown
libXm.so.4         00007F6046534AC1  Unknown               Unknown  Unknown
libXm.so.4         00007F60465351E5  Unknown               Unknown  Unknown
libXm.so.4         00007F604650615B  Unknown               Unknown  Unknown
libXm.so.4         00007F60465B5DB2  Unknown               Unknown  Unknown
libXt.so.6         00007F6045C00855  Unknown               Unknown  Unknown
libXt.so.6         00007F6045C017E2  Unknown               Unknown  Unknown
libXt.so.6         00007F6045BDA1BB  Unknown               Unknown  Unknown
libXt.so.6         00007F6045BDA87D  Unknown               Unknown  Unknown
libXt.so.6         00007F6045BDA959  Unknown               Unknown  Unknown
libansys.so        00007F6051886B69  Unknown               Unknown  Unknown
libansys.so        00007F6051885A02  Unknown               Unknown  Unknown
libansys.so        00007F605124DB7C  Unknown               Unknown  Unknown
libansys.so        00007F6050DCA367  Unknown               Unknown  Unknown
libansys.so        00007F6050DB49D7  Unknown               Unknown  Unknown
libansys.so        00007F60519286A2  Unknown               Unknown  Unknown
ansys.e150         0000000000407556  Unknown               Unknown  Unknown
ansys.e150         0000000000406DB5  Unknown               Unknown  Unknown
ansys.e150         0000000000406C9C  Unknown               Unknown  Unknown
libc.so.6          00007F6044869B45  Unknown               Unknown  Unknown
ansys.e150         0000000000406BA9  Unknown               Unknown  Unknown
Aborted
请各位给指点一下,问题出在哪里呢?

补充信息:

代码: 全选

yangdawei@debian:bin$ ls ansys150 -l
lrwxrwxrwx 1 root root 38 Oct  1 15:40 ansys150 -> /usr/ansys_inc/v150/ansys/bin/ansys150
yangdawei@debian:bin$ cd /usr/ansys_inc/v150/ansys/bin
yangdawei@debian:bin$ ls ansys150 -l
-rwxr-xr-x 1 root root 28693 Oct 15  2013 ansys150
yangdawei@debian:bin$ 
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: sudo与root之间的区别

#2

帖子 YeLee » 2015-10-05 11:08

http://www.jb51.net/LINUXjishu/12713.html
不知道是不是这种意思。
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33

Re: sudo与root之间的区别

#3

帖子 poloshiao » 2015-10-05 12:07

sudo与root之间的区别
1. root 是 使用者帳號 sudo 是 群組帳號
1-1. sudo cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
1-2. sudo cat /etc/group | grep sudo
sudo:x:27:username
這裡的 username 是你安裝 ubuntu 時創設的使用者帳號
1-2-1. 在 sudo 群組裡的 username (你安裝 ubuntu 時創設的使用者帳號) 才能使用 sudo (借助於 root 的權限)

2. 有關使用者帳號權限 請詳細參閱
http://linux.vbird.org/linux_basic/0210 ... ission_dir
目錄與檔案之權限意義:
2-1. 非 root 的 username 登入後
2-1-1. 如果要執行 username 權限範圍以內的文字指令 或 圖形指令
不必 加 sudo
2-1-2. 如果要執行 username 權限範圍以外的文字指令
必需 加 sudo (借助於 root 的權限)
2-1-3. 如果要執行 username 權限範圍以外的圖形指令
必需 加 gksudo (借助於 root 的權限) (第一次 需要先安裝 gksu 套件)
2-2. root 使用者帳號 登入後
2-2-1. 幾乎可以執行任何文字指令 (少數例外 新手暫時略過) 不必 加 sudo
2-2-2. 可以執行許多圖形指令 必須加 gksu (第一次 需要先安裝 gksu 套件)
但是 有許多圖形程式 會出現錯誤訊息 因為圖形程式裡面 會排除 root 執行
2-3. Ubuntu 預設 關閉 root 登入 特別是 tty7 ~ tty12 圖形界面
2-3-1. 新手 不建議使用 root 登入 或 使用 切換工具 變身成 root 身份 登入圖形界面
這個建議只針對 Ubuntu 圖形界面的新手

3. 進一步參閱
3-1. https://help.ubuntu.com/community/RootSudo
3-2. https://help.ubuntu.com/community/Sudoers
正常情况下,安装完的软件是不需要sudo授与root权限的,
4. 這句話 誤導了你
需要不需要加 sudo 不是由程式來決定
而是由要完成的任務 需要什麼範圍的權限來決定
權限不夠 就會停止執行
4-1. 例如 ls 指令 有時要加 sudo 有時不加 sudo 要由完成的任務 需要什麼範圍的權限來決定
4-1-1. sudo ls -al /root | grep ssh
drwx------ 2 root root 4096 3月 6 2013 .ssh
4-1-2. ls -al /root | grep ssh
ls: 無法開啟 /root 目錄: 拒絕不符權限的操作
因為非 root 使用者沒有權限
4-1-2-1. sudo ls -al / | grep root
drwx------ 33 root root 4096 10月 1 07:40 root
4-1-2-2. sudo ls -al /root | grep ssh
drwx------ 2 root root 4096 3月 6 2013 .ssh
问题出在哪里呢?
5. 通常代表 非 root 使用者帳號 權限不夠
所以需要加 sudo 借助 root 權限

6. 還有一個 pkexec + 程式 或 程式-pkexec 相當於 root 權限執行該程式
程式不分文字指令或圖形指令都行
其機制不同於 sudo/gksudo
詳細參見
6-1. http://manpages.ubuntu.com/manpages/rar ... xec.1.html
pkexec - Execute a command as another user
6-2. http://packages.ubuntu.com/search?suite ... chon=names
套件名稱 policykit-1
yangdawei.hit
帖子: 245
注册时间: 2015-01-02 15:32
系统: Debian

Re: sudo与root之间的区别

#4

帖子 yangdawei.hit » 2015-10-05 19:11

感谢poloshiao提供的丰富信息。就我提出的问题而言,为什么加了sudo运行正常,而通过su转为root后却不能正常运行。这两者之间的权限差异应是解决这一问题的关键。
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33

Re: sudo与root之间的区别

#5

帖子 poloshiao » 2015-10-05 19:43

为什么加了sudo运行正常,
uid :
id -u username
username 指你登入的非 root 使用者帳號
通常是 1000
而通过su转为root后却不能正常运行。
uid :
id -u root
0
这两者之间的权限差异应是解决这一问题的关键。
例如
許多程式 限制 uid 必須 > 0 或 > 500 或 > 999 才能執行
所以 root (uid=0) 就會出現錯誤訊息
例如
http://ubuntuforums.org/showthread.php? ... st12929697
[UserAccounts]
minimum-uid=500
因此 常常建議新手 不要使用 root 登入 會碰到許多錯誤訊息

如果出現錯誤訊息 看看 uid 有沒有限制 是一個查詢的方向

root 是萬能的 什麼事都可以作 ?
等到真的失能的時候 在來看看 是什麼情況.
yangdawei.hit
帖子: 245
注册时间: 2015-01-02 15:32
系统: Debian

Re: sudo与root之间的区别

#6

帖子 yangdawei.hit » 2015-10-06 8:55

看来是由于不同的uid程序限制决定了root和sudo的区别。
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: sudo与root之间的区别

#7

帖子 vickycq » 2015-11-01 8:54

1. 错误信息提到 XCloseIM(),可能与输入法有关。下面链接中的帖子提到关闭输入法后启动ANSYS图形界面无报错。
http://www.hao007.net/bbs/viewthread.ph ... #pid179273

2. sudo 和 root / 普通用户相比,除了权限区别,运行环境(各类环境变量)也大不相同。
可以执行下面的命令,看区别:
2-1. 普通用户shell执行 printenv
2-2. 普通用户shell执行 sudo printenv
2-3. root shell 执行 printenv (通过 su 进入)
2-4. root login shell 执行 printenv (通过 su -l 进入)
在我这里,2-2 的环境比较简单,而 2-1 & 2-3 的环境比较复杂。
但限于对ANSYS这款软件的具体了解,不能确定是否与此有关。

也可用另一套权限管理工具 policykit(pkexec) 来启动软件,看是否正常?
如:pkexec ansys150 -g
发现 pkexec 默认提供的运行环境比 sudo 还要精简。

3. 回忆起以前在Linux下使用过科学计算软件IDL 7.1,同样出现过命令行模式(idl)正常,而图形界面(idlde)指令框无法输入任何文字的问题。因此怀疑原因是否相近。
此类跨平台大型科学计算软件的图形界面通常不使用流行的 GTK / Qt 图形库,而是使用 Tcl/Tk 和 java 等看上去较为‘原始’的库。怀疑两款软件都遇到了 Tcl/Tk 与输入法/中文环境的配合bug。
相关bug:
https://bugs.debian.org/170504
https://kldp.org/node/83467
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: sudo与root之间的区别

#8

帖子 vickycq » 2015-11-01 8:59

喔,刚看到开了新帖,内容已经迁移过去了。
viewtopic.php?f=122&t=473622
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: sudo与root之间的区别

#9

帖子 vickycq » 2015-11-02 17:15

问题已经解决
原因是 sudo 环境变量不完整,恰好解决了输入法和 Tcl/Tk 界面的冲突。
viewtopic.php?p=3147300#p3147300
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
回复