当前位置: 首页 > Linux

sudo授权需谨慎,不然亲人哭了!6个超实用Tips

时间:2023-04-06 04:55:57 Linux

Sudo授权需谨慎,不然亲人哭了!sudo代表“superuserdo”,它允许经过身份验证的用户像其他用户一样运行命令。其他用户可以是普通用户或超级用户。但是,大多数时候我们使用它来以提升的权限运行命令,而不是直接使用root用户。sudo命令与安全策略结合使用,可以通过文件/etc/sudoers.conf来配置。其安全策略具有高度可扩展性并支持插件扩展。默认情况下,/etc/sudoers不能被任何人直接编辑,因为它的权限是440。虽然授予写权限后也可以编辑,但是建议使用visudo命令编辑该文件。工作模式理解简述其使用流程和配置文件配置!了解sudo命令的工作流程sudo读取并解析/etc/sudoers文件以查找调用该命令的用户及其权限。然后提示调用该命令的用户输入密码,或者可以通过传递NOPASSWD标志来跳过密码验证。之后sudo创建一个子进程调用setuid()切换到目标用户。优选地,它将在上述子进程中执行给定的shell或命令。理解sudo命令授权配置USER/GROUPHOST=(USER[:GROUP])[NOPASSWD:]COMMANDSUSER/GROUP:表示需要授权的用户或组;如果是组,需要以%HOST开头:表示允许从哪些主机登录用户运行sudo命令;ALL表示允许从任何终端或机器访问(USER[:GROUP]):表示使用sudo切换用户或组,组不能指定;ALL表示切换到系统所有用户NOPASSWD:如果指定,用户或组使用sudo时不需要输入密码COMMANDS:表示运行指定的命令;ALL表示允许执行所有命令#允许sudo组执行所有命令%sudoALL=(ALL:ALL)ALL#允许用户执行所有命令,不需要密码escapeALL=(ALL)NOPASSWD:ALL#只允许用户执行echo、ls命令escapeALL=(ALL)NOPASSWD:/bin/echo/bin/ls#运行本机的用户执行关机命令escapelocalhost=/sbin/shutdown-hnow#允许users用户组中的用户使用mount、unmount、chrom命令类似root用户triestoenterpassword,defaultvalueis3Defaultspasswd_tries=5#设置密码超时时间,默认为5分钟Defaultspasswd_timeout=2默认sudo询问用户自己的密码,添加targetpw或rootpw配置可以让sudo询问root密码defaultstargetpw#指定一个自定义日志文件defaultslogfile="/var/log/sudo.log"#要在自定义日志文件中记录主机名和四位数年份,可以添加log_host和log_year参数Defaultslog_host,log_year,logfile="/var/log/sudo.log"#保持当前用户的环境变量Defaultsenv_keep+="LANGLC_ADDRESSLC_CTYPECOLORSDISPLAYHOSTNAMEEDITOR"Defaultsenv_keep+="ftp_proxyhttp_proxyhttps_proxyno_proxy"#安装一个安全的PATH环境变量Defaultssecure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin《使用技巧总结》主要介绍sudo相关命令的使用技巧和问题解决方法!如何将visudo编辑器从nano更改为vim?当我使用visudo命令时,它总是使用nano编辑器打开它。对于习惯使用vi或vim的用户来说,似乎有点别扭,操作起来也不容易。那么,如何更好的将visudo编辑器从nano改成vim就变得很重要了。最好的解决办法是调用命令将终端编辑器永久替换为vim编辑器,一劳永逸。我们只需要执行下面的命令,输入我们需要的编辑器的序号并回车即可。下次执行visudo命令时,将使用vim编辑器打开该文件。#因为/etc/sudoers普通用户无法打开使用$sudoupdate-alternatives--configeditor备选编辑器有4种选择(提供/usr/bin/editor)。选择路径优先级状态--------------------------------------------------------*0/bin/nano40自动模式1/bin/ed-100手动模式2/bin/nano40手动模式3/usr/bin/vim.basic30manualmode4/usr/bin/vim.tiny10manualmodePressentertokeepthecurrentchoice[*],ortypeselectionnumber:3第二种方案是通过环境变量修改当前终端的默认编辑器。#在.zshrc或.profile文件中$exportEDITOR=vim;#希望实现对visudo生效$sudoEDITOR=vimvisudo#或者修改/etc/sudoers文件的默认编辑器Defaultseditor=/usr/bin/vimVim如何强制保存只读文件?在使用vim时,普通用户打开一个只有root用户有操作权限的文件时,编辑后保存时发现该文件没有修改权限。好不容易编辑完文件,却无法保存,只能作罢,然后退出,用root权限打开,重新编辑,好痛苦!那么有没有什么好的方法可以解决这个问题呢?咳咳咳,一定有。#在Vim命令模式下执行强制保存#w:表示保存文件#!:表示执行外部命令#tee:表示将数据重定向到给定的文件和屏幕#%:执行外部命令时,%将扩展成为当前文件名:w!sudotee%以上方法完美解决了只读文件无法保存的问题,但毕竟命令还是有点长。为了避免每次输入一长串命令,可以映射到一个简单的命令添加到.vimrc。这样,只需运行:w!!,命令的后半部分>/dev/null用于显式丢弃标准输出的内容。"当我忘记使用sudo.cmap启动vim时允许将文件保存为sudow!!w!sudotee>/dev/null%如何更安全地编辑文件?Sudoedit是一个允许用户编辑文件的内置命令安全。根据sudo手册页,sudoedit相当于使用-e命令行选项执行sudo。那么此命令的作用是,它首先创建要编辑的文件的临时副本。然后,该命令搜索SUDO\_EDITOR、VISUAL和EDITOR环境变量(按此顺序)确定应该调用哪个编辑器来打开刚刚创建的临时副本。当用户完成修改工作时,更改将被复制回原始文件。#Sudo命令手册页-e,--edit编辑一个或多个文件而不是运行命令。在查询安全策略时,使用字符串“sudoedit”代替路径名。如果用户被策略授权,则采取以下步骤:1.对要编辑的文件制作临时副本,并将所有者设置为调用用户。2.运行策略指定的编辑器编辑临时文件。sudoers策略使用SUDO_EDITOR、VISUAL和EDITOR环境变量(按此顺序)。如果SUDO_EDITOR、VISUAL或EDITOR均未设置,则使用编辑器sudoers(5)选项中列出的第一个程序。3.如果它们已被修改,则将临时文件复制回其原始位置并删除临时版本。如果指定的文件不存在,将创建该文件。请注意,与sudo运行的大多数命令不同,编辑器是在调用用户未修改环境的情况下运行的。如果由于某种原因sudo无法启动用编辑后的版本更新文件,用户将收到警告,编辑后的副本将保留在临时文件中。我怎样才能让sudo会话时间随心所欲?sudo命令是一种授权命令,在生产环境中非常常用。默认情况下,sudo命令会话时间为15分钟。设置sudo密码超时值,需要使用passwd\_timeout参数来设置。您可以在几分钟内将其设置为您想要的任何时间,它会一直等到超时。如果您希望为每个执行的sudo命令弹出密码提示,您也可以将时间设置为0,或者通过将值设置为-1来永久禁用密码提示。#设置超时时间#表示sudo密码提示在用户使用20分钟后过期Defaultsenv_reset,timestamp_timeout=20如何更安全的授权服务器权限?对于我们管理的服务器,开发人员或者其他人员需要登录服务器调试环境或者重现问题。这个时候我们就需要开启对应用户的登录访问权限。但是如果我们直接编辑/etc/sudoers这个文件,我就需要在对方用完后自己手动清理一下。如果我们忘记了,开发者或其他人员将始终能够登录服务器,就会存在一定程度的安全问题。遗憾的是,对于临时授权,在/etc/sudoers文件中并没有相应的配置,只能在指定的时间范围内对用户或用户组进行授权。当用户到达指定时间点时,将拒绝用户再次登录。对应这种情况,我们可以通过crontab定时任务和/etc/sudoers.d目录的机制来完美解决上述问题。我们使用定时任务的定时执行目录,定时删除/etc/sudoers.d/目录下的用户或用户组的授权配置文件。比如我们需要每天删除临时授权的用户或者用户,可以创建rm-rf命令删除/etc/cron.daily目录下的/etc/sudoers.d/目录,然后定时自动删除。对于授权用户,我们使用在/etc/sudoers.d/目录下单独创建一个配置文件,而不是直接修改/etc/sudoers文件。#crontab有多种定时机制#下面分别代表每天、每小时、每月、每周定时执行$ls-dl/etc/cron.*|grep-vcron.d$drwxr-xr-x2rootroot4096May1506:18/etc/cron.dailydrwxr-xr-x2rootroot4096Feb142019/etc/cron.hourlydrwxr-xr-x2rootroot4096Feb142019/etc/cron.monthlydrwxr-xr-x2rootroot4096Jun1809:57/etc/cron.weekly#创建单独的授权配置文件$ls-lh/etc/sudoers.d/-r--r-----1rootroot666Oct62017lisi-r--r-----1rootroot958Jan182018zhangsan#查看授权配置文件内容$cat/etc/sudoers.d/zhangsanALLALL=(root)NOPASSWD:zhangsan如何解决sudo命令找不到环境变量?我们在日常使用sudo命令的时候,经常会遇到切换用户后,为什么会发现之前设置的环境变量不见了呢?这是因为我们执行完sudo命令后会切换用户。如果保留环境变量,会存在一定的安全问题。系统默认会将环境变量重置为安全环境变量。之前设置的变量将失效,只能保留配置文件中指定的少数环境变量。我们可以查看sudo的配置文件/etc/sudoers来找出原因。我们执行下面的命令后,可以看到如下输入(这里可能和我的不一样)。其中env_reset表示默认会重置环境变量,这样我们自定义的变量在sudo命令执行后就会失效,无法正确获取变量值。而env_keep的意思就是用来保持一些环境变量不被重置,需要保持的变量写在双引号里面,需要保持的变量可以自己添加。最后是secure_path变量,它的作用是将包含的路径作为sudo环境的PATH变量。如果在sudo环境下找不到某些命令,可以在配置项中加入这些命令的路径。$sudosed'/^#/d;/^$/d'/etc/sudoersDefaultsenv_resetDefaultsenv_keep="COLORSIDSPLAYHOSTNAMEHISTSIZELS_COLORS"Defaultsenv_keep+="MAILPS1PS2QTDIRUSERNAMELANGLC_ADDRESS"Defaultssecurer/path="/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin”知道原因后我们就可以做出不同的处理方法来解决上面的情况了sudo命令找不到环境变量。第一种方案是在使用的时候加上-E参数。添加-E选项后,用户在执行sudo时可以保留当前用户已有的环境变量,不会被sudo重置。另外,如果用户对指定的环境变量没有权限,也会报错。需要注意的是,在内测机中,在对安全性要求不高的情况下使用。$sudosudo-E第二种方案是修改sudo配置文件。可以通过修改/etc/sudoers文件中的env\_keep和secure\_path配置项来指定sudo环境中需要保留的环境变量和路径。当然我们也可以把配置文件的变量!env\_reset去掉,这样就不会有限制了。$sudovim/etc/sudoersDefaults!env_reset作者:Escape链接:https://www.escapelife.site/p...