Linux - NewbieThis Linux forum is for members that are new to Linux.
Just starting out and have a question?
If it is not in the man pages or the how-to's this is the place!
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
This actually isn't terribly hard at all. All you need to do to disconnect a login session is to kill -9 the user's shell. So you can read the list of prohibited users from a file, do ps aux and grep for shells being run by those users, and pass 'em on to kill -9. Should be a not terribly difficult bash or Perl script to write. Run it from cron at the end of the day, and presto.
Of course, you need a way to prevent them from re-logging on. There are tools that limit user login times, but I've never used them. Alternatively, if you want nobody but root to be able to log on during off hours, you can have your cron file touch /etc/nologin and then have another cron entry remove that file at the start of business the next day.
Well, it's easy enough to simply kill all the processes associated with a particular user (and deny them access to cron and at so they can't be restarted). You could also try a normal kill (SIGTERM not SIGKILL) of the login shell, which should cause all the clean-up to be done. BTW, I just tried kill 9'ing the shell myself, and the utmp/wtmp info does seem to be written out correctly (at least based on the results of w and last). I think this is because the process controlling the session (i.e. telnetd, sshd, or init/getty for local connections) detects the exit and writes out the log info, independent of the user's shell. I'm not 100% sure that this is how it works, though.