在生产环境中如何以非root并且nologin的用户启动某些应用呢,找了一下发现可以使用su及runuser命令实现,这两个命令对于nologin用户都需要添加-m选项,以tomcat为例:
###添加nologin的应用账号
# useradd -s /sbin/nologin tomcat
# cat /etc/passwd|grep tomcat
tomcat:x:501:501::/home/tomcat:/sbin/nologin
###使用su切换至普通账号下启动应用
测试切换到tomcat用户失败
# su - tomcat This account is currently not available.
使用su以tomcat用户启动tomcat
# chown -R tomcat.tomcat /data/app/apache-tomcat-7.0.63 && su - tomcat -m -c "source /etc/bashrc&&/data/app/apache-tomcat-7.0.63/bin/startup.sh"
Using CATALINA_BASE: /data/app/apache-tomcat-7.0.63
Using CATALINA_HOME: /data/app/apache-tomcat-7.0.63
Using CATALINA_TMPDIR: /data/app/apache-tomcat-7.0.63/temp
Using JRE_HOME: /data/app/jdk1.8.0_45
Using CLASSPATH: /data/app/apache-tomcat-7.0.63/bin/bootstrap.jar:/data/app/apache-tomcat-7.0.63/bin/tomcat-juli.jar
Tomcat started.
检查tomcat是否正常启动
# ps aux|grep tomcat
tomcat 21863 51.5 4.4 2243408 45416 ? Sl 22:30 0:02 /data/app/jdk1.8.0_45/bin/java -Djava.util.logging.config.file=/data/app/apache-tomcat-7.0.63/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/data/app/apache-tomcat-7.0.63/endorsed -classpath /data/app/apache-tomcat-7.0.63/bin/bootstrap.jar:/data/app/apache-tomcat-7.0.63/bin/tomcat-juli.jar -Dcatalina.base=/data/app/apache-tomcat-7.0.63 -Dcatalina.home=/data/app/apache-tomcat-7.0.63 -Djava.io.tmpdir=/data/app/apache-tomcat-7.0.63/temp org.apache.catalina.startup.Bootstrap start
root 21874 0.0 0.0 103252 860 pts/1 S+ 22:30 0:00 grep tomcat
###runuser命令指定用户启动tomcat
# chown -R tomcat.tomcat /data/app/apache-tomcat-7.0.63 && runuser -l tomcat -m -c "source /etc/bashrc && /data/app/apache-tomcat-7.0.63/bin/startup.sh"
Using CATALINA_BASE: /data/app/apache-tomcat-7.0.63
Using CATALINA_HOME: /data/app/apache-tomcat-7.0.63
Using CATALINA_TMPDIR: /data/app/apache-tomcat-7.0.63/temp
Using JRE_HOME: /data/app/jdk1.8.0_45
Using CLASSPATH: /data/app/apache-tomcat-7.0.63/bin/bootstrap.jar:/data/app/apache-tomcat-7.0.63/bin/tomcat-juli.jar
Tomcat started.