如何让root用户以普通用户身份使用sudoedit?
如何让root用户以普通用户身份使用sudoedit?
嘿,这个问题我太懂了!你想让root身份下调用的sudoedit,行为和普通用户直接敲sudoedit完全一致——也就是临时编辑文件属于最初的普通用户,而不是root,对吧?毕竟sudoedit的最佳实践就是保持临时文件的归属和原用户一致,避免后续权限踩坑。
其实核心思路很简单:让root以原始普通用户的身份去触发sudoedit。这里可以借助sudo的-u参数指定执行用户。当你通过sudo切换到root时,环境变量$SUDO_USER会自动记录下最初的普通用户是谁,我们就用这个变量来精准指定身份。
给你修改后的脚本片段,直接替换你原来的逻辑就行:
#!/bin/bash # 检查是否以root身份运行,且参数是单个文件 if [[ $# -eq 1 ]] && [ -f "$1" ] && [ "$EUID" -eq 0 ] then # 特殊处理/etc/sudoers,用专用的visudo更安全 if [[ $(realpath "$1") == "/etc/sudoers" ]] then echo "Using visudo to edit $1" visudo else # 检查是否有通过sudo切换来的原始用户 if [[ -n "$SUDO_USER" ]] then echo "检测到你正在编辑不属于root的文件,将以$SUDO_USER身份调用sudoedit" sudo -u "$SUDO_USER" sudoedit "$1" else echo "警告:当前是直接登录的root账户,无法还原到普通用户身份执行sudoedit" # 这里可以根据需求调整,比如让用户手动指定用户,或者直接用vim编辑 vim "$1" fi fi else # 非root情况,直接调用vim vim "$@" fi
还要提醒你几个细节:
- 所有变量都加双引号,避免文件名带空格、特殊字符时出错
- 如果是直接登录的root(比如
su -或者控制台登录),$SUDO_USER是空值,这时候没法还原到普通用户,所以加了提示避免报错 /etc/sudoers还是保留用visudo,这是专门针对sudoers文件的安全编辑工具,比sudoedit更适配
这样修改后,当你通过sudo切换到root、再用这个wrapper编辑普通用户的文件时,sudoedit就会以原始普通用户的身份运行,临时文件归属和普通用户直接调用sudoedit完全一致,完美符合安全最佳实践~
备注:内容来源于stack exchange,提问作者aaaalz
相关产品推荐
相关产品推荐

