免费注册 查看新帖 |

Chinaunix

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

[C] 请问c中如何获取其他用户环境变量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-26 21:56 |只看该作者 |倒序浏览
在Linux C 中如何获取其他用户环境变量?

在程序中,我需要切换到其他用户身份执行操作(已执行果setgid和setuid成功),但切换后发现用户环境变量仍然是原用户环境变量,请问,如何获取其他用户环境变量?

或者说如何在切换用户时连环境变量也切换过去?

谢谢

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2008-04-26 21:58 |只看该作者
关键,什么叫其他用户的环境变量??

论坛徽章:
0
3 [报告]
发表于 2008-04-26 22:38 |只看该作者
环境变量是从父进程继承过来的,其他用户的环境变量是啥?

论坛徽章:
0
4 [报告]
发表于 2008-04-27 01:45 |只看该作者
原帖由 cugb_cat 于 2008-4-26 22:38 发表
环境变量是从父进程继承过来的,其他用户的环境变量是啥?


是这样的,比如我原来身份是root, uid 、gid 是0,自有一些环境变量,比如环境变量USER的值就是ROOT,
我想在程序中切换到其他用户,例如用户guest,uid 500,gid 500,
我先setgid(500)切换gid,再setuid(500)切换uid,
但此时的环境变量还是root身份时带入的环境变量,比如环境变量USER就还是root,而不是新的guest,

我想问的就是有什么方法把原环境变量清除(这个应该是比较好弄的)并且切换到或者设置成新用户的环境变量?(这一步感觉比较难,现在还没想到什么办法-_-)

论坛徽章:
0
5 [报告]
发表于 2008-04-27 07:23 |只看该作者
1,可能有默认值。
2,读配置文件。

论坛徽章:
0
6 [报告]
发表于 2008-04-27 09:16 |只看该作者
原帖由 lex.reiter 于 2008-4-27 01:45 发表


是这样的,比如我原来身份是root, uid 、gid 是0,自有一些环境变量,比如环境变量USER的值就是ROOT,
我想在程序中切换到其他用户,例如用户guest,uid 500,gid 500,
我先setgid(500)切换gid,再 ...

类似USER这些环境变量是shell的,shell有默认的一些环境变量,并且可以在.bashrc中指定,这些环境变量不是随用户而存在的,是随shell而存在的。

论坛徽章:
0
7 [报告]
发表于 2008-04-27 09:38 |只看该作者
在超级用户环境下,使用命令“su -l <用户名> ...”来实现。
如果参数仅有“-l <用户名>”,那么就以“<用户名>”的身份登录到那个帐户,环境变量也随之变更。
如果在“-l <用户名>”参数后再接着“-c”参数,那么就会以那个用户的身份执行参数后跟着的命令串,然后退出到原来的超级用户身份。
在C中最好不要随意变更身份,那样很容易引入安全问题。

[ 本帖最后由 longshort 于 2008-4-27 09:48 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP