lnmp - BasicAuth、Mysql、Linux的用户管理、ssh免密登录

概述

最近总结了几个开发和安全方面基础的小技巧,账号安全问题一直不能得到足够的重视,会造成后面开发和管理上的困难,下面介绍Basic Auth、Linux用户的管理和ssh免密登录三个知识点。

Basic Auth

Basic Auth,也称为 HTTP 基本认证(HTTP Basic Authentication),是一种用于 HTTP 协议的简单认证机制,HTTP 基本认证由互联网工程任务组(IETF)在 RFC 7617 中定义。在 Basic Auth 中,客户端在发送请求时,将用户名和密码以 Base64 编码的形式包含在请求头的 Authorization 字段中发送给服务器,服务器收到请求后,会解码 Authorization 字段并验证用户名和密码。

Basic Auth 的工作原理

1、客户端请求:当客户端访问一个保护的资源时,如果没有提供认证信息,服务器会返回一个 401 Unauthorized 状态和一个 WWW-Authenticate 响应头,指示客户端需要通过何种认证机制进行认证。

2、编码认证信息: 客户端收到 401 响应后,会提示用户输入用户名和密码。然后,客户端将用户名和密码以 username:password 的形式拼接成一个字符串,再将这个字符串通过 Base64 编码方式编码成一个编码字符串。

3、发送认证请求:编码后的字符串被置于 HTTP 的 Authorization 请求头中并重新发送请求,其中 [encoded_string] 是 Base64 编码后的字符串。

bash 复制代码
Authorization: Basic [encoded_string]

4、服务器认证:服务器接收到包含认证信息的请求后,解码 Base64 编码字符串,提取用户名和密码,然后验证这些凭据。如果认证通过,则服务器会处理请求并返回所请求的资源。如果认证失败,它可以再次返回 401 状态码。

技术落地

关于Basic Auth的操作非常简单,需要安装工具包,在Nginx配置一下即可,分为2步完成:

1、安装工具包: 安装需要的工具包httpd-tools,加密文件路径/auth/basic/basicfile,stark是登录用户名,会输入密码和重复确认:

bash 复制代码
sudo yum install httpd-tools

#/auth/basic/basicfile 密码文件
#stark 登录用户名

htpasswd -c /auth/basic/basicfile stark
New password: 
Re-type new password:

2、配置Nginx模块

需要配置的是auth_basic、auth_basic_user_file模块,需要注意的是Context中规定的是设置区域,附带了Nginx 官方文档地址 nginx.org/en/docs/htt...

bash 复制代码
http {
    auth_basic "Restricted Area";
    auth_basic_user_file /auth/basic/basicfile;
    //...
}
bash 复制代码
Syntax:	auth_basic string | off;
Default:auth_basic off;
Context:http, server, location, limit_except

Syntax:	auth_basic_user_file file;
Default:---
Context:http, server, location, limit_except

Linux用户

在实际开发中,不推荐直接使用root来直接操作操作,用户权限遵循最小权限原则,新增一个开发用户来管理,下面我将以新增一个名为stark的用户作为演示,把stark这个用户添加进www组,这个都是Linux操作上最常用的操作。

1.创建账号、设置密码

bash 复制代码
# 创建账号、设置密码
sudo adduser stark
sudo passwd stark 
Changing password for user stark.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

2.把stark 添加到 www组内

bash 复制代码
sudo usermod -a -G www stark

3.删除stark账号 -r删除家目录和缓存

bash 复制代码
sudo  userdel -r stark

Mysql用户管理

创建用户和赋权

mysql5.7 创建一个用户,用户名是stark,host是%,权限是对spaces库有增删改查权限,下面是执行的sql语句,我Demo里的密码是spaces@2024@$1-9&^(:

sql 复制代码
CREATE USER 'stark'@'%';
ALTER USER 'stark'@'%' IDENTIFIED BY 'spaces@2024@$1-9&^(';
GRANT SELECT, INSERT, UPDATE, DELETE ON spaces.* TO 'stark'@'%';
FLUSH PRIVILEGES;

mysql 5.7 回收用户stark对spaces数据库的 delete 权限,下面是sql语句:

sql 复制代码
REVOKE DELETE ON spaces.* FROM 'stark'@'%';
FLUSH PRIVILEGES;

mysql5.7 创建一个角色app_dev 角色对spaces库所有表都有增删改查权限 创建用户zcc 赋予角色app_dev。

sql 复制代码
-- 创建角色
CREATE ROLE app_developer;

-- 赋予角色对 spaces 库所有表的增删改查权限
GRANT SELECT, INSERT, UPDATE, DELETE ON spaces.* TO 'app_dev';

-- 创建用户
CREATE USER 'zcc'@'%';

-- 赋予用户角色
GRANT 'app_dev' TO 'zcc'@'%';

-- 刷新权限
FLUSH PRIVILEGES;
ssh免密登录

在Linux系统中,可以设置ssh的免密操作,是一个很好用的功能,设置SSH免密登录主要通过生成SSH密钥对(包括公钥和私钥),并将公钥部署到远程服务器的~/.ssh/authorized_keys文件中来实现。以下是详细的步骤:

1. 在本地机器上生成SSH密钥对:打开终端(Terminal)并运行以下命令来生成SSH密钥对(如果已存在密钥对,可以选择重新生成或跳过此步骤):

bash 复制代码
ssh-keygen -t rsa -b 4096 -C "你的账号"

-t rsa 表示密钥类型为RSA。 -b 4096 表示密钥的位数为4096位,这可以提高安全性。 -C "your_email@example.com" 是可选的,用于给密钥添加一个注释。

系统会提示你保存密钥的位置(默认是~/.ssh/id_rsa)和设置密钥的密码(passphrase),为了免密登录,可以留空密码,一直回车就可以了

2. 将公钥复制到远程服务器: 如果你的系统中安装了ssh-copy-id命令,可以直接使用它来将公钥复制到远程服务器的~/.ssh/authorized_keys文件中。运行以下命令:

bash 复制代码
ssh-copy-id user@remotehost

将user替换为你的远程服务器用户名,将remotehost替换为远程服务器的IP地址或域名。

手动复制公钥,把本地公钥你可以手动复制公钥。首先,查看公钥内容:

bash 复制代码
cat ~/.ssh/id_rsa.pub

或者,你也可以在本地机器上编辑~/.ssh/authorized_keys文件,然后将其传输到远程服务器(注意权限和安全性)。

3. 调整远程服务器的SSH配置 :确保远程服务器的SSH配置允许公钥认证。通常,/etc/ssh/sshd_config 文件中应该包含以下行:

bash 复制代码
PubkeyAuthentication yes

4. 重启SSH服务(如果更改了配置文件):如果你在远程服务器上修改了sshd_config文件,需要重启SSH服务来使更改生效。

bash 复制代码
sudo systemctl restart sshd  
# 或者  
sudo service ssh restart  
# 或者  
sudo /etc/init.d/ssh restart

5.测试免密登录:现在,你可以尝试从本地机器SSH登录到远程服务器,而不输入密码:

bash 复制代码
ssh user@remotehost

总结

还有一些知识点,等有时间再一起整理吧。

相关推荐
蓝眸少年CY8 分钟前
MySQL 【流程控制】函数
mysql
AskHarries40 分钟前
Java字节码增强库ByteBuddy
java·后端
荒Huang43 分钟前
Linux挖矿病毒(kswapd0进程使cpu爆满)
linux·运维·服务器
佳佳_1 小时前
Spring Boot 应用启动时打印配置类信息
spring boot·后端
掘金-我是哪吒1 小时前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务
许野平2 小时前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
zmgst2 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
令狐少侠20112 小时前
explain执行计划分析 ref_
mysql
随心............2 小时前
python操作MySQL以及SQL综合案例
数据库·mysql
hjjdebug3 小时前
linux 下 signal() 函数的用法,信号类型在哪里定义的?
linux·signal