UID:真实的用户ID 进程的UID就是其创建者的用户ID,用于标识进程的属主。 EUID:有效的用户ID
(1)只有进程的创建者和root用户才有权利对该进程进行操作。于是,记录一个进程的创建者(也就是属主)就显得非常必要。 (2)EUID,用来确定进程对某些资源和文件的访问权限。在大多数情况下,进程的UID和EUID是一样的 —— 除了著名的setuid程序。 (3)什么是setuid程序? 例如:passwd命令,这个命令允许用户修改自己的登录口令。但是密码保存在/etc/shadow文件中,这个文件对普通用户是不可读的,那么用户怎么能够通过修改shadow文件来修改自己的口令呢?这就是setuid的妙处了。 setuid通过使passwd在执行阶段具有文件所有者(也就是root)的权限,让用户临时有了修改shadow文件的能力(当然这种能力是受到限制的)。因此,passwd就是一个经典的setuid程序,其UID是当前执行这个命令的用户ID,而EUID则是root用户的ID(也就是0)。
例子:
从上面
既然这个文件是root可读写,那非root用户修改密码要怎么办呢? 这时候就要说的suid了,当非root用户调用passwd修改密码时,此时的euid将会变为passwd的拥有者用户,即root用户,这样就可以修改密码了。 与其说suid是一个id,不如说它是文件的一个标志,它标志着这个可执行文件在执行时的euid将会被修改为它拥有者的uid。
|
4代表r 2代表w 1代表x
有点小迷糊?????
ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名。 Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是很方便。 如果要使用此命令,可以作如下修改: 参考:
改变文件权限:chmod 牢记只有文件的属主和root用户才有权修改文件的权限。 chmod可以用于改变一个文件的权限。这个命令使用“用户组+/-权限”’的表述方式来增加/删除相应的权限。 具体来说,用户组包括了文件属主(u)、文件数组(g)、其他人(o)和所有人(a); 而权限则包括了读取(r)、写入(w)和执行(x)。 (执行:将文件装入内存并执行)(操作系统上看到的)
$chmod u+x days 增加属主对文件days的执行权限 $chmod a-x days 删除所有人(属主、数组和其他人)对days的执行权限 (a表示所有人) $chmod 711 days 将文件days的所有权限赋予属主,而数组用户和其他人仅有执行权限 通过“用户组=权限”的规则直接设置文件权限 $chmod ug=rw,o=r days 赋予属主和数组的读取/写入权限,而仅赋予其他用户读取权限 “用户组1=用户组2”,用于将用户组1的权限和用户组2的权限设为温泉相同 $chmod o=u days 将其他人的权限设置为和属主的权限一样
getuid()用来取得执行目前进程的用户识别码 函数返回一个调用程序的真实用户ID
上述图片参考老师上课课件
|