linux为什么要有linux 修改用户名密码和用户ID

博客访问: 2357593
博文数量: 593
注册时间:
认证徽章:
10年ORACLE MYSQL DBA
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Linux
getuid()&实际用户ID为 执行程序的实际用户ID
geteuid()&有效用户ID与设置用户ID有关,及权限中的S位
如果权限为rws 那么s位代表其他用户执行程序时改变为主用户权限。不安全
& 8 #include&stdio.h&
& 9 #include&stdlib.h&
&10 #include &unistd.h&
&11 #include &sys/types.h&
&12 #include &sys/stat.h&
&13 #include &fcntl.h&
&15 int main(void)
&20 & & fd = open("abc", O_CREAT | O_RDWR | O_EXCL, 0777);
&21 & & if(fd==-1)
&23 & & & & perror("error:");
&25 & & printf("uid %ld,euid %ld\n",getuid(),geteuid());
程序放到root用户下,
-rwxr-xr-x & 1 root root &8762 Feb 16 05:16 a.out
当前gaopeng用户
如果在gaopeng用户下执行这个程序正常情况下报错
gaopeng@bogon:/$ ./a.out&
error:: Permission denied
uid 1000,euid 1000
如果设置了 设置用户ID 如下:
chmod 4755 a.out&
-rwsr-xr-x & 1 root root & & 8762 Feb 16 05:16 a.out
gaopeng@bogon:/$ ./a.out&
uid 1000,euid 0
可以看到设置用户ID为0即位超级用户,并且没有任何报错文件建立完成
设置这个位过后不需要SUDO就可以或者切换到root用户下就能执行程序。不安全
如果是sudo
gaopeng@bogon:/$ sudo ./a.out&
uid 0,euid 0
实际用户ID和有效用户ID都是 0
那么总结一下:
实际用户ID实际上是发起执行这个程序的用户ID
有效用户ID实际上是执行程序过程中,程序自身的用户ID,
如果没有设置S位实际上他是和实际用户ID一样的。
当然还有效用户组ID 组权限位也可以设置为S,和用户一样,执行时可以切换到其他组(如root组)用户权限下。
设置4***这里的4是设置用户s
设置2***这里的2设置组s
当然还有1为黏住位已经淘汰无用。
chmod 2755 a.out
-rwxr-sr-x & 1 root root &8762 Feb 16 05:16 a.out
chmod 4755 a.out
-rwsr-xr-x & 1 root root &8762 Feb 16 05:16 a.out
chmod 6755 a.out
-rwsr-sr-x 1 root root 8762 Feb 16 05:16 a.out
阅读(2724) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。最近在读《unix环境高级编程》,看到文件权限这里比较糊涂,主要设计多个用户ID和用户组ID,包括下面两个:
(1)实际用户ID和实际用户组ID:这一部分表示我们究竟是谁。这两个字段在登录时取自口令文件中的登录项。通常,在一个登录会话期间这些值并不改变,但是超级用户进程有办法改变他们。简单来说,实际用户ID是登录用户的uid,实际用户组Id是登录用户的gid。
(2)有效用户ID和有效用户组ID:这一部分用于文件的权限检查。一般情况下,有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID。当设置用户ID位(SUID)被设置时,有效用户ID等于文件所有者的uid而不是实际用户组ID;当设置用户组ID(SGID)位,有效用户组ID等于文件所有者的gid,而不是实际用户组ID。
下面在linux下测试上述结论:
在root超级用户下新建test.c文件,并编译生成test程序
#include "apue.h"
int main()
printf("uid=%d,gid=%d,euid=%d,egid=%d\n",getuid(),getgid(),geteuid(),getegid());
  查看文件属性
通过id命令查看当前登录用户为root。程序进程并未设置SUID和SGID,执行程序可以看出,实际用户ID,实际用户组ID都是0,有效用户ID,有效用户组ID也是0(等于实际用户ID,实际用户组ID)
下面修改test的用户和用户组,再看结果
结果没有发生变化,仍然是有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID(这是因为设置用户ID位SUID,设置用户ID位SGID没有被设置)
下面给test程序设置SUID
发现设置SUID位之后,test进程有效用户ID(1000)不等于实际用户ID(0)了,而是等于文件所有者的uid(yangang的uid为1000)
如果设置程序的SGID ,会出现类似的结果:
这样程序就只能访问只有yangang才能访问的资源
若文件的所有者是超级用户,而且设置了该文件的设置用户ID位,那么当该程序文件的一个进程执行时,该进程拥有超级用户权限。不管执行此文件的进程的实际用户是什么。例如passwd 命令允许任一用户改变其口令,该程序是一个设置用户ID的程序,因此该程序能将用户新口令写入口令文件中(只有超级用户才具有对该文件的写权限)。
阅读(...) 评论()bash语句的具体应用之“显示/etc/passwd文件中ID号最大的用户的用户名” | Linux运维部落
您还未登录,请登录后再进行相关操作!
400-080-6560
在线咨询:
工作时间:周一至周五,9:30-18:30,节假日同时也值班功能说明:查看显示目前登陆账户的uid和gid及所属分组及用户名
语法:id [-gGnru][--help][--version][用户名称]
补充说明:id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。
这个命令在溢出时经常用到,查看是不是溢出root成功,执行一下id命令,显示uid=0,则成功了。
-g或--group 显示用户所属群组的ID。
-G或--groups 显示用户所属附加群组的ID。
-n或--name 显示用户,所属群组或附加群组的名称。
-r或--real 显示实际ID。
-u或--user 显示用户ID。
-help 显示帮助。
-version 显示版本信息
[root@ ~]#id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[root@ ~]#su - linuxso
[linuxso@ ~]$id
uid=505(linuxso) gid=505(linuxso) groups=504(test),505(linuxso)

我要回帖

更多关于 linux 改用户名 的文章

 

随机推荐