admin 发表于 2023-6-27 14:21:22

[技巧] 开启群晖 root 权限的脚本,任务计划执行一次,重启...

脚本根据公开的开启root权限方法编写,用群晖的任务计划执行一次,重启后即已开启root权限。
操作步骤:

[*]将脚本文本粘贴到群晖文本编辑器保存;
[*]新建任务计划,输入 bash <脚本文件路径和文件名> -p <root用户密码> ;
[*]执行脚本,重启群晖,确认执行成功后删除该任务计划。

注:

[*]脚本文件名不要用中文;
[*]保存脚本的完整路径可在 File Station 的脚本文件属性中查看;
[*]建议先查看执行结果,如果成功再重启群晖,查看方法:在任务计划设置中开启“保存输出结果”并设置保存路径,运行脚本后即可查看。
[*]
#! /bin/ash

# 使用群晖计划任务以 root 身份执行一次该脚本
# 脚本参数 -p <password>
#          -f 强制修改密码
#          -r 自动重启设备(注意保存工作进度),建议手动重启群晖,不使用该参数
# *** 脚本执行后请重新启动设备 ***
# 2023-2-28 limpo

function EchoErr
{
    ExitCode=$?
    if [ $ExitCode -ge $1 ]
    then
      echo $2
      exit $ExitCode
    fi
    return 0
}

ForceChangePassword='no'
reboot='no'
sshconf='/etc/ssh/sshd_config'

while getopts "p:frh" arg
do
    case $arg in
      p)
            password=$OPTARG
            ;;
      f)
            ForceChangePassword='yes'
            ;;
      r)
            reboot='yes'
            ;;
      h|?)
            printf "Usage: $0 -p <pssword> [-f] [-r]\n\t-p:\tPassword of root\n\t-f:\tforce modify password of root\n\t-r:\tforce reboot this device\n"
            exit 0
                      ;;
    esac
done

if [ "$password" = "" ]; then
      echo Password must be specified.
      exit 1
fi

if [ ${#password} -le 4 ]; then
      echo Password too short.
      exit 1
fi

printf"`date`\tDetermine the root identity.\t"
if [[ $(whoami) != 'root' ]]
then
    echo Not root identity.
    exit 1
fi
echo 'OK.'

printf"`date`\tGet NAS root login permission.\t"
isroot=`grep -c '^PermitRootLogin yes' $sshconf`
EchoErr 2 "Failed."
echo OK.

if [ $isroot -ge 1 ]
then
    printf "`date`\tThe root login permission has been enabled.\n"
    if [ $ForceChangePassword != 'yes' ]
    then
            exit 0
    fi
else
      printf "`date`\tModify $sshconf ...\t"
      sed -i "/#PermitRootLogin prohibit-password/a# -- The follow line added by $0\n#    @`date`\nPermitRootLogin yes\n# -- End adding." $sshconf
      EchoErr 1 "Failed."
      echo "OK."
fi

printf "`date`\tChange root passoword ...\t"
synouser --setpw root $password
EchoErr 1 "Failed."
echo "OK."

if [ "$reboot" = "yes" ]
then
      printf "`date`\tReboot this device ...\t"
      reboot
      EchoErr 1 "Failed."
      echo "OK."
fi

页: [1]
查看完整版本: [技巧] 开启群晖 root 权限的脚本,任务计划执行一次,重启...