File: 1.html

package info (click to toggle)
lg-issue41 2-4
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,724 kB
  • ctags: 156
  • sloc: makefile: 36; ansic: 8; sh: 4
file content (155 lines) | stat: -rw-r--r-- 5,395 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<!--startcut ======================================================= -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<META NAME="generator" CONTENT="lgazmail v1.1J.e">
<TITLE>The Answer Guy 41: How to Make a Shell Script "Unbreakable"</TITLE>
</HEAD><BODY BGCOLOR="#FFFFFF" TEXT="#000000"
	LINK="#3366FF" VLINK="#A000A0">
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<H4>"The Linux Gazette...<I>making Linux just a little more fun!</I>"</H4>
<P> <hr> <P>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<center>
<H1><A NAME="answer">
	<img src="../../gx/dennis/qbubble.gif" alt="(?)" 
		border="0" align="middle">
	<font color="#B03060">The Answer Guy</font>
	<img src="../../gx/dennis/bbubble.gif" alt="(!)" 
		border="0" align="middle">
</A></H1> 
<BR>
<H4>By James T. Dennis,
	<a href="mailto:answerguy@ssc.com">answerguy@ssc.com</a><BR>
	LinuxCare,
	<A HREF="http://www.linuxcare.com/">http://www.linuxcare.com/</A> 
</H4>
</center>

<p><hr><p>
<!--  endcut ======================================================= -->
<!-- begin 1 -->
<H3 align="left"><img src="../../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>How to Make a Shell Script "Unbreakable"</H3>


<p><strong>From Nick Moffitt  on Mon, 29 Mar 1999  
</strong></p>
<!-- ::
How to Make a Shell Script "Unbreakable"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG><IMG SRC="../../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
How do I get a shell script to ignore ^C and ^Z?
</STRONG></P>
<P><em>
"The software is intended to be as unobtrusive, unintrusive and
unconstraining as possible.  In software as elsewhere, good
engineering is whatever gets the job done without calling attention to
itself." 
<br>-- Cynbe ru Taren, on Citadel (<A HREF="http://zork.net/cit/citadel.txt"
	>http://zork.net/cit/citadel.txt</A>)
</em></P>
<BLOCKQUOTE><IMG SRC="../../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Well, with limitations you can do it with the
following:
</BLOCKQUOTE>
<BLOCKQUOTE><pre>
trap ""  2  20
</pre></BLOCKQUOTE>
<BLOCKQUOTE>
As in this simple script example:
</BLOCKQUOTE>

<blockquote><pre>#!/bin/bash
trap ""  2 20
while : ; do
	echo -n .
	sleep 1
	done
</pre></blockquote>
<BLOCKQUOTE>
All I'm doing is setting the INTerrupt and terminal
stop signal handlers to a null string (to ignore
[Ctrl]+[C]) and [Ctrl]+[Z]).
</BLOCKQUOTE>
<BLOCKQUOTE>
The rest of the script just prints an endless stream
of dots at one second intervals to give you a chance
to play with the keyboard.
</BLOCKQUOTE>
<BLOCKQUOTE>
You see, your default terminal settings "cook" the
[Ctrl]-[C] into a <tt>SIGINT</tt> (generate a interrupt signal
to the foreground task) and [Ctrl]-[Z] to a <tt>SIGTSTP</tt>.
The default signal handlers for these "cancel/exit"
and "suspend" respectively.
</BLOCKQUOTE>
<BLOCKQUOTE>
This technique will also prevent  '<tt>kill -INT</tt>' and
'<tt>kill -TSTP</tt>' from having their normal affect on
these processes.
</BLOCKQUOTE>
<BLOCKQUOTE>
You could also do something like this using
</BLOCKQUOTE>

<blockquote><pre>		stty susp 0 intr 0
</pre></blockquote>
<BLOCKQUOTE>
... which merely changes the terminal settings so that
these keystrokes are no longer "cooked" into their
usual signals.
</BLOCKQUOTE>
<BLOCKQUOTE>
I believe that these tricks are inherently subject to
race conditions (there is a finite and "exploitable" amount
of time between the start of the script's execution and
the time that these commands have their effect.
</BLOCKQUOTE>
<BLOCKQUOTE>
So I think that they should not be used in any attempt to
provide security through some notion of an "unbreakable"
shell script.
</BLOCKQUOTE>
<!-- sig -->

<!-- end 1 -->
<!--startcut ======================================================= -->
<P> <hr> <P>
<H5 align="center"><a href="http://www.linuxgazette.com/ssc.copying.html"
	>Copyright &copy;</a> 1999, James T. Dennis 
<BR>Published in <I>The Linux Gazette</I> Issue 41 May 1999</H5>
<P> <hr> <P>
<!-- begin tagnav ::::::::::::::::::::::::::::::::::::::::::::::::::-->
<TABLE WIDTH="96%"><TR VALIGN="center" ALIGN="center">
<TD ROWSPAN="1" COLSPAN="1" WIDTH="30%"><A HREF="../lg_answer41.html"
	><IMG SRC="../../gx/dennis/answernew.gif"
              ALT="[ Answer Guy Index ]"></A></td>
  <TD WIDTH="10%"><A HREF="1.html">1</A></TD>
  <TD WIDTH="10%"><A HREF="2.html">2</A></TD>
  <TD WIDTH="10%"><A HREF="3.html">3</A></TD>
  <TD WIDTH="10%"><A HREF="4.html">4</A></TD>
  <TD WIDTH="10%"><A HREF="5.html">5</A></TD>
  <TD WIDTH="10%"><A HREF="6.html">6</A></TD>
</TR></TABLE>
<!-- end tagnav ::::::::::::::::::::::::::::::::::::::::::::::::::::-->
<P> <hr> <P>
<!-- begin lgnav ::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<A HREF="../lg_toc41.html"
	><IMG SRC="../../gx/indexnew.gif" ALT="[ Table Of Contents ]"></A>
<A HREF="../../index.html"
	><IMG SRC="../../gx/homenew.gif" ALT="[ Front Page ]"></A>
<A HREF="../lg_bytes41.html"
	><IMG SRC="../../gx/back2.gif" ALT="[ Previous Section ]"></A>
<A HREF="../lg_tips41.html"
	><IMG SRC="../../gx/fwd.gif" ALT="[ Next Section ]"></A>
<!-- end lgnav ::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
</BODY></HTML>
<!--endcut ========================================================= -->