身份切换与sudo
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了身份切换与sudo相关的知识,希望对你有一定的参考价值。
su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。以root身份切换至普通用户则不需要输入密码
su
Centos 6 命令位置 /bin/su
Centos 7 命令位置 /usr/bin/su /bin 软链接至 usr/bin
su变更时须输入所要变更的用户帐号与密码,这在实际使用中会因为密码而导致安全上的问题,因此,就引出了sudo的实用性。
? sudo能够授权指定用户在指定主机上运行某些命令。 如果未授权用户尝试使用 sudo,会提示联系管理员
? sudo可以提供日志,记录每个用户使用sudo操作
? sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
? sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
sudo
sudo配置
? 配置文件
/etc/sudoers
/etc/sudoers.d/
sudo 可以解析 /etc/sudoers.d/ 目录中的文件,这样就不需要编辑单一的 /etc/sudoers 文件,可以单独修改一个设置然后放入此目录。目录中配置的格式和 /etc/sudoers一样, 优点包括:
a.可以按指定分类创建文件
b.如果新配置有问题,可以删除这个文件,而不用编辑 /etc/sudoers.
警告: /etc/sudoers格式错误会导致sudo不可用。必须使用visudo编辑该文件防止出错。
#visudo -f /etc/sudoers.d/hunk 读取并编辑/etc/sudoers.d/指定文件
#visudo –c 检查语法
/etc/sudoers: parsed OK
出错的时候,会提示如下信息,按 e 可以直接定位到出现错误的行
#visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/hunk: bad permissions, should be mode 0440
/etc/sudoers配置文件
说明 :
1:授权规则
2:授权wheel组在任何位置执行任何指令。
3:设置sudo时免密码
4:这一行并不是注释,在/etc/sudoers.d/目录的文件会一并加载,这样做的好处是,每个用户生成 一个配置文件,方便管理。
配置文件更改后,立即生效
? 时间戳文件
/var/db/sudo
? 日志文件
/var/log/secure
#tail /var/log/secure
? 配置文件支持使用通配符glob
?: 任意单一字符
* : 匹配任意长度字符
[wxc]: 匹配其中一个字符
[!wxc]: 除了这三个字符的其它字符
\x : 转义
[[alpha]] : 字母 示例: /bin/ls [[alpha]]*
更多请参考以前笔记
? 配置文件规则有两类
1、别名定义:不是必须的
2、授权规则:必须的
授权规则格式:
语法格式:
用户 登入主机=(代表用户) 命令
user host=(runas) command
root ALL=(ALL) ALL
? 格式说明:
user: 运行命令者的身份
host: 允许在哪些主机
(runas):以哪个用户的身份,此用户应当有权限运行后面的指令,否则没有意义。
command: 运行哪些命令,这里建议使用绝对路径。使用 逗号; 实现多行指令
其中,command一栏中的sudoedit比较特别,是授权用户编辑文件,而且在普通用户执行时,只需要这样使用:$sudoedit /etc/sudoers.d/hunk
示例:
一个普通用户并没有权限挂载光盘
[[email protected] ~]$mount /dev/sr0 /dvd
mount: only root can do that
设置sudo授权指定用户可以挂载光盘和卸载光盘
# visudo
#hunk ALL=(root) /usr/bin/mount /dev/cdrom /dvd,/usr/bin/umount /dvd
这种写法也可以,runas为空时,默认以root身份
#hunk ALL= /usr/bin/mount /dev/cdrom /dvd,/usr/bin/umount /dvd
支持通配符
#hunk ALL=/usr/bin/mount /dev/sr* /dvd,/usr/bin/mount /dev/cdrom /dvd,/usr/bin/umount /dvd
普通用户使用方式:
# sudo mount /dev/sr0 /dvd
第一次的时候,会验证密码,以后每隔5分钟会重新验证密码
$sudo mount /dev/sr0 /dvd
mount: /dev/sr0 is write-protected, mounting read-only
注意:
sudo的字符串必须与sudoers配置文件要一模一样,否则就是不匹配
一些特殊的写法:
rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm
NOPASSWD:不需要输入密码
PASSWD:需要输入密码
Defaults:hunk runas_default=user10
#1004 ALL=(root) /usr/sbin/,!/usr/sbin/ifconfig
! 排除或者理解为不能执行
Defaults:默认行为
[email protected]_List
Defaults:User_List
Defaults!Cmnd_List
Defaults>Runas_List
示例:
Defaults syslog=auth
Defaults>root !set_logname
Defaults:FULLTIMERS !lecture
Defaults:hunk !authenticate 不进行身份验证
[email protected] log_year, logfile=/var/log/sudo.log 指定这些主机的日志相关
Defaults!PAGERS noexec
sudo别名
语法格式:
别名有四种类型:
别名格式:[A-Z]([A-Z][0-9]_)*
为sudo命令定义PATH环境变量
当你使用sudo去执行一个程序时,处于安全的考虑,这个程序将在一个新的、最小化的环境中执行,也就是说,诸如PATH这样的环境变量,在sudo命令下已经被重置成默认状态了。所以当一个刚初始化的PATH变量中不包含你所要运行的程序所在的目录,用sudo去执行,你就会得到"command not found"的错误提示。
要想改变PATH在sudo会话中的初始值,用文本编辑器打开/etc/sudoers文件,找到"secure_path"一行,当你执行sudo 命令时,"secure_path"中包含的路径将被当做默认PATH变量使用。
Defaults secure_path = $PATH:/sbin:/bin:/usr/sbin:/usr/bin
一些示例
授权 ls /usr/local/protected
$ sudo ls /usr/local/protected
以www的身份编辑指定的文件
$ sudoedit -u www ~www/htdocs/index.html
以组成员身份adm的查看日志
$ sudo -g adm more /var/log/syslog
以jim的身份且使用主组为audio的身份编辑指定文件
$ sudoedit -u jim -g audio ~jim/sound.txt
允许关机
$ sudo shutdown -r +15 "quick reboot"
在使用*号时,要特别注意安全问题
%operator ALL = /bin/cat /var/log/messages*
当以上规则时,可以匹配为
$ sudo cat /var/log/messages.1
也可以匹配为
$ sudo cat /var/log/messages /etc/shadow
是不是相当的危险?
可以这么设定
%operator ALL = /bin/cat /var/log/messages*,!/bin/cat /var/log/message* *
以上是关于身份切换与sudo的主要内容,如果未能解决你的问题,请参考以下文章