• 回顾下进程标识和文件权限


    进程身份

    通常一个进程具有多个标识,其中最重要的是PID和PPID
    PID表示自身的标识,全局唯一
    PPID表示父进程的ID,可用来判断由谁fork而来

    PGID,所属进程组ID,进程组表示一组进程,而这个PGID就是组长进程的PID
    默认组长进程的子进程具有相同的PGID,一个进程可以调整自己的PGID,是自己加入或退出某个进程组

    SID,会话ID,描述控制终端和几个进程组,通常会话控制进程的PID就是SID,但对这个控制进程有以下要求:
    1. 不能已经是一个进程组的组长进程
    2. 最好没有与控制终端关联,即使有也会被切断
    会话控制进程负责管理几个进程组,其中一般有后台进程组(不与控制终端关联)
    如果是一个登录会话,则会存在一个前台进程组,这个前台进程组与控制终端联系并负责一系列工作,当用户从控制终端退出时,前台进程组中的进程都会收到SIGHUP信号导致进程退出,而后台进程组则不会退出

    对于daemon进程,设计上一般是一个屏蔽SIGHUP信号的会话控制进程

    平时使用nohup+&启动后台进程,其实就是启动了一个屏蔽SIGHUP信号的进程

    用户权限

    默认已知的是属主、属组、其它,这个从文件信息可以看到,其中rwx表示读写执行权限

    先说说实际用户,实际用户就是登录时的用户,此后即使执行sudo切换用户,实际用户还是登录时的用户

    有效用户,指切换到的用户,比如sudo切换到root,那么有效用户就是root

    初始用户组,就是/etc/group中与用户相关的组

    有效用户组,表示用户此时所在的用户组,就是newgrp切换到的用户组,如果没有执行,则有效用户组就是初始用户组

    当使用命令对文件执行操作时,就会根据有效用户和有效用户组以及文件相应的操作类型判断权限,如果不满足则会报权限错误

    特殊的,粘着位,例如/tmp,其权限是rwxrwxrwt,其中的t就是粘着位,以前是设置让可执行文件在交换区中保存以便于下一次快速载入
    现在多用于目录,如/tmp,使每个用户都可以在目录下创建文件并读写,但删除只能由创建它的用户执行(实际要稍微复杂点,但基本是一样的逻辑)

    另一个特殊的就是设置用户位,如-rwsrwx---,其中s为设置用户位,可通过chmod +s -s操作,设置用户位使得任何用户执行该文件时,不使用有效用户,而是使用属主身份
    例如一个文件的权限和属主如下:
    -rwsrwx--- root root
    那么对于非root用户执行该文件时,相当于用root用户执行

    区分实际用户和有效用户可使用
    who -m 实际用户
    whoami 有效用户

  • 相关阅读:
    c++ 设计模式6 (Decorator 装饰模式)
    c++ 设计模式7 (Bridge 桥模式)
    c++ 设计模式8 (Factory Method 工厂方法)
    c++ 设计模式9 (Abstract Factory 抽象工厂模式)
    C++类设计2(Class with pointer members)
    C++类设计1(Class without pointer members)
    算法总结—链表
    C++对象内存模型1(堆栈模型)
    PHP 页面编码声明方法详解(header或meta)
    php变量与数组相互转换的方法(extract与compact
  • 原文地址:https://www.cnblogs.com/ikct2017/p/13150044.html
Copyright © 2020-2023  润新知