一、问题描述
今天在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