Linux系统用户管理之禁止用户登录

一、问题描述

今天在CentOS上切换用户的时候提示This account is currently not available

su elasticsearch
This account is currently not available.

开始并没有理解这句话,想当然的认为是用户不存在。

注:用户不存在的提示是user does not exist

su elasticsearch2
su: user elasticsearch2 does not exist

检查/etc/passwd文件存在这个用户

grep -nr 'elasticsearch' /etc/passwd
115:elasticsearch:x:496:494:elasticsearch user:/usr/home/elasticsearch:/sbin/nologin

搜索了下这个问题,发现是用户的shell登录禁止了,意外发现了对用户的这个限制。
只需要把/etc/passwd中对于用户的登录命令由/sbin/nologin改为/bin/bash即可
当然也可以通过usermod命令来改

usermod -s /bin/bash elasticsearch

二、nologin用户

0、什么是nologin用户
nologin用户是指被限制登录的用户,但是可以使用ftp和samba等。

1、如何设置nologin用户
方式一:

# 设置
usermod -s /sbin/nologin + 用户名
# 去掉
usermod -s /bin/bash + 用户名  

方式二:
手动更改/etc/passwd中对于用户信息为/sbin/nologin

2、为什么需要nologin用户
2.0、Linux下做系统维护的时候,希望个别用户或者所有用户不能登录系统,保证系统在维护期间正常运行。这个时候我们就要禁止用户登录。如果设置为nologin用户就会给出很礼貌的拒绝提示This account is currently not available,是不是感觉特别友好。
2.1、nologin用户也可以给启动服务的账号所用,这只是让服务启动起来,但是不能登录系统
典型的还是elasticsearch用户, 我们在看一次

grep -nr 'elasticsearch' /etc/passwd
115:elasticsearch:x:496:494:elasticsearch user:/usr/home/elasticsearch:/sbin/nologin

即使我们改为非nologin用户,进不到这个用户下面(具体原因,待研究)。需要使用指定用户启动服务的方式

115:elasticsearch:x:496:494:elasticsearch user:/usr/home/elasticsearch:/bin/bash

su elasticsearch
bash-4.1$

发现原来很多用户账号都是nologin

cat /etc/passwd | grep '/sbin/nologin'
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
nslcd:x:65:55:LDAP Client User:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
mysql:x:3306:3306::/usr/local/mysql:/sbin/nologin
www:x:80:80::/usr/local/sinasrv2:/sbin/nologin
dockerroot:x:498:496:Docker User:/var/lib/docker:/sbin/nologin
redis:x:497:495:Redis Database Server:/var/lib/redis:/sbin/nologin
kibana:x:495:493:kibana service user:/usr/home/kibana:/sbin/nologin

三、指定用户名启动服务
对于elasticsearch服务的启动需要指定非root用户名

# 方式一,通过daemon, 可能需要单独安装一些扩展
daemon --user=username command
# 方式二, sudo -u
sudo -u elasticsearch /data2/elk/elasticsearch-6.2.4/bin/elasticsearch >/dev/null 2>&1 &

参考:
CSDN:Linux useradd 与 adduser的区别, /sbin/nologin 与 /bin/bash

发表评论

电子邮件地址不会被公开。 必填项已用*标注