讲解一下bash初始化机制

本篇文章重点为大家讲解一下bash初始化机制,有需要的小伙伴可以参考一下。

Bash初始化文件

交互式login shell

在下列情况下,我们可以获得一个login shell:

登录系统时获得的顶层shell,无论是通过本地终端登录,还是通过网络ssh登录。这种情况下获得的login shell是一个交互式shell。 在终端下使用–login选项调用bash,可以获得一个交互式login shell。 在脚本中使用–login选项调用bash(例如:#!/bin/bash –login)可以得到一个非交互式的login shell。 使用su -切换到指定用户时,获得此用户的login shell。如果不使用-,则获得non-login shell。 login shell启动时首先读取/etc/profile系统全局配置,然后依次查找~/.bash_profile、~/.bash_login、~/.profile三个配置文件,并且读取首个找到的并且可读的文件。

login shell退出时读取并执行~/.bash_logout中的命令。 如果配置文件存在但不可读,则会显示错误消息;如果文件不存在,bash将自动搜索下一个文件。

默认在/etc/profile文件中会定义PATH、USER、MAIL、HOSTNAME、HISTSIZE等全局环境变量,还会自动导入/etc/bash.bashrc文件(包含系统级shell函数和别名),以及/etc/profile.d路径下被用于针对特定程序进行初始化的所有*.sh文件。

交互式non-login shell

非登录shell意味着在启动时不必通过系统身份验证。 GUI中用户打开的终端默认为非登录shell,可以通过logout命令判断:

# 在Ubuntu GUI桌面打开一个终端logout
bash: logout: not login shell: use `exit' > bash --login > logout # 正常登出 什么也不会输出 

非登录shell在初始化时仅读取~/.bashrc资源文件, 而~/.bashrc文件会自动被~/.bash_profile或~/.profile加载,因此为了保证login shell和交互式non-login shell得到相同的配置,一般将环境变量定义在~/.bashrc文件中。

echo "export sflag=\"login shell will see this message\"" >> ~/.profile  
> bash
> echo $sflag
         # 找不到这个变量 会打印一个空行exit
> bash --login
> echo $sflag
login shell will see this message
> logout

非交互式shell

通过bash命令执行脚本时会以非交互(non-interactively)的方式启动shell,这保证了在脚本执行过程中不会被用户干扰。在非交互式脚本启动时,仅会加载BASH_ENV变量指向的文件。但要注意, 由于PATH变量默认不会被非交互式shell加载,因此变量BASH_ENV的值应该为绝对路径。

通过特殊变量-可以查看当前shell的模式:

echo $-
himBHs # 带有'i'就是交互式shell

另一个简单的方式是检查当前shell中是否存在提示符环境变量PS1.

if [ -z "$PS1" ]; then echo "非交互式";else echo "交互式";fi

特殊情况

兼容模式

如果使用命令sh调用bash,则为了保证兼容性会按照sh的方式对bash进行初始化。作为login shell启动时,bash依次读取/etc/profile和~/.profile配置文件。作为non-login shell启动时,bash仅会读取环境变量ENV指向的文件。

POSIX模式

当通过以下方式启动bash时:

设置set -o posix 或 export POSIXLY_CORRECT=1
bash --posix

bash会尽可能按照POSIX标准进行初始化,仅会读取环境变量ENV指向的文件。

远程启动脚本

使用rshd远程启动脚本时仅会加载 ~/.bashrc文件,但要注意的是尽量不要使用rlogin, telnet, rsh, rcp等远程命令,因为这些命令会传输未加密的明文信息。如果有远程访问需求尽量使用SSH。

UID与EUID不匹配

在创建进程时会在task_struct中记录进程运行时所需要的信息。其中UID(真实用户ID)用于记录创建进程的用户的ID,EUID(有效用户ID)用于判断当前进程对文件的访问级别,一般情况下UID = EUID。如果可执行文件的set-user-ID: SUID位有效(例如:-rwsr-xr-x,用户的x被替换为s),表示当该文件被执行时,进程具有文件所有者的权限而不是执行者的权限(EUID的值为文件所有者的ID)。

如果我们给bash可执行文件设置了set-user-id标志,那么由于其默认所有者为root,当其他非root用户运行bash时,该进程的UID将不等于EUID,这种情况下为了保证安全性,bash在初始化阶段不会加载任何文件。

受限制的shell

通过rbash或bash –restricted或bash -r启动时会生成功能受限制的shell,具体表现为:

不能使用cd命令并且命令中不能包含/ 不能更改SHELL、PATH、ENV和BASH_ENV环境变量 source命令的参数也不能包含带有/的文件 hash –p 用于给路径起别名的命令的参数中也不能包含/ 初始化时不会导入文件中的函数并且会忽略SHELLOPTS 不能使用重定向 不能使用exec命令 不能使用enable -f/-d增加删除命令 不能使用command -p指定运行命令需要的路径 不能主动关闭限制模式 这个功能理论上可以让用户在指定的文件夹内执行指定的文件来完成有限的功能,但是如果环境变量设置不当会导致用户很轻松地就能解除限制:

> rbash
> cd /etc
rbash: cd: restricted
> bash
> cd /etc # 可以成功执行,因为这个时候我们在bash环境中,没有任何限制

一种有效的做法是给新建的用户的能执行的命令作出限制,例如我们可以新建一个只能执行ftp命令的ruser:

> useradd -s /bin/rbash ruser # 设置用户登录时提供的shell
> chown -R root:ruser /home/ruser/.bashrc /home/ruser/.bash_profile
# 设置root为拥有者,ruser组为组拥有者(新建的ruser默认输入ruser组)
> chmod 640 /home/ruser/.bashrc /home/ruser/.bash_profile
# root可以读写,ruser组里的用户只读,其他用户什么也不能干
> mkdir /home/ruser/bin # 存储用户的可执行文件或链接echo "export PATH=/home/ruser/bin" >> /home/ruser/.bash_profile
> ln -s /user/bin/ftp /home/ruser/bin/ftp

到此这篇关于详解bash中的初始化机制的文章就介绍到这了。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/220225.html<

(0)
运维的头像运维
上一篇2025-04-14 11:36
下一篇 2025-04-14 11:37

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注