TITANTOOLS(1)
π TITANTOOLS(1) β General Commands Manual π
okay bestie, so this page lives in section 1 of the manual (the general commands one) and it's filed under the name TITANTOOLS, but the actual thing it's describing? yeah, it's noshell. iconic naming chaos, we love her. anyway. sit down, grab a strawberry, let's talk about the shell that exists purely to say "no β€οΈ" π
β¨ NAME β¨
noshell β the shell for administrative users who should literally never log in π«π
πΈ DESCRIPTION πΈ
so noshell is a shell you can assign to system users that need to be active (like, they exist, they own files, they're doing their little jobs) but should never ever log in to the system. think of it as a bouncer at the club door π«Ά. and not only does it block them β it also helps you monitor attempts to get into disabled accounts, and it logs all of that into syslog. it's giving surveillance but make it cute.
here's the tea: if a user tries to connect to the system through an administrative user that has a valid password and uses noshell as their shell, then:
- the use of
noshellgets logged π - the connection gets terminated π
- the user is left unable to gain access to the host. no cap.
after connecting, the login program might display the timestamp of the last login. for example, in a remote connection:
hostileuser@hostile_host% ssh -l adminuser remote_host
adminuser@remote_host's password: *******
(System's /etc/motd)
Last login: Sat Nov 22 23:30:41 2003 from localhost
Connection to remote_host closed.
see how fast that closed? yeah. bye π
if the user is denied access, noshell will send a message to syslog using the LOG_AUTH facility. important though: it does not provide any indication of whether this connection attempt was local or remote β that info has to be retrieved from other logs. so don't come for noshell asking questions it literally cannot answer bestie.
in the example above, the following would get recorded in /var/log/authlog:
Nov 22 23:30:41 remote_host sshd[9950]: Accepted password for
adminuser from hostile_host port 44422 ssh2
Nov 22 23:30:41 remote_host ssh(pam_unix)[9952]: session opened
for user adminuser by (uid=1)
Nov 22 23:30:41 remote_host noshell[9953]: Noshell warning: user
adminuser login from a disabled shell
Nov 22 23:30:41 remote_host ssh(pam_unix)[9952]: session closed
for user adminuser
the way it just sits in there, quietly snitching. obsessed π
in Debian, noshell is an alternative to the nologin shell, and the latter is provided in the login package. the main difference between them? noshell will not provide any information about why the access has been denied. mysterious. aloof. main character energy π
β¨ OPTIONS β¨
okay so this program does not use any option. that's it. that's the whole section. no flags, no --help, nothing. she simply does not take requests π¦
π SEE ALSO π
π AUTHOR π
this manual page was written by Javier Fernandez-Sanguino PeΓ±a <jfs@debian.org> for the Debian system (but may be used by others). permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 or any later version published by the Free Software Foundation. fr fr, go forth and remix.
on Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL. π
okay that's the whole page bestie, go protect your system users and stay unbothered π«Άπ
and that's a wrap from TITANTOOLS(1) in the General Commands Manual β same name up top, same name at the bottom, we're consistent like that ββ¨ no date given on this one, just the manual name front and back, and honestly? that's iconic. bye babe π π
π¦ where this page comes from
- debian bookworm: titantools 4.0.11+notdfsg1-7
- debian trixie: titantools 4.0.11+notdfsg1-7.1
- ubuntu jammy: titantools 4.0.11+notdfsg1-6
- ubuntu noble: titantools 4.0.11+notdfsg1-7
- ubuntu questing: titantools 4.0.11+notdfsg1-7.1
- ubuntu resolute: titantools 4.0.11+notdfsg1-7.1build1
- ubuntu stonking: titantools 4.0.11+notdfsg1-7.1build1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms