版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yiifaa/article/details/77918654

在服务器的管理中,我们经常需要启动mysql、elasticsearch、nginx服务,但又不希望以root的方式启动(有时候是强制性的,比如elasticsearch就禁止使用root账号启动服务),这时候就需要为它们创建单独的服务账号,同时为了安全性的考虑,一般都要禁止这些账号登录Shell,以nginx为例,详细的过程如下:

1. 创建用户组与用户

既然我们都不需要用户登录,所以也不用创建用户主目录,请注意useradd的“-M”参数。

# 创建nginx组
# -g代表直接指定group ID,可以省略
# -r 代表为系统账号
groupadd -g 2000 -r nginx

# 创建nginx用户
# -u表示直接指定user ID
# -M表示不创建用户目录,需要显示指定
useradd -u 2000 -g nginx -M
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2. 屏蔽独立的shell

按照上面的方法创建用户,其实这一步完全不需要,现在nginx是完全不可能登录进入shell,请注意是不能登录shell,不代表没有执行shell脚本的权限

在这里,为了复习/sbin/nglogin的知识点,还是把此过程加入,用vi将/etc/passwd文件打开,将/home/nginx改为/sbin/nologin即可。

3. 创建nginx目录及解压

#   创建nginx目录
mkdir /opt/nginx
#   更改组所有者
chgrp nginx /opt/nginx
#   更改拥有者信息
chown nginx /opt/nginx
ls /opt/nginx
#   文件的目录信息如下
# drwxr-xr-x. 2 nginx nginx   22 Sep  9 21:55 nginx
#   解压过程略
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4. 用nginx用户启动服务

这里最困扰初学者的是,不登陆shell,怎么能执行shell脚本?其实,通过su -c命令完全可以达到此效果,如下:

# 以nginx用户启动服务
su -c /opt/nginx/nginx.sh nginx
  • 1
  • 2

这里,还需要说明的是,启动服务时,我们一般都会对内存、进程数量、网络服务等进行设置与优化,为了简化每次重复的工作,强烈建议以shell脚本文件的方式执行启动操作。

结论

通过“su -c”可以以服务账号的身份执行服务的启动、配置与管理操作。