历史版本13 :Linux用户权限说明 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

概述编辑

在部署运维平台时,需要使用服务器用户登录终端,上传、解压、运行finekey工具,以部署启动运维平台。

在部署运维项目时,需要提供服务器用户名称与密码,用于项目的部署和运行。

执行相关操作,需要确保所使用的服务器用户的权限满足需求。

优先推荐使用超级管理员账号部署编辑

优先推荐使用用户id为0且名叫root的服务器用户部署运维平台和运维项目。

注意:用户id为0但不叫root的用户,不支持部署,请更名为root

非超管账号部署需要配置权限编辑

权限要求说明

如需使用非超管root用户进行项目的部署和运行,至少需要拥有以下权限:

命令
说明
mkdir命令说明:创建目录

应用场景:

1)在用户的home目录下创建docker临时安装目录,用于存放Docker和相关组件的安装文件

2)在系统目录/usr/bin下创建docker最终安装目录,用于存放Docker和相关组件的可执行文件

3)在指定的项目挂载目录下创建运维平台和项目的数据和组件目录,用于存放Docker容器的数据和配置文件

示例命令:

示例:mkdir -p -m 750 /home/fanruan/data

说明:创建项目挂载目录/home/fanruan/data,并设置权限为750

chown

命令说明:

更改文件或目录的所有者

应用场景:

1)更改docker临时安装目录的所有者,以确保安装过程中的权限问题

2)更改docker最终安装目录的所有者,以确保系统和用户对可执行文件的访问权限

3)更改运维平台和项目的数据和组件目录的所有者,以确保Docker容器对数据和配置文件的访问权限

示例命令:

示例:chown -R fanruan:fanruan /home/fanruan/data

说明:递归更改目录 /home/fanruan/data 及其子目录和文件的所有者为 fanruan 用户和组

groupadd

命令说明:创建用户组

应用场景:用于系统用户组管理,为docker服务创建专用用户组

示例命令:

示例:groupadd docker

说明:创建一个名叫docker的新用户组

gpasswd

命令说明:管理用户组成员

应用场景:将用户添加到指定用户组,赋予用户对docker服务的访问权限

示例命令:

示例:gpasswd -a $USER docker

说明:将当前用户添加到docker用户组中

swapoff令说明禁用系统中所有的交换分区和交换文件

应用场景:关闭交换空间,提高性能

示例命令:

示例:swapoff -a

说明:禁用系统中所有的交换分区和交换文件

modprobe命令说明:加载内核模块

应用场景:动态加载 br_netfilter 模块,确保 Docker 网络通信的正常运行和管理

示例命令:

示例:modprobe br_netfilter

说明:加载 br_netfilter 模块,使其在内核中生效,以支持 Docker 的网络功能

systemd

命令说明:控制 systemd 系统和服务管理器

应用场景:确保 Docker 服务在系统启动时自动启动

示例命令:

示例:systemctl enable docker.service

说明:启用 docker.service 服务,使其在系统启动时自动启动

kill命令说明:向进程发送信号

应用场景:向 Docker 守护进程发送 SIGHUP 信号,实现热加载配置文件,无需停止和重新启动 Docker 服务

示例命令:

示例:kill -HUP 1234

说明:向 Docker 守护进程 1234 发送 SIGHUP 信号,在不中断docker服务的情况下应用新的配置更改

sudo

命令说明:允许授权用户以超级用户的身份运行特定的命令,而无需直接登录到超级用户账户

应用场景:用于自动化脚本或需要以超级用户权限执行的场景

示例命令:

命令:echo sudo_xxxx_passwd | sudo -S sh -c "systemctl start docker"

示例:以超级用户权限启动 Docker 服务

sh

命令说明:解释并执行由 -c 选项指定的命令字符串

应用场景:在一个命令中完成复杂的操作,并确保命令在具有适当权限的环境中执行

示例命令:

命令:echo sudo_xxxx_passwd | sudo -S sh -c "systemctl start docker"

示例:以超级用户权限在一个新的 shell 中执行命令

echo

命令说明:将字符串输出到标准输出

应用场景:方便地将字符串输出并传递给其他命令,从而实现自动化和批处理操作

示例命令:

命令:echo sudo_xxxx_passwd | sudo -S sh -c "systemctl start docker"

示例:将 echo 命令的输出(即 sudo 密码)传递给 sudo -S 命令,使其能够以超级用户权限执行命令

cp命令说明:复制文件和目录

应用场景:部署或更新服务文件,从而使系统能够管理和启动相应的服务

示例命令:

示例:cp -f /home/finekey/docker.service /etc/systemd/system/

说明:将文件 /home/finekey/docker.service 复制到目录 /etc/systemd/system/ 中,以便 systemd 可以管理该服务

sysctl

命令说明:查看和修改内核参数

应用场景:查看和修改一些特定的内核参数,例如net.bridge.bridge-nf-call-iptables、net.ipv4.conf.all.forwarding、net.ipv4.ip_forward等

示例命令:

示例:sysctl -n net.ipv4.ip_forward

说明:检查当前系统中 IPv4 转发(IP forwarding)的状态

sed

命令说明:用于在文本文件中进行查找、替换、插入、删除等操作

应用场景:用于修改一些配置文件和内核参数,主要用于修改/etc/sysctl.conf,如果这些参数已经配置成了目标值,只会令这些参数生效,不会再去修改文件

示例命令:

示例:sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

说明:修改 /etc/selinux/config 文件,将 SELINUX 设置从 enforcing 改为 permissive,以防影响通过 systemctl 命令以服务方式启动 Docker

rm命令说明:删除文件和目录

应用场景:部署失败时回滚,清理残留文件

示例命令:

示例:rm -rf /home/fanruan/data

说明:递归地删除 /home/fanruan/data 目录及其所有内容

权限配置步骤

请自行编辑 /etc/sudoers 文件,确保满足以下两项

步骤说明
修改用户的sudo权限

自行修改dev为你的用户名

1)允许用户"dev"在任何主机上以root身份使用sudo权限执行后续配置的命令

dev     ALL=(root) /bin/sh,/bin/mkdir,/bin/rm,/bin/cp,/bin/systemctl,/bin/kill,/usr/sbin/sysctl,/usr/bin/gpasswd,/usr/sbin/groupadd,/usr/bin/chown,/usr/sbin/modprobe,/usr/bin/echo,/usr/bin/sed,/usr/sbin/swapoff,/bin/sudo

2)如果仍然权限不足(报错:[sudo] password for ubuntu:),可以配置NOPASSWD的sudo权限(自选)

dev     ALL=(root) NOPASSWD:/bin/sh,/bin/mkdir,/bin/rm,/bin/cp,/bin/systemctl,/bin/kill,/usr/sbin/sysctl,/usr/bin/gpasswd,/usr/sbin/groupadd,/usr/bin/chown,/usr/sbin/modprobe,/usr/bin/echo,/usr/bin/sed,/usr/sbin/swapoff,/bin/sudo

对用户禁用requiretty选项

注释掉原本的requiretty相关内容

确保 dev 用户在执行 sudo 命令时不需要 TTY 会话,否则无法通过脚本/远程命令使用sudo

#Defaults: requiretty

sudoers 文件示例:(本文件仅作为示例,请勿直接拷贝覆盖,请逐一参考上文修改)

# User privilege specification

root    ALL=(ALL:ALL)       ALL


Defaults requiretty


# Allow dev user to run specific commands as root

dev     ALL=(root) /bin/sh,/bin/mkdir,/bin/rm,/bin/cp,/bin/systemctl,/bin/kill,/usr/sbin/sysctl,/usr/bin/gpasswd,/usr/sbin/groupadd,/usr/bin/chown,/usr/sbin/modprobe,/usr/bin/echo,/usr/bin/sed,/usr/sbin/swapoff,/bin/sudo