当前位置: 首页 > news >正文

怎么做盈利的网站绍兴网站建设方案策划

怎么做盈利的网站,绍兴网站建设方案策划,扬中论坛网,杭州 电子商务网站建设system()函数的声明和说明如下#xff1a; 注意它的描述那里#xff0c;system()执行一个由command参数定义的命令#xff0c;通过调用/bin/sh -c命令来实现这个功能。也就是说它的逻辑是这样的#xff01; 进程调用system函数#xff0c;system函数调用fork创建一个子进程…  system()函数的声明和说明如下      注意它的描述那里system()执行一个由command参数定义的命令通过调用/bin/sh -c命令来实现这个功能。也就是说它的逻辑是这样的   进程调用system函数system函数调用fork创建一个子进程然后再调用exec函数来把这个子进程的正文段替换成/bin/sh命令的正文段。然后再由sh来执行exec将程序的正文段替换成command参数所代表的命令的正文段例如我的一个程序a.out来调用system函数来执行sleep 20命令它的进程示意图如下所示      可以参考下面这个例子如下图所示   这里我执行了一个system文件产生了两个进程3994和3995右边那个终端所示第一列是PPID第二列是PID这两个进程是父子关系值得注意的是这两个进程进程ID是连着的也就是说在这两个进程执行的时候没有新的进程产生。   接下来开始扯正题在《APUE》UNIX环境高级编程下文不再赘述的8.13节中作者强调SUID和SGID程序中不应该调用system函数。为什么呢我个人的理解是这样的。   以SUID权限为例SUID这种权限设立的目的是什么就是提供一种可控的超级权限。比如passwd命令运行passwd这个程序后进程的有效用户ID是root理论上可以为所欲为即对shadow这个文件想怎么改就怎么改但是passwd程序的代码已经被写死了用户所做的操作都要经过passwd这个程序的检验符合标准了才能够进行否则程序就会提示出错也就是说不能像vim那样随意对shadow文件进行更改只能在某种规范下进行更改。   同时这种权限应该是有限制的不能够进行任意传播。比如像man这种能够执行shell命令的程序它执行shell命令就是通过fork-exec机制来执行了在某些distribution中有一个man用户man程序属于这个用户并且设置了SUID位。也就是说我任意一个普通用户运行man程序后的有效用户都是man如果此时这个普通用户在man程序中执行shell命令的话这个shell命令进程的有效用户应不应该是man呢设置用户ID应不应该继续保留呢当然不行啦这样的话一个普通用户不就能够通过这种方式来具有了man用户的权限了如果保留了设置用户ID那么在子进程中可以调用setuid函数来使进程的有效用户ID变成设置用户ID同样能达到上面所说的目的   OK上面说的这么一大串就是为啥SUID或者SGID程序不应该调用system函数来执行一个shell命令因为这样会传播进程的设置用户ID和有效用户ID将它传递给子进程这样就会产生bug了。理论上是这样的但是实际中我发现貌似不行我的centos6.6上就不能模拟出这个bug来比如我有这么一段程序   getresuid程序的代码如下 1 /* 这个程序的作用是获取进程的三个用户ID它的可执行文件被做了一个软链接到/home/michael/bin下面2 * */3 #includeerrno.h4 #includestring.h5 #includestdlib.h6 #includestdarg.h7 #includestdio.h8 #includesys/types.h9 #includeunistd.h 10 #define BUFSIZE 512 11 void err_exit(char *fmt,...); 12 int main(int argc,char *argv[]) 13 { 14 uid_t ruid,euid,suid; 15 16 if(-1 getresuid(ruid,euid,suid)) 17 err_exit([getresuid]: ); 18 printf(real:%d\teffective:%d\tset-user:%d\n,ruid,euid,suid); 19 20 return 0; 21 }   system程序的代码如下 1 #includestdlib.h2 #includestdio.h3 int main(int argc,char *argv[])4 {5 uid_t ruid,euid,suid;6 7 if(-1 getresuid(ruid,euid,suid))8 err_exit([getresuid]: );9 printf(real:%d\teffective:%d\tset-user:%d\n,ruid,euid,suid); 10 11 system(getresuid); 12 return 0; 13 }   这个system程序的功能就是首先输出进程的real uideffective uid和set-user id然后再来通过system函数调用getresuid程序再来把这三个uid输出一遍我把system这个可执行文件变成root所有并加上suid权限执行的结果如下图      第一个uid的输出结果是符合预期的即由于SUID权限位的设置有效用户ID是0。但是后面第二个uid的输出却和想象的有点不同理论上system函数应该是能够传递set-user ID和有效用户ID给子进程的但是这里三个UID全部都变成了500没一个是root这个可能是因为system函数在exec之前将所有三个UID都变成了实际用户ID或者是sh命令在exec之前将所有三个UID都变成了实际用户ID。   照这么看来貌似在SUID程序中调用system函数也未尝不可但是为了保险起见还是自己通过fork和exec动手来实现一个system吧然后在exec之前把三个UID都设置成实际用户ID。转载于:https://www.cnblogs.com/bwangel23/p/4239889.html
http://www.yutouwan.com/news/236817/

相关文章:

  • 律师个人网站建设SEO网站建设全方位部署
  • 个人建设网站成本wordpress for linux
  • 中小企业网站建设济南兴田德润厉害吗机械加工网瓦房北方机床附件厂
  • 域名服务网站建设科技公司wordpress网站克隆
  • 怎么做网站平台教程可以建设彩票网站吗
  • 国外电子政务j建设与我国电子政务网站建设对比俄语网站建站
  • 网站建设找伟杨科技ios企业开发者账号
  • 官方网站是什么怎样做克隆网站
  • 上海团购网站建设全国十大摄影培训机构
  • 高端企业网站定制公司湖南土特产销售网网站建设制作
  • 做文艺文创产品的网站网站的建设与颜色搭配
  • 唯品会网站架构种子网站模板
  • 做网站应选那个主题青海网站建设公司哪家好
  • 网站首页图片分辨率江津区做网站
  • 东莞手机网站价格便宜北京时代 网站建设
  • 广州番禺桥南做网站深圳网站建设哪个好
  • 网站建设需要哪些语言食品网络营销策略方案
  • html5素材网站微信商城软件开发
  • iis不能新建网站有做足球裁判跑动数据的网站吗
  • 企业做网站怎么做上海网络技术有限公司
  • 网站备案 接入商备案4399小游戏网页版在线玩
  • 动易会提示模版文件"默认网站首页问答模板.html"找不到报价单模板英文
  • 包包网站建设可行性分析注册一个网站多少钱?
  • 网站建设论文3000vue网站开发实例
  • 博客网站模板有哪些网站优化 价格
  • 网站建设及推广好学习吗知名商业网站有哪些
  • 网站是每年都要付费吗网上商城系统流程图
  • 深圳网站建设软件开发做请帖的网站
  • 深圳罗湖做网站的公司哪家好网站怎么建站点
  • 做网站的内容样本公众号里原文单发到dede网站上