Crontab 配置错误复盘:格式、路径与环境变量那些坑
一次说清 crontab 定时任务不跑的常见原因:时间字段写错、没写绝对路径、百分号没转义、环境变量没加载,附带排查思路。
支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-06-19 14:15:39 Linux sudo 权限管理
Linux 下控制 sudo 权限的地方就那一个文件:/etc/sudoers。
它负责决定谁能 sudo、能干多少事、干的时候要不要密码。配得合理,最小权限原则自然就落地了;配出问题,轻则权限乱飞,重则整个系统的 sudo 直接瘫痪,除了接显示器进单用户模式,没啥别的办法。
先说最要命的一点——这个文件别直接拿 vim、nano 之类的东西打开就改。必须用 visudo。因为 visudo 在保存之前会做一遍语法检查,有错它会指出来,并且阻止你保存。
很多新手第一反应就是 vim /etc/sudoers 改完 :wq,结果手滑多打一个逗号或空格,保存退出后 sudo 彻底崩掉。sudo visudo 是最稳的打开方式。
另一个保护自己、也方便团队协作的习惯,是把自定义规则扔到 /etc/sudoers.d/ 目录里。
主配置文件里一般有一行 #includedir /etc/sudoers.d,会自动加载该目录下所有以 .conf 结尾的文件。你可以建一个 dev-team.conf,把对开发组的权限全写进去,跟主文件隔离开。一旦规则写错了,直接把那个文件移走就行,不至于连累整个系统的 sudo 都死掉。生产环境尤其受用。
下面说说怎么写这些规则。格式其实不复杂,每行基本长这样:
谁 在哪台机器上=(能以谁的身份) 能执行哪些命令
开头的“谁”如果是普通用户就直接写用户名,比如 alice;如果前面带个 % 就是组,比如 %developers。
“在哪台机器上”一般填 ALL 就行,表示在所有主机上生效。括号里的 (ALL) 是允许你通过 sudo 切换到任意用户,通常够用。命令列表要写绝对路径,多个命令用逗号分开,写 ALL 就是不做限制。
免密执行就是在命令前面加 NOPASSWD:,比如这样:
alice ALL=(ALL) NOPASSWD: /usr/bin/apt update
这类配置在 CI/CD 脚本里很常见,脚本没法交互式输密码,就得靠这个。
如果想限制某些高危命令不让用,用 ! 就能挡掉。比如不让普通用户随意重启或关机:
%users ALL=(ALL) ALL, !/sbin/reboot, !/sbin/poweroff
这条表示 users 组的成员可以用所有命令,但 reboot 和 poweroff 例外。注意逗号和空格的位置,这里其实很容易踩坑。我见过在行尾随手打了个逗号的情况,比如 “alice ALL=(ALL) ALL,”,整个 sudo 就解析失败了。如果你没用 visudo 检查,保存那一刻就是悲剧的开始。
当需要管理一群人或一堆命令时,用别名会省很多事。命令别名可以这样定义:
Cmnd_Alias NETWORK = /sbin/ifconfig, /sbin/route %netops ALL=(ALL) NETWORK
用户别名也一样:
User_Alias ADMINS = alice, bob, charlie ADMINS ALL=(ALL) ALL
团队规模稍微大一点,用别名去组织比给每个人单独写一行要清爽得多,也容易 audit。
系统默认 /etc/sudoers 里有两个基础配置值得留个印象:
root ALL=(ALL:ALL) ALL %sudo ALL=(ALL:ALL) ALL
后者在 Ubuntu 或 CentOS 这类发行版里,就是让属于 sudo 组的用户能执行所有命令。如果你的日常账号已经在这个组里,基础权限其实不用额外配;但如果需要收窄,就在 sudoers.d 下另写规则覆盖或限制。
日志是另一件容易忽略、但真出了事又特别救命的事。加这两行进去:
Defaults logfile="/var/log/sudo.log" Defaults log_input, log_output
它会记录谁在什么时间用 sudo 跑了什么命令,以及命令的输入输出。等出了权限相关的线上故障,翻日志比猜原因快得多。
下面是一个放在 /etc/sudoers.d/custom.conf 里的完整片段,基本覆盖了上面聊到的点:
Defaults env_reset, secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
alice ALL=(ALL) NOPASSWD: /usr/bin/apt update bob ALL=(ALL) ALL, !/usr/bin/rm, !/usr/bin/mv
%developers ALL=(ALL) /usr/bin/git, /usr/bin/docker
Cmnd_Alias SYSTEM = /sbin/reboot, /sbin/shutdown %ops ALL=(ALL) SYSTEM
改完配置之后,别直接就下班。先切到对应用户上验证一下。用 sudo -u alice -i 进到 alice 的环境,然后跑 sudo -l,就能看到 alice 当前拥有的所有 sudo 权限。也可以直接模拟目标命令看效果:
sudo -u alice /usr/bin/apt update # 应该直接过,不弹密码 sudo -u bob /bin/rm /tmp/test # 应该被拒绝
确认行为跟预期一致了,再往其他机器上铺或者交付用。不然半夜电话一响,爬起来就是因为一个逗号或者漏掉的 ALL,那种感觉实在不想多来一次。
总归下来,打交道用 visudo、拆配置到 .d 目录、写完记得验证、顺手把日志开起来,这几条养成习惯,/etc/sudoers 就不是什么让人头疼的东西。
上一篇: Type-C 那 24 个脚,用对了几个
一次说清 crontab 定时任务不跑的常见原因:时间字段写错、没写绝对路径、百分号没转义、环境变量没加载,附带排查思路。
记录一次彻底修复GRUB引导的经历,覆盖配置文件写错、菜单消失、UEFI引导失败和分区表挂掉等典型场景,操作命令都整理在这。
本文为您详细解析Ubuntu系统字体安装与调整的全过程,从图形化工具Font Manager到命令行操作,助您轻松驾驭自定义字体。更有GNOME Tweak Tool深度美化秘籍,提升视觉体验。附带等宽字体使用提示,避免终端显示问题,让您的Ubuntu界面焕然一新。
本文深入探讨Linux系统下多种包管理工具(如APT、YUM、DNF、RPM)的软件卸载命令与最佳实践。从命令语法到配置文件处理,再到手动安装软件的清理技巧,提供一站式解决方案,确保系统纯净高效。
Linux系统下查看SSL证书有效期的三种方法:OpenSSL命令、Python脚本及浏览器查看。OpenSSL命令支持远程服务器和本地证书文件的查看,并可检查证书有效性;Python脚本提供编程方式获取证书信息;浏览器查看则适用于快速验证。文章还强调了证书格式处理和时间同步的重要性,并建议结合自动化监控定期检查证书有效期,确保网站安全性和可靠性。