使用无登录权限的用户身份执行任务
在通常的 WEB 服务器配置中, 默认的会配置服务的执行用户为: www-data
, 然而这个用户是不允许登录的.
可以在 /etc/passwd
中查看改用户的具体配置:
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
可以看到用户: www-data
的用户目录被配置为: /var/www
, 然而shell是被指定为: /usr/sbin/nologin
. 这个配置表明了改用户不允许登录.
-
日常操作的用户身份
我们在使用 su www-data
时会被提示错误:
# su www-data
This account is currently not available.
在某些场合通常我们把Web项目的代码目录的拥有者都会指向该用户. 那么在做某些文件操作时会引起麻烦, 比如使用root身份执行 composer 操作会被警告等. 这种情况下我们可以给用户临时分配一个shell来支持身份切换. 比如这样:
# su www-data -s /bin/sh
这样就可以已 www-data
身份进行文件操作了. 避免新产生的文件的拥有者为 root
.
-
定时任务的用户身份
通常配置 crontab
执行任务, 通常是用当前的用户身份进行 crontab -e
进行编辑一个任务即可. 然而大部分ssh管理服务器的用户都使用 root
, 那么由 root
添加的定时任务执行者会是 root
, 这样会有额外的附加效果.
比如任务脚本在执行过程中会产生日志, 日志会写入到日志文件, 然而定时任务通常会被安排在凌晨这种低负载时进行, 某些按天的的日志会被任务创建, 然而当天的日志文件被新创建
后, 日志的所有者是root
, 在接下来当天的业务运行中提供服务的用户是www-data
, 再由 www-data
往日志文件中写日志就会产生权限问题. 这个时候在创建定时任务的时候进行指定用户身份是推荐的做法.
使用指定用户运行的定时任务有几种方法. 这里推荐直接修改 /etc/crontab
来实现. 在这个文件最后添加需要安排的定时任务即可.
定时任务指令格式:
分钟
+空格
+小时
+空格
+天(月)
+空格
+月
+空格
+天(周)
+空格
+用户名
+空格
+任务指令
设定一个指定用户: www-data
每分钟往 /tmp/test.log
写入一句话的任务指令:
* * * * * www-data echo "Hello, www-data" >> /tmp/test.log
具体的任务可以根据业务的需要在 /etc/crontab
文件里进行调整修改. 避免日志文件权限等冲突.