在UNIX系统中,超级用户掌握着系统的所有权限。但在某些情况下,我们希望普通用户也能执行关机命令,而不具备其它的超级权限。
为了使普通用户具备关机权限,我们需要创建一个专门进行关机的用户,将它的sh修改为我们指定的关机程序。具体操作如下:
首先,我们在UNIX系统中正常建立一halt用户,在建立时我们可以设置该用户为无口令用户。然后,用 vi 编辑器修改 /etc/passwd 文件。将我们刚建立的 halt 用户一行的内容修改为:
halt:0:1:/etc:/etc/halt
即该用户具有超级用户权限,但是它的启动目录为/etc,执行的sh为我们指定的可执行程序/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
将以上内容用vi编辑器编辑保存为 /etc/halt,并将该文件的权限修改为一般用户可读可执行即可。
这样,一般用户只需在“Login:”状态下输入halt 用户名,即可实现系统的自动关闭。当然,若此时系统中有其它用户尚未退出,则会给出提示信息,而不会自动强行关闭系统。另外该关机用户在终端上不能关闭系统,这也提高了系统的安全性。
wendy69 回复于:2003-02-20 22:15:56 |
有人试过吗?我试了一下,不好用,严格按照文中所写操作,halt 文件是用原文copy的,还有什么地方不对呢? |
htldm 回复于:2003-02-20 22:18:02 |
通过asroot实现也很好。 |
sdccf 回复于:2003-02-20 22:30:26 |
其实最好是用asroot命令. |
wendy69 回复于:2003-02-20 22:37:28 |
如下修改后即可。
halt:0:3:/usr/halt:/etc/halt |
muzx 回复于:2003-02-20 22:45:58 |
其实不用这么复杂。
1.按照楼主的办法建一个用户,不过用户的家目录放在/usr下 2.用户的.profile文件中屏蔽掉中断键, 3.直接执行shutdown 4.将这个用户的密码告诉你可信赖的用户。 5.定期修改该用户的密码。 不过现在的服务器好像不常关机,这种方法只是应急使用而已。 |
wendy69 回复于:2003-02-20 22:47:59 |
事实上,在对passwd 中的halt 修改(halt:0:3:/usr/halt:/etc/halt)后,在注册halt 时系统直接执行了/etc/haltsys ,这说明仍不尽人意。 |
dot50 回复于:2003-02-20 23:52:38 |
写.profile:
exec haltsys |
wendy69 回复于:2003-02-21 00:07:30 |
差不多了! |
Nestle 回复于:2003-02-22 14:47:07 |
偶用asroot。增加ID为0的用户这种方法,造成安全隐患。 |
wendy69 回复于:2003-02-22 14:59:02 |
没用过asroot,能介绍一下吗? |
lovqing 回复于:2003-02-22 15:03:57 |
[quote:693e7608bb="muzx"]其实不用这么复杂。
1.按照楼主的办法建一个用户,不过用户的家目录放在/usr下 2.用户的.profile文件中屏蔽掉中断键, ..........[/quote:693e7608bb] 在.profile怎麼屏蔽掉中断键????? |
Nestle 回复于:2003-02-22 15:40:52 |
[quote:8779d61ea3="lovqing"]
在.profile怎麼屏蔽掉中断键?????[/quote:8779d61ea3] trap 1 2 3 15 " " 后面那几个是信号, 按需要换成自己要屏蔽的信号就可以了。 |
sdccf 回复于:2003-02-22 16:23:26 |
trap continue 2 |
htldm 回复于:2003-02-22 20:53:43 |
trap "" 1 2 3 15 |
muzx 回复于:2003-02-22 21:43:11 |
stty -istrip -isig |
xyz.me 回复于:2003-03-10 22:34:10 |
任意建立一个普通用户,通过scoadmin授权给它shutdown权限,把改用户的.profile的最后两行去掉,然后添加
trap exit 2,3 /tcb/bin/asroot shutdown -y -g0 |
wzy 回复于:2003-03-12 12:11:31 |
Unix系统中实现普通用户正常关机
在unix系统中,出于对系统安全的考虑,属于系统管理方面的许多命令,普通用户是不能使用的,其中包括关机命令。但是在某些情况下,我们希望普通用户也能够容易地操作执行关机命令,但不具备其他的系统管理方面命令。为此,系统管理员可以创建一用户,专门实现关机操作。 方法一:先正常创建一普通用户, 假设为off,其次, 在SCO Unix 3.2 v 4.2环境下: (1) 使用sysadmsh命令,选择操作过程是: Account→User→Examinerivileges 在屏幕显示中的子系统授权行 Subsystem :Specify[Default]authorizations:[…] 点击Specify,选择shutdown确定 (2) vi /usr/off/.profile 添加 exec /tcb/bin/asroot shutdown –y –g0 (3) integrify 对照鉴别数据库检查系统文件 (4) fixmog 自动修正integrity所查出的问题 在SCO Open Server5.0环境下: (1) usermod –x “{auths {shutdown}}” off (二级子系统授权shutdown) (2),(3),(4)步设置同SCO Unix 3.2 v 4.2 方法二:正常创建一用户,然后修改/etc/passwd文件,该文件中每行标准格式为: username:passwd:UID:GID:comment:directory:program 将对应记录行中的用户ID号改为0,用户所使用的shell程序改为 shutdown. 如创建一用户off用于关机: (1) 建立off用户 (2) 修改/etc/passwd文件. 假设off对应记录行为:off:200:50::/usr/off:/bin/sh 将其改为: off:0:50::/usr/off:/etc/shutdown 方法三:类似方法二,如增加一关机用户off: (1) 建立off 用户 (2) 修改/etc/passwd文件。 假设off对应记录行为:off:200:50::/usr/off:/bin/sh 将其改为:off:0:50::/usr/off:/bin/sh (3)vi /usr/off/.profile,最后行末添加exec shutdown –y –g0 off关机用户建成。 (方法二,方法三对于SCO Unix 3.2 v 4.2和SCO Open Server5.0均适用) 只要运用以上方法之一种后,一般用户只需在“Login:”状态下输入off,就能够实现系统自动关闭。 |
可怜的笨笨鱼 回复于:2003-07-27 20:18:01 |
请教trap什么意思,怎么用? |
李宏 回复于:2003-08-16 22:55:33 |
其实不用修改/etc/passwd文件也可以实现!将/etc下的init文件拷入你建的关机用户下,修改其权限,你就可以在普通用户下执行“init 0”实现关机了。如你的关机用户为“halt”,具体说明如下:
#pwd cd /usr/halt #cp /etc/init . #chmod 777 init #chmod a+s init |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/