网站开发技术

记点笔记、 学点技术 欢迎交流建站技术。本站关注lamp技术

您尚未登录。

#1 2014-12-09 10:38:55

admin
管理员

linux suid 权限示例

[ipbbs@cloud home]$ pwd
/home
[ipbbs@cloud home]$ whoami
ipbbs
[ipbbs@cloud home]$ useradd zhangsan
bash: /usr/sbin/useradd: 权限不够

在 home 目录下用户 ipbbs 执行添加用户命令, 没有权限

在home目录下创建一个文件

用root 用户创建一个文件 test.sh

#!/bin/bash

useradd zhangsan

然后添加可执行权限 , 还是使用root用户

chmod 777 test.sh

添加suid 权限

 ls -al test.sh
-rwsrwxrwx. 1 root root 30 12月  9 09:41 test.sh

可以看到s为已经添加了, 切换到 用户ipbbs 

执行依然没有权限。 


因为  这个权限仅仅对二进制文件有效。

############

正确的示例应该是用个二进制文件来测试。

首先用root用户创建两个文件, 一个是 txt.txt , 一个是 a.c

txt.txt

this is test

a.c , 读取文件 /home/txt.txt 并打印

#include <stdio.h>

int main() {
    FILE *f;
    char c;

    f = fopen("/home/txt.txt", "r");

    if(f) {
        c = fgetc(f);
        while (c != EOF) {
            printf("%c", c);
            c = getc(f);
        }
    } else {
        printf("open fail\n");
    }

    return 0;

}

编译生成 a.out 文件

gcc a.c

首先用root运行一下

# ./a.out
this is test

读取文件正常, 说明程序没有文件, 修改 txt.txt 的权限为 600

chmod 600 txt.txt

使用用户ipbbs运行

# su ipbbs
$ ./a.out
open fail

发现不能打开。

用root用户修改权限

 chmod u+s a.out

使用用户 ipbbs 运行

 ./a.out
this is test

正常读取了。


ipbbs.net

离线

页脚

Powered by FluxBB