第2章 系统用户/组管理(2) su和sudo
2.1 su
切换用户或以指定用户运行命令。
使用su可以指定运行命令的身份(user/group/uid/gid)。
为了向后兼容,su默认不会改变当前目录,且仅设置HOME和SHELL这两个环境变量(若目标用户非root,则还设置USER和LOGNAME环境变量)。推荐使用--login选项(即"-"选项)避免环境变量混乱。
- su [options...] [-] [user [args...]]
- 选项说明:
- -c command:使用-c选项传递要指定的命令到shell上执行。使用-c执行命令会为每个su都分配新的会话环境
- -, -l, --login:启动shell作为登录的shell,模拟真正的登录环境。它会做下面几件事:
- .清除除了TERM外的所有环境变量
- .初始化HOME,SHELL,USER,LOGNAME,PATH环境变量
- .进入目标用户的家目录
- .设置argv[]为"-"以便设置shell作为登录的shell
- 使用--login的su是交互式登录。不使用--login的su是非交互式登录(除不带任何参数的su外
- -m, -p, --preserve-environment:保留整个环境变量(不会重新设置HOME,SHELL,USER和LOGNAME),
- 保留环境的方法是新用户shell上执行原用户的各配置文件,如~/.bashrc。
- 当设置了--login时,将忽略该选项
- -s SHELL:运行指定的shell而非默认shell,选择shell的顺序优先级如下:
- .--shell指定的shell
- .如果使用了--preserve-environment,选择SHELL环境变量的shell
- .选项目标用户在passwd文件中指定的shell
- ./bin/sh
注意:
(1). 若su没有给定任何参数,将默认以root身份运行交互式的shell(交互式,所以需要输入密码),即切换到root用户,但只改变HOME和SHELL环境变量。
(2). su - username是交互式登录,要求密码,会重置整个环境变量,它实际上是在模拟真实的登录环境。
(3). su username是非交互登录,不会重置除HOME/SHELL外的环境变量。
例如:用户wangwu家目录为/home/wangwu,其shell为/bin/csh。
- shell> head - /etc/passwd ; tail - /etc/passwd
- root:x:::root:/root:/bin/bash
- wangwu:x::::/home/wangwu:/bin/csh
首先su到wangwu上,再执行一个完全不带参数的su。
- shell> su - wangwu # 使用su - username后,以登录shell的方式模拟登录,会重新设置各环境变量。su - username是交互式登录
- shell> env | egrep -i '^home|^shell|^path|^logname|^user'
- HOME=/home/wangwu
- SHELL=/bin/csh
- USER=wangwu
- LOGNAME=wangwu
- PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin
- PWD=/home/wangwu
- shell> su # 不带任何参数的su,是交互式登录切换回root,但只会改变HOME和SHELL环境变量
- shell> env | egrep -i '^home|^shell|^path|^logname|^user|^pwd'
- SHELL=/bin/bash
- USER=wangwu
- PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin
- PWD=/home/wangwu
- HOME=/root
- LOGNAME=wangwu
- shell> su - # su - 的方式切换回root
- Password:
- shell> env | egrep -i '^home|^shell|^path|^logname|^user|^pwd'
- SHELL=/bin/bash
- USER=root
- PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
- PWD=/root
- HOME=/root
- LOGNAME=root
- shell> su wangwu # 再直接su username,它只会重置SHELL和HOME两个环境变量,其他环境变量保持不变
- shell> env | egrep -i '^home|^shell|^path|^logname|^user|^pwd'
- SHELL=/bin/csh
- USER=wangwu
- PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
- PWD=/root
- HOME=/home/wangwu
- LOGNAME=wangwu
在某些环境下或脚本中,可能需要临时切换身份执行命令,注意这时候的环境变量是否会改变,否则很可能报错提示命令找不到。
2.2 sudo
sudo可以让一个用户以某个身份(如root或其他用户)执行某些命令,它隐含的执行方式是切换到指定用户再执行命令,因为涉及到了用户的切换,所以环境变量是否重置是需要设置的。
sudo支持插件实现安全策略。默认的安全策略插件是sudoers,它是通过/etc/sudoers或LDAP来配置的。
安全策略是控制用户使用sudo命令时具有什么权限,但要注意,安全策略可能需要用户进行身份认证,如密码认证的机制或其他认证机制,如果开启了认证要求,则在指定时间内未完成认证时sudo会退出,默认超时时间为5分钟。
安全策略支持对认证进行缓存,使得在一定时间内该用户无需再次认证就可以执行sudo命令,默认缓存时间为5分钟,sudo -v可以更新认证缓存。
sudo支持日志审核,可以记录下成功或失败的sudo。
2.2.1 /etc/sudoers文件
该文件里主要配置sudo命令时指定的用户和对应的权限。
- shell> visudo # 以下选取的是部分行
- ## hostname or IP addresses instead. # 主机别名Host_Alias
- # Host_Alias FILESERVERS = fs1, fs2
- # Host_Alias MAILSERVERS = smtp, smtp2
- ## User Aliases # 用户别名User_Alias
- # User_Alias ADMINS = jsmith, mikem
- ## Command Aliases # 命令别名
- # Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
- # Cmnd_Alias LOCATE = /usr/bin/updatedb
- root ALL=(ALL) ALL # sudo权限的配置
- # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
- ## Allows people in group wheel to run all commands
- # %wheel ALL=(ALL) ALL
- ## Same thing without a password
- # %wheel ALL=(ALL) NOPASSWD: ALL
在这个文件里,主要有别名(用户别名,主机别名,命令别名)的配置和sudo权限的配置。
安全策略配置格式为:
用户名 主机名=(可切换到的用户身份) 权限和命令
① ② ③ ④
①用户名:可以用组,只需在组名前加个百分号%表示。
②主机名:表示该用户可以在哪些主机上运行sudo,可以用hostname也可以用ip指定。
③可切换的用户身份,即指定执行命令的用户,也可以用组。
④权限和命令:允许执行和不允许执行的命令(多个命令间用逗号分隔)和特殊权限,命令可以带其选项及参数。命令要写绝对路径。不允许执行的命令需要在命令前加上"!"来表示。可以使用标签,如NOPASSWD标签表示切换或以指定用户执行该标签后的命令时不需要输入密码。一行写不下时可使用"\"续行。
标签使用方法:
- NOPASSWD:/usr/sbin/useradd,PASSWD:/usr/sbin/userdel
它表示useradd命令不需要输入密码,而userdel需要输入密码。
对于别名,相当于用户对于用户组。权限配置处都可以使用别名,即①②③④处都能使用别名来配置。
例如,主机别名里设置多个主机,以后在②位置处直接使用主机别名。
- FILESERVERS = fs1, fs2
以下是某设置示例:
- DEFAULT=/bin/*,/sbin/ldconfig,/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel,/bin/rpm,/usr/bin/yum,/sbin/service,/sbin/chkconfig,sudoedit /etc/rc.local,sudoedit /etc/hosts,sudoedit /etc/ld.so.conf,/bin/mount,sudoedit /etc/exports,/usr/bin/passwd [!-]*,!/usr/bin/passwd root,/bin/su - [!-]*,!/bin/su - root,!/bin/su root, /bin/bash, /usr/sbin/dmidecode, /usr/sbin/lsof, /usr/bin/du, /usr/bin/python, /usr/sbin/xm,sudoedit /etc/profile,sudoedit /etc/bashrc,/usr/bin/make,sudoedit /etc/security/limits.conf,/etc/init.d/*,/usr/bin/ruby
- ABC ALL=(ALL)NOPASSWD:DEFAULT
其中上面的"/usr/bin/passwd [!-]*"表示允许修改加参数的密码。"/bin/su - [!-]*"表示允许"su -"到某用户下,但必须给参数。
2.2.2 sudo和sudoedit命令
当sudo执行指定的command时,它会调用fork函数,并设置命令的执行环境(如某些环境变量),然后在子进程中执行command,sudo的主进程等待命令执行完毕,然后传递命令的退出状态码给安全策略并退出。
sudoedit等价于sudo -e,它是以sudo的方式执行文件编辑动作。
- sudo [options] [command]
- 选项说明:
- -b :(background)该选项告诉sudo在后台执行指定的命令。
- 注意,如果使用该选项,将无法使用任务计划(job)来控制维护这些后台进程,
- 需要交互的命令应该考虑是否真的要后台,因为可能会失败
- -l[l] [command]:当单独使用-l选项时,将列出(list)用户可执行和被禁止的命令。
- 当配合command时,且该command是被允许执行的命令,将列出命令的全路径及该命令参数。
- 如果command是不被允许执行的,则sudo直接以状态码-1退出。
- 可以指定多个字母"l"来显示更详细的格式
- -n :使得sudo变成非交互模式,但如果安全策略是要求输入密码的,则sudo将报错
- -S :(stdin)该选项使得sudo从标准输入而非终端设备上读取密码,给定的密码必须在尾部加上换行符
- -s [command] :(shell)指定要切换到的shell,如果给定command,则在此shell上执行该命令
- -U user :(other user)配合-l选项来指定要列出哪个用户的权限信息
- -u user :(user)该选项明确指定要以此处指定的用户而非root来运行command。
- 若使用uid的方式指定用户,则需要使用"#uid",但很多时候可能需要对"#"使用"\"转义,即使用"\#uid"
- -E :(environment)该选项告诉sudo在执行命令时保留自己的环境变量,保留环境变量的方式是执行环境配置文件。
- 但因为跨了用户,所以很可能某些家目录下的环境配置文件会因为无权限而执行失败,此时sudo将报错
- -k [command] :当单独使用-k选项时,sudo将使得用户的认证缓存失效。下次执行sudo命令需要输入密码。
- 当配合command时,-k选项将忽略用户的缓存,所以sudo将要求用户输入密码,但这次输入密码不会更新认证缓存
- 但执行-k选项本身,不需要密码
- -K :(sure kill)类似于-k选项,但它会完全移除用户的认证缓存,且不会配合command,执行-K本身不需要密码
- -v :(validate)该选项使得sudo更新用户认证缓存
- -- :暗示sudo命令行参数到此结束
在sudo上可以直接设置环境变量,它会传递为command的环境。设置的方式为var=value,如LD_LIBRARY_PATH=/usr/local/pkg/lib
由于sudo默认的安全策略插件是sudoers,所以当用户执行sudo时,系统会自动去寻找/etc/sudoers文件(该文件里被root配置了用户对应的权限,也即安全策略),查看sudo要使用的用户是否有对应的权限,如果有则执行,如果没有权限就失败退出sudo。
第2章 系统用户/组管理(2) su和sudo的更多相关文章
- 第2章 细说Linux系统用户/组管理(1)
2.1 用户和组的基本概念 用户和组是操作系统中一种身份认证资源. 每个用户都有用户名.用户的唯一编号uid(user id).所属组及其默认的shell,可能还有密码.家目录.附属组.注释信息等. ...
- linux系统(centos)下su和sudo命令的区别
linux系统(centos)下su和sudo命令的区别 区别 我们在日常使用过程中,这2个命令很多时候能达到相同的效果,对细节区别十分模糊,这里进行简单的解释和区分.希望大家能够正确使用这2个命令, ...
- jumpserver 用户,系统用户和管理用户 普通用户和特权用户 区别
前言 现在很多公司都有在用Jumpserver跳板机 有很多人一直对jumpserver的各种用户还不是很了解 当你了解了这几个概念了之后,就能更好的灵活的运用到分配权限当中去. 下面我们一个一个的说 ...
- Shell命令-用户用户组管理之visudo、sudo
文件及内容处理 - visudo.sudo 1. visudo:编辑/etc/sudoers文件的专属命令 visudo命令的功能说明 visudo命令专门用来编辑/etc/sudoers这个文件的. ...
- Linux 下以其他用户身份运行程序—— su、sudo、runuser
本文综合分析了Linux系统下,如何使用runuser命令.su命令和sudo命令以其他用户身份来运行程序,以及这三个命令的运行效率比较. 一.su 命令临时切换用户身份 SU:( Switch ...
- Linux基础3(用户/组管理,rpm,yum,源码安装软件)
用户管理 与用户相关的配置文件 /etc/passwd /etc/shadow /etc/skel /etc/defalut/useradd /etc/login.defs useradd userm ...
- Linux系统用户权限管理
Linux系统中三种基本权限 用户属主.用户属组及其它人权限 -rw-r--r-- 1 root root 762 11-11 20:34 a.out 文件类型 ls命令中的缩写 应用 一般文件 - ...
- 用户管理_组管理_设置主机名_UGO_文件高级权限_ACL权限
用户管理: 添加用户:useradd tom 设置密码:passwd tom 切换账户: su - tom (不加-也能切换,但是 -会有两点不同 1.有-会切换到该用户的主目录 2.会切换到该用户 ...
- 【Linux下用户和组管理】
创建用户--useradd . 命令格式:useradd [参数] 用户名 useradd也可写成adduser . 参数如下 -u 指定UID号 -d 指定宿主目录 -e 指定生效时间 -g 指定基 ...
随机推荐
- Activiti引擎启动失败
今天部署项目测试时发现activiti启动失败,研究了会才把问题解决!! 错误信息:SEVERE: problem during schema create, statement create seq ...
- arcgis for javascript 之 clone()问题小计
情景再现: 用户点击一个featurelayer的图斑,(属性信息从mysql中获取),同时高亮此地块,点击一下个地块时候,取消高亮.(请忽略跨域造成的图标错误,jetty试了好久不能跨域· ...
- sql注入基础(原理)
一.注入的分类 按数据库分类:1.整形 2.字符型(需要考虑单引号闭合的问题,还有注释不必要的语句 # ) eag: id='admin' id='admin and1=1'这样会报错 所以 ...
- 转载+++++iptables详解+++++转载
转载:http://blog.chinaunix.net/uid-26495963-id-3279216.html 一.前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件 ...
- js中addEventListener第三个参数涉及到的事件捕获与冒泡
js中,我们可以给一个dom对象添加监听事件,函数就是 addEventListener("click",function(){},true); 很容易理解,第一个参数是事件类型, ...
- vue视频学习笔记07
video 7 vue问题:论坛http://bbs.zhinengshe.com------------------------------------------------UI组件别人提供好一堆 ...
- 转:修改Tomcat控制台标题
转自:http://blog.csdn.net/chanryma/article/details/46930729 背景:用控制台方式启动Tomcat,控制台的标题默认是"Tomcat&qu ...
- DDD理论学习系列(2)-- 领域
DDD理论学习系列目录 1. 引言 领域一词,主要有以下两个意思: 一国主权所达之地. 学术思想或社会活动的范围. 不管是指国家的主权范围也好还是学术活动范围,都是在讲一个范围,一个界限. 比如我们常 ...
- flask-login ----系统权限设计部分小结
tips: 事实证明.开发是一项苦力活.但是代码只有自己写的才是令人感到放心的.不过仅仅是从开发角度来说.从维护和安全角度来说,当然还是引入模块比较爽 但是引入的模块总会有一些问题.碰到的最大问题就是 ...
- Cisco Packet Tracer做单臂路由的过程
Cisco Packet Tracer版本:6.0.0.0045 单臂路由 VLAN规划 switch 0上配置:Switch>enSwitch(config)#vlan 2 #创建vlan2S ...