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的程序有 passwd,mount,unmount,su; 常见的set-GID的程序为wall
可通过proc/PID/status文件查看进程凭证
总结:
进程的uid,gid,euid,egid通常为当前登录用户,
sudo执行的程序的uid,gid,euid,egid则为root,
设置了set-UID/set-GID的程序的 euid/egid 则为文件属主。
文件属性
- 文件时间戳
- 上次访问时间
- 上次修改时间
- 上次文件状态发送改变时间
文件属主
新建文件属主 = 进程有效用户ID,进程有效用户组ID文件权限
st_mode:
| | | | | U | G | T | R | W | X | R | W | X | R | W | X |
—————————————————————
前4位标志文件类型,后12位标志权限,其中U = SUID,G = SGID,T = sticky
普通文件
可执行需要同时具备读权限和执行权限目录文件
可读:访问文件列表
可写:可创建文件/可删除文件
可执行:可访问目录中的文件的内容或i节点信息
访问文件需要有路径名所列所有目录的可执行权限
目录内添加删除文件需要同时有可写与可执行权限
目录可读不可执行:只能查看目录的文件列表,不能访问目录内的文件内容和i节点信息
目录可执行不可读:不能列出目录下的文件内容,若已知文件名称,仍可对其访问
sudo与用户权限的更多相关文章
- 为linux普通用户添加超级用户权限sudo
问题:假设用户名为:ali如果用户名没有超级用户权限,当输入 sudo + 命令 时, 系统提示: ali is not in the sudoers file. This incident wil ...
- Linux学习笔记——使用指定的用户权限执行程序——sudo
sudo可以用来以其他用户身份执行命令,sudo命令可以针对单个命令授予临时权限.sudo仅在需要时授予用户权限,减少了用户因为错误执行命令损坏系统的可能性. 1:sudo的帮助信息如下: ...
- linux普通用户权限设置为超级用户权限方法、sudo不用登陆密码
以用户zato为例 普通用户权限设置为超级用户权限 进入有超级用户权限的账号 添加文件可写(w)权限 sudo chmod u+x /etc/sudoers 编辑/etc/sudoers文件 添加语句 ...
- CentOS用户权限管理--su与sudo
Linux权限管理--su与sudo 1.su用来切换登录的用户,比如当前用户为chen,可以用su zhu,并输入用户zhu的登录密码,就可以切换到用户zhu.如果一个普通用户想切换到root用户, ...
- Ubuntu Linux---控制用户权限:root特权/sudo
借了本<Ubuntu Linux指南>开始学学乌邦图吧,熟悉之后再下个红帽来玩玩,现在说说我们一直提到的root,但是在Linux中,这个root有所不同...大多数Linux系统都为一个 ...
- 【Linux】sudo用户权限管理
权力下放 一.权力分配- sudo Sudo是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的"权力",让 他们执行一些只有超级用户或其他特 ...
- linux命令-sudo普通用户拥有root权限
普通用户权限不够 [root@wangshaojun ~]# su - dennywang[dennywang@wangshaojun ~]$ ls /root/ls: 无法打开目录/root/: 权 ...
- sudo控制用户对系统命令的使用权限
sudo控制用户对系统命令的使用权限 sudo相关概念 普通用户涉及到超级权限的运用,管理员如果想让该普通用户通过su来切换到root获得超级权限,就必须把root权限密码告诉用户.但是如果普通用户有 ...
- root用户和sudo使用root权限的区别(转)
百度百科:https://baike.baidu.com/item/sudo/7337623?fr=aladdin sudo指令 功能: 以root的身分执行命令 语法: sudo 其他指令 用户: ...
随机推荐
- Roads in the Kingdom CodeForces - 835F (直径)
大意: 给定一个基环树, 求删除一条环上的边使得直径最小. 直径分两种情况 环上点延伸的树内的直径 两个环上点的树内深度最大的点匹配 第一种情况直接树形dp求一下, 第二种情况枚举删除的环边, 线段树 ...
- 方法2:使用Jenkins构建Docker镜像 --SpringCloud
前提意义: SpringCloud微服务里包含多个文件夹,拉取仓库的所有代码,然后过根据选项参数使用maven编译打包指定目录的jar,然后再根据这个目录的Dockerfile文件制作Docker镜像 ...
- Non-Maximum Suppression(非极大值抑制)
定义与介绍(NMS 以及soft-NMS也有简单的介绍): https://www.cnblogs.com/makefile/p/nms.html IoU的介绍这篇写的不错: https://oldp ...
- 机器学习 降维算法: isomap & MDS
最近在看论文的时候看到论文中使用isomap算法把3D的人脸project到一个2D的image上.提到降维,我的第一反应就是PCA,然而PCA是典型的线性降维,无法较好的对非线性结构降维.ISOMA ...
- 【kubernetes】通过rancher2部署k8s
1. K8S相关介绍 十分钟带你理解Kubernetes核心概念 2. 部署rancher # 更新操作系统软件包 yum update -y # 删除历史容器及数据 docker rm -f $(d ...
- Unity VS2017 调试外部DLL
之前写的C++ DLL VS2012 都可以附加进程的方式调试Unity中的调用 这次用了一个C# DLL VS2017 在Unity 2018上无法附加进程的方式调试 经过一番折腾, 主要是两个问题 ...
- C语言编译器
我们分两部分介绍C语言的编译器,分别是桌面操作系统和嵌入式操作系统. 桌面操作系统 对于当前主流桌面操作系统而言,可使用 Visual C++.GCC 以及 LLVM Clang 这三大编译器. Vi ...
- linux下安装dotnet core
windows下安装linux系统需要用到VMware 这个软件,可自行百度下载,然后安装centos7系统安装 centos下安装dotnetcore 在终端输入命令: sudo yum insta ...
- java对象序列化和反序列化,redis存入和获取对象
最近使用redis发现直接存储序列化后的对象更方便,现提供java序列化和反序列化的代码 1.序列化代码: public static byte[] serialize(Object object) ...
- Kubernetes 1.15部署日记-使用kubeadm--<5-6>
5.配置pod网络 5.1下载calico 网络配置文件 [root@k8s-1 libj]# curl -O https://docs.projectcalico.org/v3.6/getting- ...