问题记录

在使用调度器DolphinScheduler中有一个定时任务,每天早上执行一个shell脚本,前些日子突然停止的了,查看日志发现:

image-20211230142824216

原来,DolphinScheduler在执行脚本的时候,会使用sudo -r root,使用root权限去执行。

但是,在使用sudo时却遇到了权限问题。

sudo: pam_open_session: System error
sudo: policy plugin failed session initialization

排查过程

通过请教运维同事得知,Linux密码是会定期过期的,那么在机器上切换DolphinScheduler排查问题。

尝试执行:

[dolphinscheduler@node01 ~]$ sudo whoami

得到:

sudo: pam_open_session: System error
sudo: policy plugin failed session initialization

通过chage指令查看/修改帐号和密码的有效期限,得到:

[dolphinscheduler@node01 ~]$ chage -l dolphinscheduler
Last password change                                    : Sep 17, 2021
Password expires                                        : Dec 16, 2021
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change      	: 1
Maximum number of days between password change      	: 90
Number of days of warning before password expires   	: 10

内容释义:

最近一次密码修改时间
密码过期时间
密码失效时间
帐户过期时间
两次改变密码之间相距的最小天数
两次改变密码之间相距的最大天数
在密码过期之前警告的天数

果然,dolphinscheduler用户的密码已经过期,我们应该修改重置过期标志。

解决方案

重置用户密码过期标志,密码可更改的最小天数设置为0,密码保持有效的最大天数设置为99999,停滞时期设置为-1即never,帐号到期的日期设置为-1即never:

chage -m 0 -M 99999 -I -1 -E -1 user

再次查看该用户的密码有效期:

[dolphinscheduler@node01 ~]$ chage -l dolphinscheduler
Last password change                                    : Sep 17, 2021
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

尝试使用sudo权限

[dolphinscheduler@node01 ~]$ sudo whoami
root

再次在DolphinScheduler中执行shell脚本,执行成功。

附chage命令详解

chage

修改帐号和密码的有效期限

补充说明

chage命令 是用来修改帐号和密码的有效期限。

语法

chage [选项] 用户名

选项

-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。