免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7084 | 回复: 2
打印 上一主题 下一主题

请问su后如何取得当前的用户名 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2008-08-30 15:35 |显示全部楼层
原帖由 wangfeiyue 於 2008-8-30 13:03 發表
如題,普通用戶登錄,shell中su成root, who am i仍然顯式的是普通用戶名。如何知道是root登錄或得到用戶名?

不管shell腳本或程序


這邊可能有幾個東西要確認清楚。

首先 who am i 與 whoami 是不同的命令與輸出,所以不可以混為一談。

whoami 是顯示 effective user id,而你使用 who am i 是顯示目前該自己用的終端機該使用者資訊。用 su 命令切換當然 terminal 不會變動,所以 who am i 一定還是看到原本登入的帳號資訊。

另外不管是 su 還是 su -,real 與 effective user id 都會切換過去,所以 2 樓回答有誤導的嫌疑。是否多傳入 - 參數,只是表示啟動 shell 是否用 login shell 方式啟動而已。

所以拉回來問題,原作者你只是用 "whoami" 這個指令就可以知道目前切換過去目的的身份就可以了。

--

论坛徽章:
0
2 [报告]
发表于 2008-08-30 23:54 |显示全部楼层
原帖由 wangfeiyue 於 2008-8-30 23:43 發表
沒辦法,當時碰到了想在腳本中判斷運行他的用戶是不是root的問題,不知道有個id命令,又試了個不合適的who am i這個命令。能man的只有su了,而su的man也看不到什麼相關參數。在發此帖前也用「取得當前用戶名 ...


為何很困難呢 ??

若你只是要判斷目前登入帳號身份是否有 root 身份,shell script 不就類似是這樣判斷 ?


  1. if [ "$(whoami)" == "root" ]; then
  2.    echo "You are root"
  3. else
  4.    echo "You are not root"
复制代码


whoami 預設是輸出顯示 effective user id,所以只要是 root 那就表示具備有特權。

若是要使用 id 判斷的話也可以,預設還是輸出 effective id 資訊,所以也是可以判斷。 若你認為 EUID 要為 0 更保險,那就這樣用:


  1. if [ "$(id -u)" -eq "0" ]; then
  2.    echo "You are root"
  3. else
  4.    echo "You are not root"
复制代码


若你是 c/c++ coding 的項目,那請使用 geteuid() 取得 return code,為 0 就表示 effective user id 數值為 0。

所以問題繞回來其實不需跑這樣遠。

--

论坛徽章:
0
3 [报告]
发表于 2008-08-31 02:23 |显示全部楼层
我想您可能誤解我的意思

前面回文內已經不少文章告知可以用 id 與 whoami 了,這已經是提供一個答案與方向,也有談到 "who am i" 這個與 "whoami" 是不同的命令使用。而後續您回文內還是說有點問題,所以才再次貼了一篇直接使用 id 與 whoami 這類例子給你參考,希望能夠透過這些現成的代碼告訴您判斷不複雜。

文章內如有冒犯請多見諒。

--

[ 本帖最后由 kenduest 于 2008-8-31 02:28 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP