Linux创建用于执行程序的非登录用户
使用以下命令创建用于执行程序的非登录用户(其中www为要创建的用户名):
useradd -s /usr/sbin/nologin -M www
相反,如果你要创建家目录以及指定默认的shell,则要这样指定(debian系统默认不会指定默认shell和创建家目录,所以一般要用这种方式创建,centos貌似都会默认创建,但centos用这个也可以)
useradd -s /usr/bin/bash -m www
如果你是用zsh的,就指定-s
为/usr/bin/zsh
useradd -s /usr/bin/zsh -m www
-s
(shell的首字母)用户指定该用户的登录shell为/usr/sbin/nologin
(如果不指定,那么就用当前环境的shell,echo $SHELL
即可查看当前的shell),/usr/sbin/nologin
是一个专门用来防止登录的shell,它非常简单,只会输出一句话:
所以你想切换到这个用户,它也会提示相同的信息:
-M
选项用于指定不创建家目录(因为非登录用户不需要家目录),相反-m
(小写m)则指定创建家目录,如果两个都没指定,那么将会使用默认设置文件/etc/login.defs
中的CREATE_HOME
选项来确定的,如果CREATE_HOME yes
那么就会创建,如果CREATE_HOME no
那就不创建。
我们可以在/etc/passwd
文件最后一行看到刚刚创建的用户,最后一个/sbin/nologin
即为它的shell:
Linux很多服务软件都可以指定运行用户和组,经常默认配置都写着nobody/www之类的。
比如nginx就可以这么指定的:
user www www
又比如,php-fpm是这么指定的:
user www
group www
又比如rsync是这么指定的:
uid www
gid www
那么这个www就是我们专门用来启动进程用的,比如php-fpm和nginx接收到请求读取文件时,就是用这个www用户和组的权限去读,又或者php-fpm写入文件时,生成的文件权限也是www的用户和组,又或者rsync同步文件时,也是用www这个用户和组的权限去扫描变化文件并读取,同步的文件生成后也是www用户和组。