测试设置用户ID set-user-id
2016-07-30 12:27
369 查看
有进程相关的id:
实际用户id,有效用户id,设置用户id
及相应组id;
一般情况下,有效用户id等于实际用户id;
特殊情况下,执行一个可执行文件,进程有效用户id可以设置为可执行文件的所有者id;
代码如下:
编译生成可执行文件test
当前用户lanyang
测试文件/etc/passwd
测试文件/etc/shadow
切换到root用户
设置文件所有者为root
设置set-user-id位
查看test文件属性
退出root用户
现在用户是lanyang
再次测试/etc/shadow
结论:
可以看到access测试失败,而open测试通过;
原因:
access的测试是按照进程实际用户ID(在这里是lanyang)进行权限测试,文件所有者为root,无法通过权限测试;
open以有效用户ID进行测试,由于test文件设置set-user-id位,当用户lanyang执行test时,进程的有效用户ID被设置成文件所有者ID,也就是root,通过权限测试;
实际用户id,有效用户id,设置用户id
及相应组id;
一般情况下,有效用户id等于实际用户id;
特殊情况下,执行一个可执行文件,进程有效用户id可以设置为可执行文件的所有者id;
代码如下:
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <errno.h> int main(int argc, char *argv[]) { if (argc < 2) { printf("usage: test <pathname>\n"); return -1; } if (access(argv[1], R_OK) < 0) { printf("acess error for %s:", argv[1]); printf("%s\n", strerror(errno)); } else { printf("read access OK\n"); } if (open(argv[1], O_RDONLY) < 0) { printf("open error for %s:", argv[1]); printf("%s\n", strerror(errno)); } else { printf("open for Reading OK\n"); } return 0; }
编译生成可执行文件test
[lanyang@localhost work]$ gcc test_access.c -o test [lanyang@localhost work]$ ll total 12 -rwxrwxr-x. 1 lanyang lanyang 7373 Jul 30 11:41 test
当前用户lanyang
测试文件/etc/passwd
[lanyang@localhost work]$ ll /etc/passwd -rw-r--r--. 1 root root 1844 Jul 25 04:21 /etc/passwd [lanyang@localhost work]$ ./test /etc/passwd read access OK open for Reading OK
测试文件/etc/shadow
[lanyang@localhost work]$ ll /etc/shadow ----------. 1 root root 1129 Jul 25 04:21 /etc/shadow [lanyang@localhost work]$ ./test /etc/shadow acess error for /etc/shadow:Permission denied open error for /etc/shadow:Permission denied
切换到root用户
[lanyang@localhost work]$ su root Password:
设置文件所有者为root
[root@localhost work]# chown root test
设置set-user-id位
[root@localhost work]# chmod u+s test
查看test文件属性
[root@localhost work]# ll total 12 -rwsrwxr-x. 1 root lanyang 7373 Jul 30 11:50 test
退出root用户
[root@localhost work]# exit exit
现在用户是lanyang
再次测试/etc/shadow
[lanyang@localhost work]$ ./test /etc/shadow acess error for /etc/shadow:Permission denied open for Reading OK
结论:
可以看到access测试失败,而open测试通过;
原因:
access的测试是按照进程实际用户ID(在这里是lanyang)进行权限测试,文件所有者为root,无法通过权限测试;
open以有效用户ID进行测试,由于test文件设置set-user-id位,当用户lanyang执行test时,进程的有效用户ID被设置成文件所有者ID,也就是root,通过权限测试;
相关文章推荐
- APUE学习之三个特殊位 设置用户ID(set-user-ID),设置组ID(set-group-ID),sticky
- unix中的设置用户ID位——set-uder-ID
- su切换到用户user1报无法设置用户ID:资源暂时不可用错误
- Linux中的 real user, effective user, saved set user 三种用户ID
- su切换到用户user1报无法设置用户ID:资源暂时不可用错误
- su切换到用户user1报无法设置用户ID:资源暂时不可用错误
- 实际用户id(real user id)、有效用户id(effective user id)和保存的设置用户id(saved set-user-id)
- 用友U871用户增加User用户的设置方法
- 设置Netbeans的用户界面语言(Set Netbeans user interface language)
- linux进程的用户ID,有效ID,保存的设置ID
- linux 中实际用户ID”、“有效用户ID”和“保存的设置用户ID”三个术语
- 解决:Windows Server 2003 域中设置user用户后,该用户登录后无法使用服务器的共享文件夹
- linux 中实际用户ID”、“有效用户ID”和“保存的设置用户ID”三个术语
- 实际用户ID,有效用户ID和设置用户ID
- real user ID,effective user ID,saved set user ID
- 异机连接mysql时user表内的用户权限设置
- “实际用户ID”、“有效用户ID”和“保存的设置用户ID”的区别
- Set Netbeans user Interface language(NetBeans界面语言设置)
- 实际用户ID 有效用户ID 保存设置用户ID
- APUE学习笔记(5)-设置用户ID