参考
Centralized authorized_keys (AuthorizedKeysFile) for sshd
ssh key management
需求
登录用户有3类权限,访客权限,部署权限,管理权限.
访客权限为最小权限,仅能对登录用户目录进行读写,对其他用户目录只读,系统目录无读写.
部署权限对app部署用户目录具有读写权限(程序不依赖系统服务,如java -jar 程序).
管理权限对系统目录具读写权限(程序依赖系统服务,nginx, mysql, tomcat).
不同主机对不同用户权限不同。
运维组具有管理权限,业务组管理的主机具有部署权限或者管理权限,访客权限一般不开,除非有特殊要求,如需要查看部署结果.
user | group | sudo app? | sudo root? | sudo su? |
---|---|---|---|---|
admin | adm | y | y | y |
web | app | y | y | n |
db | n | y | n | |
test | n | n | n |
生成服务器匙
ssh-keygen -t rsa -f /tmp/admin
# /tmp/admin & /tmp/admin.pub
ssh-keygen -t rsa -f /tmp/test
# /tmp/test & /tmp/test.pub
ssh-keygen -t rsa -f /tmp/web
# /tmp/web & /tmp/web.pub
ssh-keygen -t rsa -f /tmp/db
# /tmp/db & /tmp/db.pub
目标服务器
# /etc/ssh/sshd_config
Port 60022
ListenAddress 192.168.100.100 # 绑定主机内网地址
PermitRootLogin no # without-password
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
PasswordAuthentication no
GSSAPIAuthentication no
GSSAPIKeyExchange no
GSSAPIStoreCredentialsOnRekey no
GSSAPICleanupCredentials no
GSSAPIStrictAcceptorCheck no
ChallengeResponseAuthentication no
UsePAM yes
UseDNS no
mkdir /etc/ssh/authorized_keys # 建立key目录
/etc/init.d/sshd restart # 重启ssh服务
useradd -u 500 -d /opt/app app # 建立部署用户app, 用户id 500, 用户目录/opt/app
chmod 755 /opt/app # 改变用户权限为755
useradd -u 501 admin # 建立登录用户admin, 用户id 501
cp /tmp/admin.pub /etc/ssh/authorized_keys/admin # 拷贝用户公匙到key目录,文件名为用户名
chmod 644 /etc/ssh/authorized_keys/admin # 改变key权限为644
ssh -i /tmp/admin admin@192.168.100.100 # 测试key登录
非wheel组成员禁用su
/etc/pam.d/su
#auth required pam_wheel.so use_uid
auth required pam_wheel.so use_uid
usermod -G adm admin
usermod -G web app
sudo配置
/etc/sudoers.d/security
# User alias specification
User_Alias ADMIN = admin
User_Alias SERVICE = db
User_Alias APP = web
# Cmnd alias specification
Cmnd_Alias SU = /bin/su
# Cmnd alias specification
Cmnd_Alias SU = /bin/su
# User specification
ADMIN ALL=(ALL) NOPASSWD: ALL, !SU
APP ALL=(ALL) NOPASSWD: !SU, /bin/chgrp, /bin/chmod, /bin/chown, (app) NOPASSWD: ALL
SERVICE ALL=(ALL) NOPASSWD: !SU, /bin/chgrp, /bin/chmod, /bin/chown, (app) NOPASSWD: ALL
# nginx
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/nginx start
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/nginx stop
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/nginx restart
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/nginx reload
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/nginx status
# php-fpm
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/php-fpm start
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/php-fpm stop
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/php-fpm restart
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/php-fpm reload
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/php-fpm status
# apache
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/httpd start
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/httpd stop
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/httpd restart
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/httpd reload
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/httpd status
# mysql
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/mysqld start
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/mysqld stop
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/mysqld restart
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/mysqld reload
%SERVICE ALL =(ALL) NOPASSWD: /etc/init.d/mysqld status
# web
sudo -u app vim /opt/app/1.txt
sudo su -
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类