免费注册 查看新帖 |

Chinaunix

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

请教一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-05 10:28 |只看该作者 |倒序浏览
请问,在程序里如何实现以其它身份运行,比如想写一个类似apache一样的服务,但希望它运行在特定的用户下,该如何实现?假设还希望在它运行时它还拥有相应用户的环境变量,又该如何实现?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2009-03-05 11:12 |只看该作者

回复 #1 justin764 的帖子

用你期望的用户启动它

论坛徽章:
0
3 [报告]
发表于 2009-03-05 11:18 |只看该作者
原帖由 MMMIX 于 2009-3-5 11:12 发表
用你期望的用户启动它


倒,请问你启动apache是否在root用户下执行 service httpd restart 呢?我需要的就是在root登录终端后执行能以其它身份运行的程序

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2009-03-05 11:35 |只看该作者
原帖由 justin764 于 2009-3-5 11:18 发表


倒,请问你启动apache是否在root用户下执行 service httpd restart 呢?我需要的就是在root登录终端后执行能以其它身份运行的程序

哦,这样啊,你不早说。这个的方法就是,“用你期望的用户启动它”,具体的做法如下:
切换到你希望的用户下(su, 或者类似的东西,如 setuid),加载初始化脚本(如环境变量,等),然后启动你的程序

当然,这是在脚本中的做法,在 C 中的做法参见 APUE2 相关章节。

[ 本帖最后由 MMMIX 于 2009-3-5 11:42 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-03-05 11:44 |只看该作者
原帖由 MMMIX 于 2009-3-5 11:35 发表

哦,这样啊,你不早说。这个的方法就是,“用你期望的用户启动它”,具体的做法如下:
切换到你希望的用户下(su, 或者类似的东西),加载初始化脚本(如环境变量,等),然后启动你的程序

当然,这是在脚本中 ...


在脚本中用su的做法并不十分理想,貌似su之后用户的环境变量并不能自动跟过去,而且程序退出之后,它会退出到su之后的用户下,如果脚本还没完,还有需要在另外用户下执行的另外程序,这个时候就不能执行。

C语言我不懂。我开头就说了,我想知道perl中是如何实现的。

论坛徽章:
0
6 [报告]
发表于 2009-03-05 11:46 |只看该作者
原帖由 MMMIX 于 2009-3-5 11:35 发表

哦,这样啊,你不早说。这个的方法就是,“用你期望的用户启动它”,具体的做法如下:
切换到你希望的用户下(su, 或者类似的东西,如 setuid),加载初始化脚本(如环境变量,等),然后启动你的程序

当然, ...


如果有perl中如何实现的资料最好了,我手头资料比较有限,没找到相关章节

论坛徽章:
0
7 [报告]
发表于 2009-03-05 13:05 |只看该作者

回复 #5 justin764 的帖子

su - username试试看呢?

论坛徽章:
0
8 [报告]
发表于 2009-03-05 13:08 |只看该作者
原帖由 shaneqi 于 2009-3-5 13:05 发表
su - username试试看呢?


不行的,结果如前所述。su的man 读过了,解决不了。

论坛徽章:
0
9 [报告]
发表于 2009-03-06 10:23 |只看该作者
你google 一下 perl daemon 的文章

论坛徽章:
0
10 [报告]
发表于 2009-03-06 11:18 |只看该作者

回复 #1 justin764 的帖子

`su $user -c "perl script.pl"` if $user;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP