[...]blog:locate 命令:文件查找命令 - 灵魂信息 (soulio.top)[...]
首页
留言
统计
友链
归档
关于
Search
1
typecho博客-SEO优化-永久链接设置-伪静态
89 阅读
2
搭建网站的三种方式:家庭服务器、云服务器、serv00免费服务器
63 阅读
3
DNF:包管理器
53 阅读
4
typecho主题和插件
52 阅读
5
Homebrew:包管理器
45 阅读
网站搭建
Linux命令详解
登录
Search
标签搜索
Linux命令
serv00
Linux
网站搭建
typecho
Excel
正则表达式
PVE
mdx
soulio
累计撰写
146
篇文章
累计收到
2
条评论
今日撰写
0
篇文章
首页
栏目
网站搭建
Linux命令详解
页面
留言
统计
友链
归档
关于
用户登录
登录
搜索到
146
篇与
的结果
2024-09-26
sudo 命令:掌握系统权限控制,实现安全高效管理
一、命令简介sudo 命令允许系统管理员授权普通用户执行特定命令,并以管理员身份运行这些命令,通常需要输入用户自己的密码。sudo 全称是"substitute user do",意为“替用户做”,也就是“以另一个用户的身份执行命令”。 优点 这种机制既提高了系统的安全性,又简化了权限管理。 工作原理 当用户执行 sudo 命令时,系统会检查/etc/sudoers 文件,该文件定义了哪些用户可以执行哪些命令。如果用户被授权,sudo 会要求他们输入自己的密码,然后执行指定的命令。 配置文件 sudo 的配置文件位于/etc/sudoers。你可以看到类似如下内容Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" Defaults use_pty root ALL=(ALL:ALL) ALL %admin ALL=(ALL) ALL %sudo ALL=(ALL:ALL) ALL @includedir /etc/sudoers.d %sudo ALL=(ALL:ALL) ALL 表示:赋予 sudo 用户组执行任何命令的权限。 编辑配置文件 编辑这个文件需要使用 visudo 命令,它会进行语法检查,防止配置错误。sudo visudo 第四章会详细讲解如何配置 sudoers 文件。二、命令参数典型示例:sudo apt update 选项: -u, --user=用户: 指定以哪个用户的身份来执行命令。 -l, --list: 列出当前用户可以执行的命令。 -s, --set-home: 设置 HOME 环境变量为目标用户的家目录。 -i, --login: 以目标用户的环境变量登录。 -v, --validate: 验证用户的密码,更新时间戳文件。 -h, --help: 显示帮助信息。 三、命令示例 以 root 权限执行 apt update命令: sudo apt update 以特定用户 john的身份执行 ls命令: sudo -u john ls 更新 sudo时间戳 sudo -v 不仅限于 sudo -v,只要执行了任意 sudo 命令并验证正确密码后,时间戳将更新:允许你在一段时间内继续执行 sudo 操作而无需再次输入密码。这是一种提高用户体验的机制。四、sudoers 文件sudoers 文件的配置规则用于定义哪些用户或用户组可以使用 sudo 命令以及他们能执行哪些命令。该文件有严格的语法要求,因此使用 visudo 编辑它以防止语法错误是非常重要的。sudoers 文件的基本语法结构 基本格式[用户] [主机]=[运行身份] [命令] [用户]:定义具有权限的用户或用户组。可以是单个用户名或 % 开头的用户组名称。 [主机]:表示从哪些主机可以使用 sudo 权限,通常设置为 ALL,表示从所有主机都可以执行。 [运行身份]:用户以哪个身份执行命令,通常是 ALL,也可以是 root 或其他用户。 [命令]:指定用户可以运行的命令,可以是 ALL 表示所有命令,也可以限制特定命令路径。 具体示例 允许用户 username 在所有主机上以任何用户身份运行所有命令:username ALL=(ALL:ALL) ALL 允许用户 username 以 root 身份在所有主机上运行 /bin/ls 命令:username ALL=(root) /bin/ls 允许用户 admin 在所有主机上以 root 身份运行所有命令,但不需要输入密码:admin ALL=(ALL) NOPASSWD: ALL 允许用户组 admins 成员在所有主机上以 root 身份运行所有命令:%admins ALL=(ALL:ALL) ALL 限制用户 user1 只能在 server1 主机上以 root 身份运行 /usr/bin/vim:user1 server1=(root) /usr/bin/vim 常用关键字 ALL:用于表示任意主机、任意用户或任意命令。 NOPASSWD:用于表示在执行命令时不需要输入密码。 Cmnd_Alias:命令别名,简化复杂的命令集。例如:Cmnd_Alias WEBADMIN = /usr/bin/systemctl restart apache2, /usr/bin/systemctl status apache2 然后,可以允许用户 webadmin 执行这些命令:webadmin ALL=(ALL) WEBADMIN 别名定义sudoers 文件允许使用别名来管理权限,常见别名包括: User_Alias:用户别名。 Runas_Alias:运行身份别名。 Host_Alias:主机别名。 Cmnd_Alias:命令别名。 示例:User_Alias ADMINS = alice, bob Host_Alias WEBSERVERS = web1, web2 Cmnd_Alias SERVICE = /bin/systemctl restart ADMINS WEBSERVERS=(ALL) SERVICE 重要配置示例 允许普通用户使用 root 权限执行所有命令:username ALL=(ALL:ALL) ALL 允许用户组执行命令:%groupname ALL=(ALL:ALL) ALL 允许用户执行特定命令:username ALL=(ALL) /usr/bin/ls, /usr/bin/cat 允许用户无需密码执行命令:username ALL=(ALL) NOPASSWD: ALL 注意事项关于安全的建议: 仅为信任的用户和用户组授予 sudo 权限,尤其是使用 NOPASSWD 时。 始终使用 visudo 编辑 sudoers 文件以避免语法错误。 避免滥用 sudo 权限,仅在需要时使用,以确保系统的安全性和稳定性。
2024年09月26日
10 阅读
0 评论
0 点赞
2024-09-26
su 命令:安全切换用户身份,强化系统权限管理攻略
一、命令简介su 命令是 Linux 和 Unix 系统中的一个实用工具,用于切换用户身份。它允许当前登录用户在不退出登录会话的情况下,切换到另一个用户的身份。通常,su 用于从普通用户切换到 root 用户,或从 root 用户切换到其他用户。二、命令参数su 命令支持多个参数,以下是一些常用的参数: -:使用登录 shell,加载目标用户的环境变量和启动文件。 -c command:执行指定的命令后返回到原来的用户。 -l 或 --login:与 - 相似,强制 su 使用登录 shell。 -m 或 --preserve-environment:保留当前用户的环境变量。 -s shell:指定要使用的 shell。 -p:不更改环境变量。 三、命令示例 切换到 root 用户:su - 以用户 john 的身份执行 ls 命令:su -c 'ls /home/john' john 切换到用户 alice 并使用 bash 作为 shell:su -s /bin/bash alice 提高 su 命令的安全性提供以下参考,自己用就别瞎折腾。 使用 sudo:尽量使用 sudo 命令执行需要超级用户权限的命令,而不是直接切换到 root 用户。 限制 su 的使用:在 /etc/pam.d/su 中配置 PAM 模块,只允许特定用户或用户组使用 su。auth required pam_wheel.so use_uid 设置强密码:确保所有用户,尤其是 root 用户,使用强密码。 审计 su 命令:启用审计功能,记录所有 su 命令的使用情况。auditctl -w /usr/bin/su -p x -k su_commands 密钥认证:对于远程登录,使用基于密钥的认证,减少密码认证的使用。
2024年09月26日
8 阅读
0 评论
0 点赞
2024-09-26
WSL不止命令行-启动带图形界面的软件
起因我们都知道 wsl 启动后就死一个纯命令行终端,一直以来我都是使用纯命令行工具管理Linux的。今天看到网上有人在 wsl 中启动带图形界面的软件。没错,就是在wsl中启动带有图形界面的Linux软件。比如下面这个编辑器。出于好奇,我就体验了一番,并写下这篇笔记。安装gnome-terminalgnome-terminal 是一个图形界面的文本编辑器,通过以下命令安装sudo apt update sudo apt install gnome-terminal -y 启动报错报错信息:# Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Could not connect: 没有那个文件或目录上网搜索然后在网上去搜索解决,试了几个方案都不行。成功启动此时想起来在 Linux 中很多正常操作到了 wsl 中都要使用 sudo 提权才能运行。sudo gnome-terminal 加上 sudo 果然正常启动了。中文乱码-缺少字体本来wsl已经配置了中文环境但是 gnome-ternimal 中文依然乱码原因是缺少字体复制字符复制字体 - win11系统sudo mkdir -p /usr/share/fonts/windows11 sudo cp /mnt/c/Windows/Fonts/* /usr/share/fonts/windows11 再次打开就正常显示中文了低分辨率窗口分辨率比较低,锯齿感明显。此时已经不想再去搞分辨率的问题了,Linux图形界面一直都是踩过一个坑还会有另一个坑等待你。命令行就是最好的选择,最佳的体验。个人感受Windows+SSH才是Linux用户体验的天花板。你可以在Windows终端、第三方客户端、vscode中通过SSH连接Linux。
2024年09月26日
19 阅读
0 评论
0 点赞
2024-09-26
ssh 命令详解
一、命令简介ssh 命令用于安全登录远程主机,以便在远程机上执行命令或传输数据。例如登录远程主机 169.10.222.23 上的 soulio 用户:ssh
[email protected]
更多示例参考第三章。了解背景知识:ssh 加密1. 加密类型 对称加密: 在数据传输过程中使用相同的密钥进行加密和解密。常见的对称加密算法包括 AES(高级加密标准)、Blowfish 和 3DES(Triple Data Encryption Standard)。 非对称加密: 使用一对密钥(公钥和私钥)来加密和解密数据。公钥可以公开,而私钥则应保密。常见的非对称加密算法包括 RSA 和 DSA。 哈希函数: 用于确保数据完整性,防止数据在传输过程中被篡改。常见的哈希算法包括 SHA-256 和 SHA-1。 2. SSH 加密过程 密钥交换: 在连接开始时,客户端和服务器通过非对称加密交换公钥,以安全地生成共享的会话密钥。 会话密钥生成: 一旦密钥交换成功,双方生成一个对称的会话密钥,后续的通信将使用这个会话密钥进行加密。 数据加密: 使用会话密钥加密所有发送的数据,包括命令、输出和文件传输。 数据完整性检查: 在传输过程中,SSH 使用哈希函数确保数据的完整性,防止数据被篡改。 3. SSH 密钥管理 密钥对生成: 用户可以使用 ssh-keygen 工具生成 SSH 密钥对(公钥和私钥)。 公钥分发: 将公钥添加到远程主机的 ~/.ssh/authorized_keys 文件中,以便通过私钥进行身份验证。 私钥安全性: 私钥应妥善保管,通常加密存储,并在使用时输入密码。 4. SSH 加密的优点 安全性高: SSH 加密保护了数据传输过程中的机密性和完整性,防止窃听和数据篡改。 身份验证: SSH 支持多种身份验证方式,包括密码、密钥对和基于证书的认证,提供了灵活的安全选项。 远程管理: SSH 使得系统管理员能够安全地管理远程服务器,执行命令和文件传输。 5. 总结SSH 加密是保护远程连接和数据传输的关键技术,广泛应用于网络管理和安全通信。通过对称和非对称加密、密钥交换和数据完整性检查,SSH 确保了用户在使用网络时的数据安全。除了 ssh 命令外,stfp 和 scp 这两个文件传输命令也建议在 SSH 加密之上。二、命令参数命令格式ssh [选项] [用户名@]主机名或IP地址 [命令] 常用参数 -p port: 指定连接的端口号,默认是 22。 -i identity_file: 指定私钥文件用于身份验证。 -v: 启用详细模式,显示连接过程中的调试信息。 -X: 启用 X11 转发,以便在本地显示远程 GUI 应用程序。 -C: 启用压缩,提高传输速度。 选项太多,这里仅做收集,方便用时查阅。此刻的你不用记,甚至不用看。更多选项 -p: 指定端口(例如:ssh -p 2222
[email protected]
)。 -i: 指定私钥文件(例如:ssh -i /path/to/private/key
[email protected]
)。 -l: 指定登录用户名(例如:ssh -l user example.com)。 -o: 指定自定义 SSH 选项(例如:ssh -o "OptionName Value"
[email protected]
)。 -4: 强制使用 IPv4 地址(例如:ssh -4
[email protected]
)。 -6: 强制使用 IPv6 地址(例如:ssh -6 user@2001:db8::1)。 -C: 启用压缩(例如:ssh -C
[email protected]
)。 -c: 指定加密算法(例如:ssh -c blowfish,
[email protected]
)。 -D: 动态端口转发(例如:ssh -D 1080
[email protected]
)。 -L: 本地端口转发(例如:ssh -L 8080:localhost:80
[email protected]
)。 -R: 远程端口转发(例如:ssh -R 8080:localhost:80
[email protected]
)。 -N: 不执行远程命令,用于端口转发(例如:ssh -N -L 8080:localhost:80
[email protected]
)。 -f: 后台执行(例如:ssh -f -L 8080:localhost:80
[email protected]
)。 -g: 允许远程主机连接到转发的端口(例如:ssh -g -L 8080:localhost:80
[email protected]
)。 -T: 禁用伪终端分配(例如:ssh -T
[email protected]
)。 -t: 分配伪终端(例如:ssh -t
[email protected]
)。 -v: 详细模式(例如:ssh -v
[email protected]
)。 -X: 启用 X11 转发(例如:ssh -X
[email protected]
)。 -Y: 信任的 X11 转发(例如:ssh -Y
[email protected]
)。 三、命令示例1 最简单登录1.命令格式ssh
[email protected]
user:要登录的用户 example.com:要登录的主机,可以是一个 域名,也可以是一个 ip,还可以是一个 别名。最终都会指向某台主机。 对于未指定的信息,将会使用默认配置,比如端口使用 222.开始登录登录会验证用户密码,密码验证成功后进入远程主机的终端。现在你可以管理这台远程主机:执行命令,传输文件等操作。3.退出登录输出 exit 退出登录,将会回到本地主机的终端中。2 指定端口登录ssh -p 2222
[email protected]
通常 SSH 使用默认端口 22 进行通信,但是有些管理员可能会修改默认端口号,以避免网络攻击。如果你不知道正确的端口号,就无法与远程主机建立 SSH 连接。如果你知道正确端口号,可以使用 -p 指定,如上所示:-p 2222 指定连接远程主机的 2222 端口,而非 22 端口。3 让远程计算机执行一条命令ssh
[email protected]
'ls' 需要让远程计算机执行的命令,写在 ssh 命令的最后。通常命令执行后会有一个输出,输出会直接返回到当前终端中。这个例子将会返回在远程计算机上执行 ls 的结果,也就是列出远程计算机 example.com 的 user 用户的家目录列表。4 秘钥管理如果你经常登录某个远程主机,每次都要输密码就会显得很麻烦。有没有方法,让我们不需要输入密码就可以登录远程主机?有。方法一:使用 SSH 客户端比如 Termius将登录信息保存到客户端中下次登录时,客户端会调用你的配置(用户名、主机、密码)。从而用户无需输入。方法二:使用公钥将本地计算机的公钥发送远程计算机上,下次登录就不需要输入密码。真正的免密登录。1.生成秘钥如果新装的系统,可能还没有生成秘钥信息,使用以下命令生成秘钥:ssh-keygen 中间会有两三次提示,不用管,直接按回车键。看到类似提示就成功了。2.把公钥部署到远程主机ssh-copy-id
[email protected]
user 换成你在远程主机上的用户名 example.com 换成你的远程主机,可以是域名,可以是 ip,还可以是别名。最终都会指向你的主机。 tips:如果你有多个公钥,可以在命令中加上 -i 目录 部署指定公钥。执行命令,成功会有类似输出现在登录远程主机就不会再验证密码了。5 使用别名例如用 armbian 作为
[email protected]
的别名,这样用 ssh armbian 就可以登录指定主机,输入起来更友好。实现步骤:第一步,修改本地 ~/.ssh/config 文件,添加主机别名:Host armbian HostName 192.168.10.36 User soulio Port 22 #可选的配置 IdentityFile ~/.ssh/id_rsa #可选的配置 第二步,使用别名登录远程主机:ssh armbian 6 端口转发在 SSH 中,端口转发和代理转发是两种非常有用的功能,它们允许用户通过 SSH 会话来转发网络流量,从而绕过防火墙、访问内网资源或保护网络通信。SSH 端口转发是通过 SSH 通道安全地传输 TCP 流量的功能,可以分为三种类型:本地端口转发、远程端口转发和动态端口转发。它们分别允许将本地端口、远程端口或任意的流量通过 SSH 通道进行转发。本地端口转发 (远程发到本地)本地端口转发将本地计算机的一个端口绑定到远程服务器上的某个端口。这种方式常用于从本地访问远程服务器上的内部资源。语法:ssh -L [local_port]:[remote_host]:[remote_port] [user@ssh_server] local_port: 本地机器上将绑定的端口。 remote_host: 远程主机地址,可以是服务器的内部 IP 或域名。 remote_port: 远程主机的端口号。 ssh_server: 用于建立 SSH 连接的服务器。 示例:ssh -L 8080:intranet.example.com:80 user@ssh_server.com 这个命令将本地机器的 8080 端口与远程服务器 ssh_server.com 上的内部主机 intranet.example.com 的 80 端口相连。你可以通过在浏览器中访问 http://localhost:8080 来访问远程内网的资源。在局域网中实验:ssh -L 8080:localhost:32769
[email protected]
源:在 192.168.10.63:32769 上搭建 web 页面 转发:转发到本地 8080 远程端口转发 (本地发到远程)远程端口转发允许将远程服务器上的一个端口绑定到本地计算机或另一个远程机器的端口上,通常用于将外部网络的请求转发到本地计算机上。语法:ssh -R [remote_port]:[local_host]:[local_port] [user@ssh_server] remote_port: 远程服务器上的端口。 local_host: 本地计算机的地址。 local_port: 本地机器上的端口。 示例:ssh -R 8080:localhost:3000 user@ssh_server.com 此命令将远程服务器 ssh_server.com 的 8080 端口绑定到本地机器的 3000 端口。任何对 ssh_server.com:8080 的请求都会转发到你本地计算机的 3000 端口。设置-允许远程转发:编辑远程主机 sudo nano /etc/ssh/sshd_configGatewayPorts yes GatewayPorts 默认为 no,不允许远程转发。必须开启。修改配置后重启 ssh 服务使其生效。在局域网中实验:ssh -R 8081:localhost:16601
[email protected]
源:在本地 3000 端口搭建一个 web 页面 这里源不局限于本地主机,只要是本地主机可以访问到的页面都可以,比如 192.168.10.55:16601 转发:转发到 192.168.10.63:8080 动态端口转发动态端口转发是一种灵活的方式,它将本地机器的一个端口用作 SOCKS 代理,可以转发任意的网络请求。这种方式允许你通过 SSH 通道代理所有网络流量,类似于 VPN 的效果。语法:ssh -D [local_port] [user@ssh_server] local_port: 用于 SOCKS 代理的本地端口。 示例:ssh -D 1080 user@ssh_server.com 此命令将本地端口 1080 设置为 SOCKS 代理端口。你可以在浏览器或其他应用中设置 SOCKS 代理为 localhost:1080,通过 SSH 服务器转发所有网络流量。使用体验:但不好用。用了几分钟就开始报错,超时。建议用其他简单、稳定的工具呢。也可能是我未能掌握关键。设置-允许动态转发:编辑远程主机 sudo nano /etc/ssh/sshd_configAllowTcpForwarding yes #默认是yes PermitTunnel yes #默认是no 改为yes 确保这些选项被设置为 yes,然后重启 SSH 服务:sudo systemctl restart ssh 7 代理转发 代理转发,例如本地端口 1080 ssh -D 1080
[email protected]
SSH 代理转发 (Agent Forwarding) SSH 代理转发是一种允许在远程服务器上使用本地 SSH 代理功能的机制。通过代理转发,你可以在远程服务器上使用本地的 SSH 私钥进行身份验证,而不需要将私钥复制到远程服务器上。这对于通过中间跳板服务器访问更多服务器时非常有用。 工作原理 SSH 代理转发通过 SSH 代理 (ssh-agent) 进程,将本地机器的 SSH 代理功能转发到远程服务器。这样,远程服务器上的应用程序可以通过本地 SSH 代理进行密钥认证,而不会暴露私钥。 使用方式 使用 -A 选项启用 SSH 代理转发。语法:ssh -A user@ssh_server 示例:ssh -A user@jump_server 假设你通过 jump_server 访问另一台服务器 server2,你可以在 jump_server 上通过 SSH 代理连接到 server2,而无需在 jump_server 上存储私钥:ssh user@server2 总结 端口转发允许你通过 SSH 通道安全地转发本地或远程的网络流量,支持本地、远程和动态端口转发。 代理转发允许在远程服务器上使用本地 SSH 代理进行身份验证,避免在远程服务器上存储私钥,增加了安全性和灵活性。 这两种功能在网络安全和远程访问方面提供了极大的便利,尤其是在访问内网资源或通过跳板服务器进行管理时。注意事项如果你使用 WSL 环境,可能在某些环节遇到网络问题。远程转发时,WSL 无法将 localhsost:xxx 转发到远程端口。在纯 Linux 环境则成功。
2024年09月26日
3 阅读
0 评论
0 点赞
2024-09-25
source 命令:加载环境变量
一、命令简介source 命令在 Linux 中用于在当前 shell 环境中执行一个脚本文件。它通常用于加载环境变量或执行初始化脚本,而不启动新的 shell。 用途: source 命令允许用户在当前 shell 会话中运行指定的脚本文件,这意味着在脚本中定义的变量和函数可以在执行后继续在当前 shell 中使用。 替代命令: 也可以使用 . (点)命令来实现相同的效果,例如 . filename。 二、命令参数source filename filename: 要执行的脚本文件名,可以是相对路径或绝对路径。 三、命令示例source filename 或使用点命令:. filename 示例 创建一个脚本文件 setenv.sh:#!/bin/bash export MY_VAR="Hello, World!" 使脚本可执行并运行:chmod +x setenv.sh source setenv.sh 检查环境变量:echo $MY_VAR 输出将是:Hello, World! 注意事项 使用 source 命令时,脚本中的任何命令都会在当前 shell 环境中执行,而不会新建一个子 shell。 适用于加载配置文件(如 .bashrc, .bash_profile)或初始化工作环境。
2024年09月25日
5 阅读
0 评论
0 点赞
1
...
7
8
9
...
30