CentOS cleans up utmp/wtmp on boot - why?

Giorgos Keramidas keramida at ceid.upatras.gr
Mon Oct 8 15:09:42 EEST 2007


On 2007-10-08 14:17, Alexandros Papadopoulos <apapadop at alumni.cmu.edu> wrote:
> Στη γραμμή 845 του /etc/rc.sysinit σε CentOS release 4.4 (Final) (σα
> να λέμε RedHat Enterprise Linux)  βλέπουμε πως σκίζουμε αλύπητα τη
> πληροφορία του ποιος είχε κάνει login στο σύστημα προηγουμένως:
> 
> # Clean up utmp/wtmp
> > /var/run/utmp
> touch /var/log/wtmp
> chgrp utmp /var/run/utmp /var/log/wtmp
> chmod 0664 /var/run/utmp /var/log/wtmp
> if [ -n "$_NEED_XFILES" ]; then
>   > /var/run/utmpx
>   touch /var/log/wtmpx
>   chgrp utmp /var/run/utmpx /var/log/wtmpx
>   chmod 0664 /var/run/utmpx /var/log/wtmpx
> fi
> 
> Υπάρχει κάποιος λόγος;

«Ο διάβολος είναι κρυμμένος στις σκιερές γωνίες των λεπτομερειών»

Το αρχικό comment λέει μαλακίες, καθώς δεν καθαρίζεται *και* το `wtmp',
αλλά μόνο το `utmp'.  Τα περιεχόμενα του `utmp' λένε ποιοί χρήστες είναι
logged in *ΤΩΡΑ*, οπότε είναι λογικό να μην έχουν νόημα ότι records
έχουν ξεμείνει εκεί από παλιότερα boots.  Τα περιεχόμενα του wtmp δεν
καθαρίζονται, απλά ενημερώνεται με `touch' το last modification time του
αρχείου.

> Θέλω να βλέπω με ένα
> # last
> όποιους έκαναν login στο σύστημα από την εποχή των παγετώνων, και όχι
> από το τελευταίο boot μόνο.

Τι σε εμποδίζει να το κάνεις ήδη αυτό; :)

> Κάνω απλά uncomment το σχετικό κομμάτι του rc.sysinit ή έχει κάποια
> χρησιμότητα;

Οχι, το αφήνεις όπως έχει.  Στην καλύτερη, στέλνεις ένα email με
βρισίδια στυλ «Κεραμίδας in rage» στον προγραμματιστή που έγραψε
το παραπλανητικό σχόλιο, και του προτείνεις κάτι σαν:

	#
	# Clean up `utmp' from any stale records, which are not applicable
	# after a reboot.  Then update the timestamp of `wtmp' and set the
	# permissions and owner of both files to their canonical values.
	#
	# The following variables are tunable in /etc/defaults/blah.conf
	# to control the location, ownership and permissions of the utmp
	# and wtmp files:
	#
	#	UTMPFILE, WTMPFILE
	#		The location of the utmp and wtmp file.  This should
	#		be an absolute pathname, to avoid depending on the
	#		current runtime directory of the /etc/rc.sysinit
	#		script or any other consumer of the variables.
	#
	#	UTMPOWN, WTMPOWN
	#		The owner of the utmp and wtmp files.
	#
	#	UTMPGRP, WTMPGRP
	#		The group which owns the utmp and wtmp files.
	#
	#	UTMPMODE, WTMPMODE
	#		The permissions of the utmp and wtmp files.
	#
	#	--- NOTE ---
	#	The UTMPOWN, WTMPOWN, UTMPGRP, and WTMPGRP values can be any
	#	values supported by the chown(8) utility, but it may be a good
	#	idea to avoid usernames which depend on NIS, LDAP or other
	#	distributed subsystems; they may not be available during the
	#	early stages of the boot process.
	#

	UTMPFILE="${UTMPFILE:-/var/run/utmp}"
	UTMPOWN="${UTMPOWN:-utmp}"
	UTMPGRP="${UTMPGRP:-wheel}"
	UTMPMODE="${UTMPMODE:-0664}"

	WTMPFILE="${WTMPFILE:-/var/log/wtmp}"
	WTMPOWN="${WTMPOWN:-utmp}"
	WTMPGRP="${WTMPGRP:-wheel}"
	WTMPMODE="${WTMPMODE:-0664}"

	#
	# Make sure the utmp file is clear, and wtmp has an updated timestamp.
	#

	true > "${UTMPFILE}" || echo >&2 "${UTMPFILE}: cannot truncate file"
	touch "${WTMPFILE}" || echo  >&2 "${WTMPFILE}: cannot touch file"

	#
	# Set utmp/wtmp ownership.
	#

	chown "${UTMPOWN}:${UTMPGRP}" "${UTMPFILE}" || \
	echo >&2 "${UTMPFILE}: cannot set ownership"

	chown "${WTMPOWN}:${WTMPGRP}" "${WTMPFILE}" || \
	echo >&2 "${WTMPFILE}: cannot set ownership"

	#
	# Set utmp/wtmp permissions.
	#

	chmod "${UTMPMODE}" "${UTMPFILE}" || \
	echo >&2 "${UTMPFILE}: cannot set permissions"

	chmod "${WTMPMODE}" "${WTMPFILE}" || \
	echo >&2 "${WTMPFILE}: cannot set permissions"

Αφήνεται σαν άσκηση στον αναγνώστη (τον αρχικό developer, όχι εσένα) το εξής:

	Μετέτρεψε τον παραπάνω κώδικα έτσι ώστε να είναι πιο `functional',
	με περισσότερα reusable κομμάτια, καλύτερο error handling και να
	παίρνει τα ονόματα των τεσσάρων μεταβλητών ως ορίσματα και να κάνει
	το Σωστό(ΤΜ) με κάτι σαν το παρακάτω:

	    rc_acct_init_file UTMPFILE UTMPOWN UTMPGRP UTMPMODE
	    rc_acct_init_file WTMPFILE WTMPOWN WTMPGRP WTMPMODE

	με μηνύματα λάθους όπως:

	    rc.sysinit: ERROR: UTMPFILE is not set properly
	    rc.sysinit: ERROR: UTMPFILE is not an absolute pathname
	    rc.sysinit: WARNING: UTMPMODE is not valid, using default (0664)

	κι ούτω καθεξής.





More information about the Linux-greek-users mailing list