下面是小编整理的有关uid问题的一些看法Unix系统(共含6篇),希望能帮助到大家!同时,但愿您也能像本文投稿人“野鸡脖子”一样,积极向本站投稿分享好文章。
/********************************* /*有关uid的几个问题的思考 /* by Patrick /* -7-29 /* /* /*ps:这篇文章是个人学习的笔记 /*如果您可以从中获益,可以随意复制 /********************************* /**************************************** 如
/*********************************
/*有关uid的几个问题的思考
/* by Patrick
/* 2004-7-29
/*
/*
/*ps:这篇文章是个人学习的笔记
/*如果您可以从中获益,可以随意复制
/*********************************
/****************************************
如果当前进程具有超级权限
则:
调用setuid(uid)时,该进程可以将自己的:实际用户id,有效用户id,保存的set-user-id设置成其参数uid的值,
既是说,特权用户进程可以将自己改变成任意进程。
如果当前进程是非特权用户
则:
调用setuid(uid)时,如果uid是其实际用户id或保存的set-user-id,就把有效用户id设置成uid的值;如果uid不等于这两个值则将errno设置成EPERM(可供用perror()使用),并出错返回。
既是说,非特权用户不能随意改变自己,这里涉及到保存的set-user-id,所以后面再详细说。
/****************************************
一个系统启动后,用户从login登录后,会产生一个用户进程,该进程和所有进程一样有七个id值:
实际用户id,有效用户id,保存的set-user-id
实际组id,有效组id,添加组id,保存的set-group-id
这里只说uid的问题,这3个uid来自我们登录名。
(这中间的创建过程我想明白再说)
至此我们有了一个用户shell进程,当执行程序时,通常由fork+exec族函数来做。
由用户进程fork出来的子进程继承父进程的实际uid,和有效uid值(还要继承一些东西,在此先屏蔽掉),子进程再调用exec族,调用时:
如果文件的set-user-id没有置位(st_mode中),那这个子进程的实际uid,有效uid不变,保存的set-user-id从有效用户id复制。
如果文件的set-user-id置位,那这个子进程的实际uid不变,有效uid设置为程序文件的用户id,保存的set-user-id从有效用户id复制。
文件的set-user-id位应该只能由所有者置位,特权用户可以置位所有文件。
/*************************************
说一下正常setuid函数的作用:
引用APUE上的例子(经过简化改遍):
有一个文件A所有者为root,我们需要对它进行操作,但该文件只允许root操作。
所以系统又提供一个程序用来操作这个文件,该程序通过给定的几个受限操作来限制用户,并且所有者为root,且set-user-id置位。
1),那我们执行次程序后进程中:
实际用户id=普通
有效用户id=root
保存的set-user-id=root
2),程序去操作文件A,因为程序有效用户id是root,所以可以操作,
3),然后程序执行setuid(getuid()),此时进程:
实际用户id=普通
有效用户id=普通
保存的set-user-id=root
此时进程就不再有特权。
4),当执行完一些操作后又要操作文件A,则程序执行setuid(rootid),这里的rootid是程序保存的rootid,可以通过复制进程的保存的set-user-id得来。此时进程:
实际用户id=普通
有效用户id=root
保存的set-user-id=root
5),现在程序又可以操作文件A了
综述:有效用户id在需要时变成特权id,不需要时通过setuid(getuid())变回实际用户id,失去特权,这样特权uid只用在最需要的时候,可以一定程度增强安全性。可以想象如果文件A是一个锁,经历这5部刚好是:加锁--操作--解锁的过程(实际APUE上也是将文件A说成是一个锁,我将它简化了)。事实上用户对密码的修改也是这样做的。
/****************************************
再说一下setuid的非正常作用:
一个普通用户如果想写一个程序,里面包括了setuid(uid)函数,并将其set-user-id置位,那么即使执行自己这个程序,他也扩展不了权限,因为执行程序时,用户进程的几个uid都是自己,执行程序后,实际用户id还是被置为自己,到程序中的setuid(uid)时setuid()的uid只能来自该进程的实际uid和保存的set-user-id,这个函数的这个特性就限制了当前非特权进程不能通过自己来越权。
但是如果有一个程序,它的所有者是root,且有缓冲区溢出问题,且文件的set-user-id位被root置位,那么普通用户执行这样的程序时,实际用户id被设置成root,当前进程的三个uid分别为:实际用户id为普通用户,有效用户id为root,保存的set-user-id为root,此时如果通过改变进程的流程,去执行一个程序,那么它将以root的身份执行这个程序,因为很多程序是通过检查有效用户id(不是实际用户id)识别用户身份。
/*********************************************
有关改变进程流程可以去google搜索相关资料,个人认为主要是因为目前系统的内存分配问题,具体就是堆栈共享一处内存:
-------------------内存高址
栈低固定
.
.
.
------------------<-栈顶
.
.
.
堆区
-------------------
数据段
-------------------
文本段
-------------------内存低址
/* THE END */
/***************By Patrick*****************/
有关UNIX系统中的uid问题的一些见解和学习记录
难免有错,欢迎指正!
原文转自:www.ltesting.net
文件与目录权限中的set uid ;set gid;sticky bit 一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组. 如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具
文件与目录权限中的set uid ;set gid;sticky bit一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组.
如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置.
setuid: 设置使文件在执行阶段具有文件所有者的权限. 典型的文件是 /usr/bin/passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root权限, 从而可以更改用户的密码.
setgid: 该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.
sticky bit: 该位可以理解为防删除位. 一个文件是否可以被某用户删除, 主要取决于该文件所属的组是否对该用户具有写权限. 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky bit位. 设置该位后, 就算用户对目录具有写权限, 也不能删除该文件.
下面说一下如何操作这些标志:
操作这些标志与操作文件权限的命令是一样的, 都是 chmod. 有两种方法来操作,
1) chmod u+s temp -- 为temp文件加上setuid标志. (setuid 只对文件有效)
chmod g+s tempdir -- 为tempdir目录加上setgid标志 (setgid 只对目录有效)
chmod o+t temp -- 为temp文件加上sticky标志 (sticky只对文件有效)
2) 采用八进制方式. 对一般文件通过三组八进制数字来置标志, 如 666, 777, 644等. 如果设置这些特殊标志, 则在这组数字之外外加一组八进制数字. 如 4666, 2777等. 这一组八进制数字三位的意义如下,
abc
a - setuid位, 如果该位为1, 则表示设置setuid
b - setgid位, 如果该位为1, 则表示设置setgid
c - sticky位, 如果该位为1, 则表示设置sticky
设置完这些标志后, 可以用 ls -l 来查看. 如果有这些标志, 则会在原来的执行标志位置上显示. 如
rwsrw-r-- 表示有setuid标志
rwxrwsrw- 表示有setgid标志
rwxrw-rwt 表示有sticky标志
那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)
要删除一个文件,你不一定要有这个文件的写权限,但你一定要有这个文件的上级目录的写权限,
set uid, set gid,sticky bit详解Unix系统
,
也就是说,你即使没有一个文件的写权限,但你有这个文件的上级目录的写权限,你也可以把这个文件给删除,而如果没有一个目录的写权限,也就不能在这个目录下创建文件。
如何才能使一个目录既可以让任何用户写入文件,又不让用户删除这个目录下他人的文件,sticky就是能起到这个作用。stciky一般只用在目录上,用在文件上起不到什么作用。
在一个目录上设了sticky位后,(如/tmp,权限为1777)所有的用户都可以在这个目录下创建文件,但只能删除自己创建的文件,这就对所有用户能写的目录下的用户文件启到了保护的作用。(我当时/tmp没有设sticky位,而在文件上设了,这也就是为什么我为什么设了sticky位,还能删除自己创建的文件的原因了)
原文转自:www.ltesting.net
最近在工作中,经常会因为各种系统的访问问题,而遇到很多的权限问题,所以系统的了解下windows 系统的权限问题,也是挺好的,方便解决一些配置问题。
DOS跟WinNT的权限的分别
DOS是个单任务、单用户的操作系统。但是我们能说DOS没有权限吗?不能!当我们打开一台装有DOS操作系统的计算机的时候,我们就拥有了这个操作系统的管理员权限,而且,这个权限无处不在。所以,我们只能说DOS不支持权限的设置,不能说它没有权限。随着人们安全意识的提高,权限设置随着NTFS的发布诞生了。
WindowsNT里,用户被分成许多组,组和组之间都有不同的权限,当然,一个组的用户和用户之间也可以有不同的权限。下面我们来谈谈NT中常见的用户组。
Administrators,管理员组,默认情况下,Administrators中的用户对计算机/域有不受限制的完全访问权。分配给该组的默认权限允许对整个系统进行完全控制。所以,只有受信任的人员才可成为该组的成员。
PowerUsers,高级用户组,Power Users 可以执行除了为 Administrators 组保留的任务外的其他任何操作系统任务,
分配给 PowerUsers 组的默认权限允许 Power Users 组的成员修改整个计算机的设置。但Power Users 不具有将自己添加到 Administrators组的权限。在权限设置中,这个组的权限是仅次于Administrators的。
Users:普通用户组,这个组的用户无法进行有意或无意的改动。因此,用户可以运行经过验证的应用程序,但不可以运行大多数旧版应用程序。Users组是最安全的组,因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料。Users 组提供了一个最安全的程序运行环境。在经过 NTFS格式化的卷上,默认安全设置旨在禁止该组的成员危及操作系统和已安装程序的完整性。用户不能修改系统注册表设置、操作系统文件或程序文件。Users可以关闭工作站,但不能关闭服务器。Users 可以创建本地组,但只能修改自己创建的本地组。
Guests:来宾组,按默认值,来宾跟普通Users的成员有同等访问权,但来宾帐户的限制更多。
Everyone:顾名思义,所有的用户,这个计算机上的所有用户都属于这个组。
其实还有一个组也很常见,它拥有和Administrators一样、甚至比其还高的权限,但是这个组不允许任何用户的加入,在察看用户组的时候,它也不会被显示出来,它就是SYSTEM组。系统和系统级的服务正常运行所需要的权限都是靠它赋予的。由于该组只有这一个用户SYSTEM,也许把该组归为用户的行列更为贴切。
最后,经常用的是Run as administrator。需要继续深入了解啊。。前面的一些分组,之后也该去深入了解更具体。先说个大概了。。
:?:1.如何扩展机器的虚拟内存,使用双屏时占用很多内存,经常运行一段时间后把内存耗光,请问各位怎样才能扩展内存? :?:2.系统分区有一个/proc是起什么作用的?分区时没分这个空间,有什么影响吗? 谢谢各位了!:oops: 飞天二狭 回复于:-10-04 16:06:5
:?: 1.如何扩展机器的虚拟内存,使用双屏时占用很多内存,经常运行一段时间后把内存耗光,请问各位怎样才能扩展内存?
:?: 2.系统分区有一个/proc是起什么作用的?分区时没分这个空间,有什么影响吗?
谢谢各位了! :oops:
飞天二狭 回复于:2004-10-04 16:06:571.增加交换区不能用文件做交换区,只能用文件系统做 :D
:D tru64 4.0
如果增加/dev/rz1b为swap分区
swapon /dev/rz1b
同时要修改/etc/fstab文件,
tru64 5.1
如果增加/dev/disk/dsk1b为swap分区
swapon /dev/disk/dsk1b
同时要修改/etc/sysconfigtab文件
2.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间,
它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。分区时是没有这个空间的。
:mrgreen: :mrgreen: :mrgreen: :mrgreen:
richard_cn 回复于:2004-10-05 10:23:21:lol: 楼上的兄弟,谢谢了! :D
sinboy 回复于:2004-10-11 19:02:40谢谢,真是受益匪浅
原文转自:www.ltesting.net
一:重新启动电脑,或在开机时按住option键不松手,(注意,苹果机上叫这个名字,兼有alt的功能)等出现系统选择界面时,可以用鼠标或键盘选择苹果的系统,然后可以进去苹果系统,在苹果系统里切加windows 可以在苹果菜单-系统偏好-启动磁盘里选择.
二,在windows里打开控制面板-bootcamp-启动磁盘,这里和右下角的打开是一样的,
苹果电脑切换系统问题
,
如果这里也没有bootcamp了,那可以拿苹果系统光盘在windows下重装一下bootcamp。
关于前几天B80安装问题终于搞定了,
hehe.不过不是我,是IBM来人弄得。他先把微码给升级了,我感觉就像升级BIOS,
呵呵。然后再进F1的界面,就不是图形的了。是文字的了。然后同样操作步骤,就可以安装了。安装还是比较简单的。也没什么选项,不过中间有一个选成默认的了,就不是全新安装了,成升级了。安装后,所有系统信息啊,文件啊。都没变。呵呵。将就着算成功吧。这几天可以玩一玩了。~~~~~~~~哈哈哈哈哈哈哈哈
原文转自:www.ltesting.net
★ 看法调查报告
★ 对钓鱼岛的看法