游乐游手机版
首页/系统平台/文章详情

UNIX让普通用户具备关机权限的操作方法

时间:2026-04-15 17:48
在UNIX系统中赋予普通用户安全的关机权限 在UNIX系统里,关机操作通常被划归为超级用户的核心权限之一,这很好理解,毕竟这关系到整个系统的生死。不过,在实际的运维场景中,我们常常会遇到一个矛盾的需求:既希望普通用户能执行关机操作(比如在公共机房的终端机旁),又必须严格限制他们获得任何其他超级权限。

在UNIX系统中赋予普通用户安全的关机权限

在UNIX系统里,关机操作通常被划归为超级用户的核心权限之一,这很好理解,毕竟这关系到整个系统的生死。不过,在实际的运维场景中,我们常常会遇到一个矛盾的需求:既希望普通用户能执行关机操作(比如在公共机房的终端机旁),又必须严格限制他们获得任何其他超级权限。这该怎么实现呢?

一个巧妙且经典的思路是,创建一个“专用”的关机用户。这个用户的终极使命就是执行关机,除此之外啥也干不了。实现方法的核心,在于修改该用户的登录Shell(sh),将其指向一个我们自定义、有严格逻辑控制的关机程序。下面,我们就来看看具体的操作步骤。

步骤一:创建专用用户并修改配置

首先,像创建普通用户一样,在系统中新建一个名为 halt 的用户。为了简化登录过程,可以将其设置为无需密码。接下来,才是关键操作:用vi编辑器打开 /etc/passwd 文件,找到halt用户对应的那一行,将其修改为如下内容:

halt:x:0:1:/etc:/etc/halt

这行配置信息大有玄机:它让halt用户拥有了超级用户身份(UID为0),但其主目录被设定为/etc,更关键的是,其登录Shell被指定为/etc/halt——这正是我们要编写的自定义关机程序。

步骤二:编写智能关机脚本

现在,我们需要创建这个核心的 /etc/halt 可执行文件。它的任务不仅仅是执行关机,还要具备安全检查能力,防止在仍有其他用户在线时误操作。脚本内容如下:

HALT_TERMINAL=`tty`
case "$HALT_TERMINAL"
in
/dev/tty0[1-9]|/dev/tty1[012])
w -h | fgrep -v halt > /dev/null
if [ $? = 0 ]
then
clear
echo "\n\n\n\n\n\n"
setcolor red black
echo " [ 普通用户关机程序 ] ** 警告** "
setcolor yellow black
echo "以下用户未退出系统无法自动关机。请选择关机方式:\n"
echo " 注册用户注册终端号"
w -h | fgrep -v halt | awk '{print " " $1 " " $2}'
echo " \n\n "
echo " 1: 中断关机程序。"
echo " 2: 系统强行关闭计算机。(可能会造成数据丢失)\n\n"
while true
do
echo -n " 请选择:"
read select
if test "$select"= 1
then
setcolor white black
clear
exit 1
else
if test "$select"=2
then
setcolor white black
/etc/haltsys
fi
fi
done
else
cd /usr/tmp
rm -f *
cd
/etc/haltsys
fi
echo "\n\n 普通用户关机程序不能在终端上运行!!"
esac
exit

这个脚本做了几件重要的事:首先,它通过tty命令判断调用来源,限制了该程序只能在特定的虚拟终端上运行(如tty01到tty12),这本身就是一道安全护栏。其次,在执行关机前,它会用w -h命令检查系统内是否还有其他登录用户(排除自己)。

如果发现有其他用户在线,脚本不会蛮干,而是会清晰列出在线用户信息,并给出两个选择:要么放弃关机,要么坚持强行关机(并给出数据丢失的风险提示)。只有当确认没有其他用户时,它才会先清理/usr/tmp目录,然后调用真正的关机命令/etc/haltsys

步骤三:设置权限并投入使用

vi编辑器将上述脚本保存为/etc/halt文件后,别忘了通过chmod命令,将其权限设置为普通用户可读和可执行。至此,所有配置就完成了。

现在,普通用户只需要在登录提示符“Login:”后输入用户名halt,就能启动这个安全的关机流程。整个过程既满足了便利性需求,又通过多层检查(终端限制、用户在线检查、二次确认)极大保障了系统安全,防止了误关机导致的数据丢失或工作中断。

这套方案思路清晰,兼顾了灵活与安全,在SCO Open UNIX 5.0等操作系统环境中被验证为可靠有效。它生动地展示了UNIX系统如何通过权限和资源的精巧配置,来实现既严格又实用的访问控制。

来源:https://www.jb51.net/os/Unix/1469.html
上一篇freebsd 单一网卡配置多个IP 下一篇FreeBSD 里面用设置 ADSL宽带上网
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Linux tail -f命令实操:实时查看文件增长内容
系统平台 · 2026-06-07

Linux tail -f命令实操:实时查看文件增长内容

在Linux环境下排查系统故障时,实时监控日志文件的内容增长是最常用的诊断手段之一。而tail -f命令,无疑是大家最先想到、也最直接的工具。不过,它并非万能解决方案。简单来说,它只负责“追加”监听,对于日志滚动、文件轮转或者权限变更这些生产环境里的常见场景,它就显得力不从心了。 你是否遇到过这样的

Windows批量删除注册表残留提升系统响应速度教程
系统平台 · 2026-06-07

Windows批量删除注册表残留提升系统响应速度教程

你的Windows是不是越用越迟钝?明明已经卸载的软件,却仍在“设置”的应用列表里挥之不去,甚至在“此电脑”里留下几个失效的图标?这多半不是错觉,而是注册表里堆积了太多“垃圾”——那些无效的卸载项、空壳的扩展键,如同系统里散落的“幽灵文件”,拖慢了响应速度,也扰乱了界面整洁。 不必忧虑,清除这些残留

修复Windows无法连接iPhone15/16热点超时问题
系统平台 · 2026-06-07

修复Windows无法连接iPhone15/16热点超时问题

遇到Windows电脑始终无法连接iPhone 15或16的个人热点,确实令人困扰。屏幕上要么持续转圈,要么显示“正在获取IP地址”、“连接超时”,甚至Wi-Fi列表中根本搜不到热点信号。请放心,这通常并非硬件损坏,而是由常见的软件兼容性或系统设置冲突引起的。下面这套系统化的排查方案,能帮助你逐步定

Win11无法识别NVMe硬盘?修复主板BIOS识别SSD教程
系统平台 · 2026-06-07

Win11无法识别NVMe硬盘?修复主板BIOS识别SSD教程

新购置的NVMe固态硬盘已经正确安装到主板上,但Windows 11系统中却始终无法识别?先别担心是硬盘故障,这通常是系统在底层沟通环节出现了小问题。从BIOS UEFI参数配置、驱动程序兼容性到物理连接状态,任何一个环节的细微偏差都可能导致系统无法正常检测到硬盘。接下来,我们将按照故障排查的逻辑顺

Win11多桌面切换手势开启教程 提升触控板操作效率
系统平台 · 2026-06-07

Win11多桌面切换手势开启教程 提升触控板操作效率

Windows11触控板四指左右滑动可切换虚拟桌面以提升效率。若手势失效或设置选项缺失,需确认触控板为精密触控板,并通过系统设置启用功能。若选项不可用,可尝试修改注册表、执行PowerShell命令或检查虚拟桌面功能是否开启,以恢复手势支持。