晚上没事干,翻看自己以前的笔记,将关于sudo的笔记稍作整理,记录下来。
sudo可以以另外一个用户的身份通过某个主机执行某些命令,但是不需要切换到该用户(有点类似于suid),仅仅可以执行指定的命令(一般来讲都是以root身份来执行一些管理类的命令)。
sudo的配置文件/etc/sudoers,该文件只有root用户和root组可查看:
该文件可以直接vim编辑,但不建议这么做,因为vim不会检查该文件的语法错误,若语法有错,则有可能造成系统级别的问题。推荐是visudo命令进行编辑。
语法格式:谁可以通过哪些主机连接进来以谁的身份执行哪些命令
who which_host=(runas) command
who:可以使用用户别名,将某些用户定义到一个组中统一管理
which_host:可以使用主机别名,将某些主机定义到一个组中统一管理
runas:runas_alias
commad: cmnd_alis,可以使用命令别名,将某些命令定义到一个组中统一管理
sudo的别名机制,别名的名字全部且只能使用大写字母,man sudoers查看关于别名的定义。
用户别名,可以包含用户的用户名,组名(%组名),还可以包含其他已经定义好的用户别名(!可以取反 !test 除了test用户之外)
主机别名:可以包含主机名,IP地址,网络地址或者是其他定义好的主机别名
命令别名:命令要使用绝对路径,此目录内的所有命令,或者其他定义好的命令别名
runas别名:用户名,%组名,其他定义好的runas别名
sudo具体设置:
如:管理员可以通过任何主机以任何用户的身份执行所有命令
定义jack2用户可以通过所有主机以root用户执行useradd,usermod命令
sudo默认情况在用户第一次输入密码后,5分钟之内不需要再次输入密码,sudo -k命令可以清除密码缓存,让此前输入的认证信息失效:
sudo -l 列出当前用户可以试用的所有的sudo命令
sudo -k 让认证信息失效
sudo也可以定义用户不需要输入密码,即可执行命令,在命令之前加入NOPASSWD即可
上面方式表名执行useradd和usermod都不需要密码,如果现在需要执行useradd不需要密码但执行usermod需要输入密码,则需要以下定义
使用别名:
/var/log/secure记录所有sudo 相关操作的所有日志