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

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宽带上网
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

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

同类最新

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

更多
Mac隐藏左上角菜单栏苹果图标
系统平台 · 2026-07-02

Mac隐藏左上角菜单栏苹果图标

先直接告诉你答案:Mac电脑屏幕左上角的那个苹果标志,既无法关闭,也无法隐藏。它是系统级的固定入口,所有macOS版本都会强制显示。苹果既没有提供开关选项,也没有预留终端命令,更不可能在系统偏好设置里让你找到隐藏开关。如果有人声称能用第三方工具或修改系统文件来删除它,千万别相信——结果很可能是系统不

Win11切换输入法的几种常用方法和快捷键设置
系统平台 · 2026-07-02

Win11切换输入法的几种常用方法和快捷键设置

写文档写得正顺,突然要敲几个英文单词,或者打代码时想切回中文拼音——手指条件反射地按下Ctrl+Space,光标却纹丝不动。这种场景你应该不陌生。Windows 11其实准备了五种互不干扰的切换方式,有些连锁屏界面都能响应,关键是你得选对场景来用。下面把这五种路径挨个拆开,看完你就能找到最适合自己的

电脑开机黑屏提示未检测到启动盘修复方法
系统平台 · 2026-07-02

电脑开机黑屏提示未检测到启动盘修复方法

电脑开机直接黑屏,屏幕上孤零零地显示一句“No boot disk has been detected”——别紧张,这并非系统崩溃,也不是常见的蓝屏代码,而是主板在告诉你:“我没有找到硬盘。”换句话说,电脑连BIOS自检阶段都没能通过。 这属于硬件层面的硬中断,与引导损坏、系统文件丢失完全不是一回事

Windows 11更改默认音频采样率级别的详细方法
系统平台 · 2026-07-02

Windows 11更改默认音频采样率级别的详细方法

Windows 11 用户在播放音频时,偶尔会遇到爆音、杂音甚至声音动态被压缩得干瘪的情况。这种问题通常并非硬件损坏,而是系统在音频采样率设定上“擅作主张”了。例如某次系统更新后,默认格式可能被悄然重置为 24 位 192000 Hz——一个不少声卡难以稳定运行的高规格,结果导致 DMA 缓冲溢出、

Win11如何查看笔记本实时充电功率
系统平台 · 2026-07-02

Win11如何查看笔记本实时充电功率

对于笔记本充电功率的实时监测,系统自带的电池图标只能显示“正在充电”或“已充满”,却无法告知具体的瓦数。要获得实时数值,需要绕过默认界面直接读取硬件传感器。这里直接给出结论:最可靠的工具是HWiNFO64,其次是BatteryInfoView,而powercfg只能用于间接验证。无论你遇到插着65W