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