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节点信息

目录可执行不可读:不能列出目录下的文件内容,若已知文件名称,仍可对其访问

sudo与用户权限的更多相关文章

  1. 为linux普通用户添加超级用户权限sudo

    问题:假设用户名为:ali如果用户名没有超级用户权限,当输入 sudo + 命令 时, 系统提示: ali is not in the sudoers file.  This incident wil ...

  2. Linux学习笔记——使用指定的用户权限执行程序——sudo

          sudo可以用来以其他用户身份执行命令,sudo命令可以针对单个命令授予临时权限.sudo仅在需要时授予用户权限,减少了用户因为错误执行命令损坏系统的可能性. 1:sudo的帮助信息如下: ...

  3. linux普通用户权限设置为超级用户权限方法、sudo不用登陆密码

    以用户zato为例 普通用户权限设置为超级用户权限 进入有超级用户权限的账号 添加文件可写(w)权限 sudo chmod u+x /etc/sudoers 编辑/etc/sudoers文件 添加语句 ...

  4. CentOS用户权限管理--su与sudo

    Linux权限管理--su与sudo 1.su用来切换登录的用户,比如当前用户为chen,可以用su zhu,并输入用户zhu的登录密码,就可以切换到用户zhu.如果一个普通用户想切换到root用户, ...

  5. Ubuntu Linux---控制用户权限:root特权/sudo

    借了本<Ubuntu Linux指南>开始学学乌邦图吧,熟悉之后再下个红帽来玩玩,现在说说我们一直提到的root,但是在Linux中,这个root有所不同...大多数Linux系统都为一个 ...

  6. 【Linux】sudo用户权限管理

    权力下放 一.权力分配- sudo Sudo是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的"权力",让 他们执行一些只有超级用户或其他特 ...

  7. linux命令-sudo普通用户拥有root权限

    普通用户权限不够 [root@wangshaojun ~]# su - dennywang[dennywang@wangshaojun ~]$ ls /root/ls: 无法打开目录/root/: 权 ...

  8. sudo控制用户对系统命令的使用权限

    sudo控制用户对系统命令的使用权限 sudo相关概念 普通用户涉及到超级权限的运用,管理员如果想让该普通用户通过su来切换到root获得超级权限,就必须把root权限密码告诉用户.但是如果普通用户有 ...

  9. root用户和sudo使用root权限的区别(转)

    百度百科:https://baike.baidu.com/item/sudo/7337623?fr=aladdin sudo指令 功能: 以root的身分执行命令 语法: sudo 其他指令 用户: ...

随机推荐

  1. 【洛谷 P5357】 【模板】AC自动机(二次加强版)(AC自动机,差分)

    每次匹配都不停跳fail显然太慢了,于是在每个节点和fail指向的点连一条边,构成一棵树,在这棵树上差分一下就好了. AC自动机 就这个算法而言其实没用想象中那么难. #include <cst ...

  2. Part_two:Redis之发布订阅

    Redis发布订阅 发布订阅的命令 PUBLISH channel msg 将信息 message 发送到指定的频道 channel SUBSCRIBE channel [channel ...] 订 ...

  3. element-ui tree 设置成单选,并且父级不可选

    <el-tree :data="date" //数据来源 show-checkbox //节点是否可被选择 node-key="moduldCode" / ...

  4. JavaScript箭头函数中的this详解

    前言 箭头函数极大地简化了this的取值规则. 普通函数与箭头函数 普通函数指的是用function定义的函数: var hello = function () { console.log(" ...

  5. Flink原理(三)——Task(任务)、Operator Chain(算子链)和Slot(资源)

    本文是参考官方文档结合自己的理解写的,所引用文献均已指明来源,若侵权请留言告知,我会立马删除.此外,若是表达欠妥的地方,欢迎大伙留言指出. 前言 在上一篇博客Flink原理(二) ——资源一文中已简要 ...

  6. js对属性的操作

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. MySQL 主从延迟几万秒 Queueing master event to the relay log(转)

    数据库版本Server version:    5.6.24-log Source distribution 问题描述 数据采集平台业务数据库由于批量灌数据导致主从延迟上万秒. 复制线程长期处于Que ...

  8. 剑指Offer(三十五):数组中的逆序对

    剑指Offer(三十五):数组中的逆序对 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...

  9. "人工智能",你怕了吗?

    近期“人工智能+”,已经是市场上非常火的一个风口,人工智能已经渗透到人类生活的方方面面,服务于我们的生活.但是人工智能的迅速发展,也引起了我的担忧,一系列科技电影展示出来的人工智能奴役人类的场景,让人 ...

  10. gradle 构建scala程序

    一.build.gradle 二.gradle build ===================== 执行scala scala main.scala