Linux-各种uid

OCaml智者
• 阅读 1891

Linux-各种UID

一、UID

UID是系统中用来表示用户的标识符,启动的进程的uid就是当前登录用户的uid,查看用户uid可使用id -u <username>命令

需要注意的是,权限检查的时候是对euid检查,通常情况下进程的euid是和uid相同的。

二、EUID

euideffective user id ,有效用户ID。

euid作用

用于文件访问检查,euid和决定了进程是否有访问某个文件的能力。例如,编写下面代码:

/* testeuid.c */
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main(int argc, char * argv[])
{
    if (argc != 2)
        return 0;
    printf("uid: %d\teuid: %d\n", getuid(), geteuid());
    printf("trying to open %s\n", argv[1]);
    int fd = open(argv[1], O_RDONLY);
    if (fd < 0)
        perror("open");
    else
        printf("success\n");
    return 0;
}

编译并运行

Linux-各种uid
上述执行过程中,将a.file拥有者改为root并修改访问权限为root只读后,我以eureka用户的身份无法访问该文件。

三、SUID

看APUE发现自己对suid不是特别了解,查资料之后明白了,记录如下。

参考文章:

what is suid

上面链接中的文章说的很准确,SUID即(Set Owner User ID up on execution)

在执行时设置为所有者ID,一个例子就是/usr/bin/passwd这个可执行文件。

$ ls /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 May 17  2017 /usr/bin/passwd

从上面passwd的属性可以看到,权限位中有个s,这就是suid。

passwd这个命令是用来修改密码的,而密码文件是/etc/shadow,且查看密码文件的属性可以看到它的拥有者是root,root可读写,用户组可读的。

/tmp $ ls -l /etc/shadow                                                            │
-rw-r----- 1 root shadow 1711 Mar 30 17:00 /etc/shadow

既然这个文件是root可读写,那非root用户修改密码要怎么办呢?

这时候就要说的suid了,当非root用户调用passwd修改密码时,此时的euid将会变为passwd的拥有者用户,即root用户,这样就可以修改密码了。

与其说suid是一个id,不如说它是文件的一个标志,它标志着这个可执行文件在执行时的euid将会被修改为它拥有者的uid。

下面编程实验:

/* testsuid.c */
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main(void)
{
    printf("uid: %d euid:%d", getuid(), geteuid());
}

编译后执行

Linux-各种uid

上面的chmod u+s是给文件加上usid标志,而从上面的结果可以看出进程的uid和euid是可以不同的。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
redis的HyperLogLog实战
序本文主要研究一下redis的HyperLogLog的用场相关命令pfadd每添加一个元素的复杂度为O(1)127.0.0.1:6379pfadduv0907uid1uid2uid3(integer)1添加元素到HyperLogLog中,如果内部有变动返回1,没有
Wesley13 Wesley13
3年前
HQL练习1
表结构:uid,subject\_id,score求:找出所有科目成绩都大于某一学科平均成绩的用户建表语句createtableifnotexistsscore(uidstring,subjectstring,scoreint)rowformatdelimitedfieldsterminat
Stella981 Stella981
3年前
Shell对比两个文件中的记录有多少重复
问题是这样的:有两个uid的文件,格式如下:uid1.txt1234523456....uid2.txt1234534567....需要统计这两个文件中相同的uid有多少个。方法有两个:1.一个是读入一个文件的一行然后再另一个文件中找,找到就加一,shell大概是这样的(未测试)count0
Wesley13 Wesley13
3年前
mysql 外键(foreign key)的详解和实例
外键具有保持数据完整性和一致性的机制,对业务处理有着很好的校验作用。白话简介user表:id为主键profile表:uid为主键简单来说,若表profile的uid列作为表外键(外建名称:user_profile),以表user 做为主表,以其id列做为参照(referenc
Stella981 Stella981
3年前
Linux下的用户管理,kali更换源,xshell
Linux下的用户管理用户信息保存/etc/passwd,一般用户都有读的权限真正的用户:修改密码,可以登录伪用户:应用程序在运行时会以某种权限来运行,并使用程序名来表示该程序,并存在/etc/passwd文件中,伪用户不可以直接登录pentest(用户名):x(密码):1000(UID):1000(GID):pentest,,,(
Stella981 Stella981
3年前
Linux总结笔记2
1.用户身份与能力用户身份号码——即UID超级用户UID0:系统的超级用户。系统用户UID1999:系统中系统服务由不同用户运行,更加安全,默认被限制不能登录系统。普通用户UID1000~:即管理员创建的用于日常工作而不能管理系统的普通用户。注意UID一定是不能冲突的,管理员创建的普通用户UID从10
Stella981 Stella981
3年前
Alpine里的用户管理命令
注意噢,和普通的linux不一样的。1,建立一个指定GID的组:addgroupg10001SgroupA2,建立一个指定UID的用户,指定shell,让它属于指定的用户组。adduseruserAu20001DSs/bin/bashGgroupA3,让用户可以使用su
Stella981 Stella981
3年前
Linux查看是否被入侵
一.检查系统日志lastb命令检查系统错误登陆日志,统计IP重试次数二.检查系统用户1、cat/etc/passwd查看是否有异常的系统用户2、grep“0”/etc/passwd查看是否产生了新用户,UID和GID为0的用户3、lsl/etc/passwd查看passwd的修改时间,判断是否在不知的情况下添加用户4、查看
Stella981 Stella981
3年前
Linux用户管理
Linux用户管理用户管理配置文件 用户信息文件:/etc/passwd                                 用户名,密码位,UID(用户标识号),GID(缺省组织标识号),注释性描述(例如存放用户全名等信息),宿主目录(用户登陆系统后的缺省目录),命令解释器(用户使用的Shell,默认为bash
Stella981 Stella981
3年前
Linux 创建用户 用户组 用户权限
首先你要有个root账号然后才能做下面几条操作:useraddusername  创建用户usernamepasswduser\_pwd    给已创建的用户username设置密码关于useradd的某些参数:\uUID:指定UID,这个UID必须是大于等于500,并没有其他用户占用的UID\gGID/GR
Stella981 Stella981
3年前
MongoDb语法
查看当前都有哪些数据库showdbs;查看都有哪些集合showcollections 使用insert方法插入文档,以{}包注,文档是以键值对出现的,必须成对设置db.user.insert({"uid":1,"name":"luotianshuai","age":18,"salary":1})2、查询