【Linux】sudo文件及相关配置
sudo意思是super-user do,让当前用户暂时以root的身份来执行命令
sudo默认配置文件是/etc/sudoers,一般使用Linux指定编辑工具visudo
- su命令
普通用户切换到root用户,使用su –或su root,必须输入root密码
root用户切换到普通用户,使用su username,不需要输入密码
# su
切换到root,不切换环境 Shell环境仍然是普通用户的Shell
# su - root
用户和Shell环境一起切换成root身份
# su -c ls root
切换用户执行命令,执行后返回原用户
# su - root -c lastb
不切换成 root,但是执行lastb命令
-l 使得shell为可登录的shell -f 传递给shell(针对csh或tcsh) -m 不重置环境变量 -p 与-m同 -s 如果/etc/shells允许,运行SHELL. --help 显示帮助 --version 输出版本信息并退出 单一的 - 意味着-l.如果没有给定USER,则假定为root
- visudo命令
需要超级用户权限;默认编辑/etc/sudoers文件;
sudoers文件的默认权限是440,默认无法修改;该命令可以在不更改sudoers文件权限的情况下,直接修改sudoers文件;
# visudo
编辑/etc/sudoers文件
# visudo -c
编辑/etc/sudoers文件,并检查语法等错误
-c 纯检查模式 -f 指定sudoers文件的位置 -h 显示帮助信息 -q 较简略的语法错误信息 -s 严格语法检查 -V 显示版本信息并退出 -x 以JSON格式将sudoers写入输出文件
- sudo命令
用来以其他身份来执行命令,预设的身份为root。
在/etc/sudoers中设置了可执行sudo指令的用户。
用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
# sudo -l
查看此用户拥有的权限
# sudo -k
结束密码有效期,有效期结束后,执行特殊命令,需重新验证密码
# sudo -u you ls /home/you
指定用户执行命令
# sudo touch file
为空默认是root用户,以root账户来建一个文件file
# sudo !!
以root权限执行上一条命令
# sudo -V
-A 进行密码提示 -b 在后台运行命令 -C 关闭所有>=num的文件描述符 -E 在执行命令时保留用户环境 -e 编辑文件而非执行命令 -g 以指定的用户组或 ID 执行命令 -H 将HOME变量设为目标用户的主目录。 -h 显示帮助消息 -h 在主机上运行命令(插件支持) -i 以目标用户身份运行一个登录shell;可同时指定一条命令 -K 完全移除时间戳文件 -k 无效的时间戳文件 -l 列出用户权限或检查某个特定命令;对于长格式,使用两次 -n 非交互模式,不提示 -P 保留组向量,而非设置为目标的组向量 -p --prompt=prompt 使用指定的密码提示 -r --role=role 以指定的角色创建 SELinux 安全环境 -S 从标准输入读取密码 -s 以目标用户运行 shell;可同时指定一条命令 -t 以指定的类型创建SELinux安全环境 -U 在列表模式中显示用户的权限 -u 以指定用户或ID运行命令(或编辑文件) -V 显示版本信息并退出 -v 更新用户的时间戳而不执行命令 -- 停止处理命令行参数
日志与安全:需手动开启 touch /var/log/sudo vi /etc/syslog.conf 在syslog.conf最后面加一行(用tab分隔)并保存 local2.debug /var/log/sudo 重启日志守候进程: ps aux grep syslogd syslogd进程的PID填入: kill –HUP PID sudo ls /rootanaconda-ks.cfg
sudo的配置文件配置好后,可以用切换到授权的普通用户下,通过sudo -l来查看哪些命令是可以执行的或禁止的
/etc/sudoers 文件中每行是一个规则,前面带有#号是注释的内容,并不执行;如果规则很长,可以写在多列上,可以用\号来续行
/etc/sudoers 的规则可分为两类;一类是授权规则,另一类是别名定义;别名定义并不是必须的,但授权规则是必须的
- sudo命令授权规则
root ALL=(ALL) ALL
you ALL=(ALL) ALL
将you用户设置为拥有所有权限 第一个ALL是指网络中的主机 第二个括号里的ALL是指目标用户,最后一个ALL是指命令名
you localhost=/usr/bin/lastb
限制用户的权限,只执行lastb
用户在linux主机上以you1或you2的身份执行kill命令: you linux=(deng,itcast) /bin/kill 把you1设为默认的目标用户: Defaults:foobar runas_default=you1 Defaults后面如果有冒号,是对后面用户的默认 如果没有,则是对所有用户的默认 you localhost=NOPASSWD: /bin/cat, /bin/ls 修改配置文件,登录了使用sudo不需要输入密码
让普通用户具有所有超级用户的权限而又不用输入密码 you ALL=(ALL)NOPASSWD:ALL
- sudo命令别名规则
Alias_Type NAME = item1, item2, ...
Alias_Type NAME = item1, item2 : NAME = item4, item5
Host_Alias 定义主机别名 User_Alias 用户别名,别名成员可以是用户和用户组(前面要加%号) Runas_Alias 用来定义runas别名,即sudo 允许切换至的用户 Command_Alias 定义命令别名
NMAE的命名是包含大写字母、下划线以及数字,必须以大写字母开头 item成员受别名类型 Host_Alias、User_Alias、Runas_Alias、 Command_Alias 制约,什么类型的别名要有什么类型的成员相配
定义用户别名,下有四个成员,要在系统中确实在存在的 User_Alias SYSAD=beinan,linuxsir,bnnnb,lanhaitun 定义用户别名NETAD User_Alias NETAD=beinan,bnnb 定义用户别名WEBMASTER User_Alias WEBMASTER=linuxsir 上面三行的别名定义,可以通过这一行来实现 User_Alias SYSAD=beinan,linuxsir,bnnnb,lanhaitun :NETAD=beinan,bnnb:WEBMASTER=linuxsir
命令别名下的成员必须是文件或目录的绝对路径 Cmnd_Alias NETMAG=/sbin/ifconfig,/etc/init.d/network