版权声明:本文为博主原创文章,未经博主允许不得转载。 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”可以以服务账号的身份执行服务的启动、配置与管理操作。