|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
开发linux发行版的人都是通读过linux内核代码,对linux原理极其精通的人。
Linux为每一个历程设置了3个ID:实践用户id,无效和用户id和保留的设置id
关于这3个id,必要注重以下几个方面:
1.只要root才干改动历程的实践用户id。比方,用户从终端login程序上岸,此时login程序的3个id都是root。然后准确输出用户名暗码以后,login程序因而setuid到注册的id。因而3个id都被改成了注册的用户id。然后execshell程序。非root用户注册进进shell以后,他的实践用户id是相对不会被变动的。除非logout以后,从头注册shell。一些su改动用户的操纵实践上都是改动shell历程的无效用户id,并非shell历程的实践用户id。
2.exec程序时,可实行文件有一个设置id位,该位的设置与否与历程的无效用户id和保留的设置id有很年夜干系。能够用ll命令检察,假如有s标志的话申明设置了,不然没有。起首没有设置的情形,3个id均不会改动和挪用者的历程的id一样。如今是设置了的情形,实践用户id仍旧不会改动,无效用户id则设置为可实行文件的属主用户,保留的设置id设置成无效用户id一样。如许的程序有良多,好比passwd,su等。比方,passwd程序,一个一般用户foo经由过程shell实行passwd,起首shell历程fork发生一个子历程,然后子历程execpasswd程序。因为passwd设置了设置id位,而且passwd是属于root用户。因而子历程设置无效用户id位为root,保留的设置用户id也设置成了root。passwd实行终了时,再改动无效用户id和保留的设置用户id为之前的实践用户id的值。
3.保留的设置-用户-ID是由exec从无效用户ID复制的。在exec按文件用户ID设置了无效用户ID后,即举行这类复制,并将此正本保留起来
</p>
使用gcc或g++进行编译,使用gdb进行调试; |
|