• sudo与用户权限


    sudo,以root的身份另起新进程
    注意:cd是shell内置的,不会另起新进程,故sudo cd会提示找不到命令

    sudo使用当前用户密码,su使用切换用户的密码,默认切换为root
    sudo通常仅改变$PATH等极少数环境,su切换大量环境

    问题:

    dirge@Linux:~$ sudo echo "ulimit -c unlimited" >> /etc/profile
    bash: /etc/profile:  Permission denied
    

    分析:
    这是因为重定向符号 “>>” 也是 bash 的命令。sudo 只是让 echo 命令具有了 root 权限,
    但是没有让 “>>” 命令也具有root 权限,所以 bash 会认为这个命令没有写入信息的权限。
    解决:
    用sudo执行bash,将其它命令作为bash的参数
    方式1

        sudo bash
        echo "ulimit -c unlimited" >> /etc/profile
        exit
    

    方式2

        sudo bash -c 'echo "ulimit -c unlimited" >> /etc/profile'
    

    注意:
    单引号为字面串,双引号为解析串
    ref:
    [https://www.cnblogs.com/jankz/p/10889734.html]

    env

    env: 查看环境变量
    set: 查看所有变量(包含自定义变量)
    export: 将自定义变量转为环境变量
    declare: 将环境变量转为自定义变量
    注意:子进程仅会继承父进程的环境变量,不会继承父进程的自定义变量

    login sehll(输入密码的形式)会读取 /etc/profile~/.profile文件 (该文件又调用了~./bashrc)
    non-login shell(ctrl + t等的形式打开shell)会读取~/.bashrc文件

    source:在当前shell进程执行脚本
    所以"source /etc/profile"需要反复执行,因为脚本文件/etc/profile只有在登录时才会执行。
    正确的形式应当是修改~/.bashrc文件

    sudo模式的env与用户模式的env不同,以$PATH为例

    方案一:

    sudo env "PATH=$PATH" command
    

    方案一中的$PATH当前环境变量$PATH
    bash会先将变量替换再执行sudo语句。
    不替换的方式:双引号改为单引号,则为字面串。

    echo 'echo $PATH' | bash
    echo 'echo $PATH' | sudo bash
    

    或者

    bash -c 'echo $PATH'
    sudo bash -c 'echo $PATH'
    

    注意sudo bash -c 'echo $PATH'sudo bash -c "echo $PATH"的区别

    方案二:

    ln设置软链接

    方案三:

    通过命令visudo修改sudo配置文件
    ref:
    [https://unix.stackexchange.com/questions/83191/how-to-make-sudo-preserve-path]

    用户和组

    /etc/passwd:该文件记录了登录名,加密后的密码,用户ID(UID),组ID(GID,用户属主中首选属主的ID),注释,主目录,登录shell

    登录shell为 "/bin/false", "/usr/sbin/nologin"时,用户无法登录shell

    /etc/group:该文件记录了组名,加密后的密码,组ID(GID),用户列表

    进程凭证

    实际用户ID和实际用户组ID:登录shell从/etc/passwd文件中读取的第三、第四字段,创建进程时将从父进程中继承这些ID
    有效用户ID和有效用户组ID:通常与上述实际ID相同,可通过系统调用或者set-UID和set-GID设置为可执行文件的属主ID。

    当进程执行系统调用时,将结合euid,egid及辅助组ID一起确定进程的权限。

    可执行文件还拥有两个特别的权限位set-UID位和set-GID位
    当设置了set-user-id和set-group-id权限位时,那么可执行位x标识被替换成s。进程运行时,有效用户ID和有效用户组ID为文件属主ID。
    非特权用户可以通过chmod对自己拥有的文件进行设置set-UID/set-GID,特权用户能够对任何文件设置。
    Linux系统常用的set-UID的程序有 passwdmountunmountsu; 常见的set-GID的程序为wall

    可通过proc/PID/status文件查看进程凭证

    总结:
    进程的uid,gid,euid,egid通常为当前登录用户
    sudo执行的程序的uid,gid,euid,egid则为root
    设置了set-UID/set-GID的程序的 euid/egid 则为文件属主

    文件属性

    • 文件时间戳
    1. 上次访问时间
    2. 上次修改时间
    3. 上次文件状态发送改变时间
    • 文件属主
      新建文件属主 = 进程有效用户ID,进程有效用户组ID

    • 文件权限
      st_mode:


    | | | | | U | G | T | R | W | X | R | W | X | R | W | X |
    —————————————————————
    前4位标志文件类型,后12位标志权限,其中U = SUID,G = SGID,T = sticky

    1. 普通文件
      可执行需要同时具备读权限和执行权限

    2. 目录文件
      可读:访问文件列表
      可写:可创建文件/可删除文件
      可执行:可访问目录中的文件的内容或i节点信息

    访问文件需要有路径名所列所有目录的可执行权限
    目录内添加删除文件需要同时有可写可执行权限
    目录可读不可执行:只能查看目录的文件列表,不能访问目录内的文件内容和i节点信息
    目录可执行不可读:不能列出目录下的文件内容,若已知文件名称,仍可对其访问

  • 相关阅读:
    文本省略并显示省略号
    屏蔽IOS端alert窗口带URL的方法
    vue实现打印功能
    使用vue-cli搭建vue项目
    四元表达式
    循环数组中的对象 放进另一个数组对象里面
    vue中选择图片,预览图片,返回base64
    上传图片,预览并保存成blob类型 和 base64
    【HbuilerX-Bug】终端无法显示打印信息,也无法输入
    el-tag标签使用三元表达动态改变type类型
  • 原文地址:https://www.cnblogs.com/dirge/p/11645146.html
Copyright © 2020-2023  润新知