首页 > 系统相关 >第二周学习笔记Linux:Linux用户权限管理 |文本处理|shell基础

第二周学习笔记Linux:Linux用户权限管理 |文本处理|shell基础

时间:2024-11-08 17:42:44浏览次数:1  
标签:shell -- 用户 文本处理 etc useradd Linux ID

用户权限命令以及ACL权限相关命令

1. Linux安全模型

资源分派:

  • Authenticaton:登陆认证,验证用户身份
  • Authorization:授权,不同的用户设置不同权限
  • Accouting:审计,检查用户的时候行为
    即Linux的AAA认证,是针对网络设备的网络访问控制策略和安全模型
  1. 1用户
  • Linux是多系统用户,可以同时存在多个用户,每个用户之间都是相互隔离的
  • 在系统当中,每个用户通过User ID (UID)来做唯一标识。
  • 超级管理员:root(可以更改名称)的用户ID为 0
  • 普通用户-系统用户:系统用户 ID为1-499(CentOS6及以前),1-999(CentOS) 分配给后台程序使用如:mysql
  • 普通用户-登陆用户:500+( CentOS6及以前),1000+(CentOS及以后)给用户进行交互登陆
  1. 2用户组
  • Linux中可以将多个用户加入到一个组当中,组就是包含0个或多个用户集合,用户组通过Group ID(GID)来唯一标识
  • 管理员组:root, 0
  • 普通组:
    系统组:1-499(CentOS 6以前), 1-999(CentOS7以后), 对守护进程获取资源进行权限分配
    普通组:500+(CentOS 6以前), 1000+(CentOS7以后), 给用户使用
用户和组的关系:
  • 一个用户至少有一个组,也可以有多个组
  • 一个组至少有0个用户,也可以有多个用户
  • 用户主要组又称私有组:一个用户必须属于且只有一个主组,创建用户时,默认创建于其同名的组作为主组;
  • 用户附加组又称辅助组,一个用户可以属于0个或多个附加组
  • 使用组,可以对用户进行批量管理,比如对一个组授权,则改组所有用户都能继承这个组的使用权限
  1. 3安全上下文
    1. 在Linux系统中,运行的程序(即进程process),都是进程发起者的身份运行;进程所能访问的资源取决于进程运行者的身份
    1. 什么是程序:能执行的二进制文件即是程序
    1. 什么是进程:运行中的程序,就是进城

2.用户和组的配置文件

  1. 用户和组主要配置文件
    /etc/passwd:用户及其属性信息(名称、UID、主组ID等)
    /etc/shadow:用户密码及其相关属性
    /etc/group:组及其属性信息
    /etc/gshadow:组密码及其相关属性

3.1用户和组管理命令

useradd命令可以创建新的Linux用户

点击查看代码
useradd -g #用于指定用户组
useradd -c #新账户的GECOS字段
useradd -u #指定UID
useradd -s #指定shell 可以在/etc/shells 中查看
useradd -r #创建系统用户
useradd -m #创建家目录 一般用于登陆用户
useradd -M #不创建家目录 一般用于不登陆用户
useradd -p #设置密码 密码是以明文的形式存在
useradd -o #允许使用重复的UID创建用户
useradd -G #为用户指明附加组,组须事先存在
useradd -N #不创建同名组 使用users组做主组
useradd -D #显示或默认的user add·配置,默认配置文件是/etc/default/useradd
useradd -e #指定账户的过期日期
useradd -f #密码过期之后,账户被彻底禁用之前的天数,0表示密码过期立即禁用,-1 #表示不使用此功能
useradd -k #指定目录模版,创建家目录,会生成一些默认文件,如果指定,就会该目录复制文件,默认/etc/skel/,要配合-m使用
useradd -K #不使用/etc/login.defs中的默认值
useradd -l #不将用户添加到最近登陆和登陆失败记录

3.2用户属性修改

usermod命令修改用户属性

点击查看代码
  -b, --badname                 allow bad names
  -c, --comment COMMENT         GECOS 字段的新值
  -d, --home HOME_DIR           用户的新主目录
  -e, --expiredate EXPIRE_DATE  设定帐户过期的日期为 EXPIRE_DATE
  -f, --inactive INACTIVE       过期 INACTIVE 天数后,设定密码为失效状态
  -g, --gid GROUP               强制使用 GROUP 为新主组
  -G, --groups GROUPS           新的附加组列表 GROUPS
  -a, --append GROUP            将用户追加至上边 -G 中提到的附加组中,
                                并不从其它组中删除此用户
  -h, --help                    显示此帮助信息并退出
  -l, --login NEW_LOGIN         新的登录名称
  -L, --lock                    锁定用户帐号
  -m, --move-home               将家目录内容移至新位置 (仅于 -d 一起使用)
  -o, --non-unique              允许使用重复的(非唯一的) UID
  -p, --password PASSWORD       将加密过的密码 (PASSWORD) 设为新密码
  -R, --root CHROOT_DIR         chroot 到的目录
  -P, --prefix PREFIX_DIR       prefix directory where are located the /etc/* files
  -s, --shell SHELL             该用户帐号的新登录 shell
  -u, --uid UID                 用户帐号的新 UID
  -U, --unlock                  解锁用户帐号
  -v, --add-subuids FIRST-LAST  添加子 UID 范围
  -V, --del-subuids FIRST-LAST  移除子 UID 范围
  -w, --add-subgids FIRST-LAST  添加子 GID 范围
  -W, --del-subgids FIRST-LAST  移除子 GID 范围
  -Z, --selinux-user SEUSER     用户的新的 SELinux 用户映射

3.3删除用户

userdel 可删除Linux用户

点击查看代码
选项:
  -f, --force                  强制删除,哪怕用户正在登陆状态
  -h, --help                    显示此帮助信息并退出
  -r, --remove                  删除主目录和信件池
  -R, --root                    chroot 到的目录
  -Z, --selinux-user            为用户删除所有的 SELinux 用户映射

3.4查看用户相关的ID信息

id命令可以查看用户的UID,GID等信息

点击查看代码
  -a             忽略,仅为与其他版本相兼容而设计
  -Z, --context  仅显示当前用户的安全上下文
  -g, --group    仅显示有效用户组ID
  -G, --groups   显示所有组ID
  -n, --name     显示组名称而非数字,与 -ugG 一起使用
  -r, --real     显示真实ID 而非有效ID,与 -ugG 一起使用
  -u, --user     仅显示有效用户ID

image

3.5切换用户以其他用户身份执行

点击查看代码
 -m, -p, --preserve-environment      不重置环境变量
 -g, --group                     指定主组,只有root切换普通用户才指定此参数

 -|-l, --login                  完全切换
 -c, --command             不切换用户,而临时使用该用户权限和环境执行命令
 --session-command         使用 -c 向 shell 传递一条命令
                                   而不创建新会话
 -f, --fast                      向shell 传递 -f 选项(csh 或 tcsh)
 -s, --shell                    若 /etc/shells 允许,运行
 -P, --pty                       create a new pseudo-terminal

su UserName :非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换 su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换

说明:root su至其他用户无须密码;非root用户切换时需要密码
注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很
多的bash子进程,环境可能会混乱。

3.6密码相关设置

passwd可以修改用户密码 可以使用--help 查看详细用法
passwd [option...] 用户名
普通用户修改自己密码,要验证当前使用的密码 其实就是更新/etc/shadow文件
chage 可以修改用户密码策略

3.8创建组

groupadd 实现创建组 可以使用--help查看详细用法
格式:groupadd [options ] 组名称
groupmod 组属性修改
grouupdel 可以删除组
删除组:如果改组下有用户将组作为主组,则不能删除
删除用户:会把与其同ID的主组也给删除,前提是该组没有其他用户

4.文件权限管理

文件分属三种不同用户 属主 u 属组 g 其他用户 o
文件权限只有三种 读 -r-w 可执行权限 -x
设置文件所有者chown
可以修改文件属主,也可以修改文件属组
chown owner # 只修改所有者
owner:group #同时修改所有者和属组
:group #只修改属组,冒号也可以用. 代替

设置文件属组信息chgrp 可以只修改文件属组

修改文件权限chomd

ACL相关命令

setfacl可以设置ACL权限
getfacl可以查看设置的ACL权限

点击查看代码
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
#常用选项
-m|--modify=acl         #修改acl权限
-M|--modify-file=file #从文件读取规则
-x|--remove=acl         #删除文件acl 权限
-X|--remove-file=file #从文件读取规则
-b|--remove-all         #删除文件所有acl权限
-k|--remove-default     #删除默认acl规则
--set=acl               #用新规则替换旧规则,会删除原有ACL项,用新的替代,一定要包含
UGO的设置,不能象 -m一样只有 ACL
--set-file=file         #从文件读取新规则
--mask                #重新计算mask值
-n|--no-mask           #不重新计算mask值
-d|--default           #在目录上设置默认acl
-R|--recursive         #递归执行
-L|--logical           #将acl 应用在软链接指向的目标文件上,与-R一起使用
-P|--physical         #将acl 不应用在软链接指向的目标文件上,与-R一起使用

vim相关操作

  1. 直接输入vim 文件名 即可进入编辑模式 输入:q可以直接退出文件编辑
  2. 打开文件按i即可进入插入模式 按esc键即可推出插入模式
  3. 在终端输入vim 1.txt打开文件 按住 i进入插入模式,输入“马哥出品,必属精品” esc推出插入模式,输入:wq 保存退出即可
  4. 查看刚刚输入的内容 在终端输入cat 1.txt即可在输出文件内容
点击查看代码
#命令模式 --------------------------> 插入模式
#下列按键皆可
#i insert, 在光标所在处输入
#I 在当前光标所在行的行首输入
#a append, 在光标所在处后面输入
#A 在当前光标所在行的行尾输入
#o 在当前光标所在行的下方打开一个新行
#O 在当前光标所在行的上方打开一个新行
#命令模式 --------------------------> 扩展命令模式
#直接敲冒号 :
#################################################################
#插入模式 -------------------------> 命令模式
#按ESC键
#插入模式 -------------------------> 扩展命令模式
#按ESC到命令模式,再按冒号 : 到扩展命令模式
#################################################################
#扩展命令模式 ----------------------> 命令模式
#ESC键或Enter键或退格健
#扩展命令模式 ---------------------> 插入模式
#ESC|Enter|退格键 到命令模式,再i|I|a|A|o|O 到插入模式
[root@ubuntu2204 ~]# echo -e '\e[1;31mhello\e[0m'
查找并替换内容
:s /要查找的内容/要替换的内容/修饰符
:%s 表示全文查找

正则表达式及grep的基本用法

点击查看代码
.      #匹配任意单个字符
[]     #匹配指定范围的单个字符
[^]   #匹配指定范围外的任意单个字符
\s    #匹配任何空白字符
\S     #匹配任何非空白字符
\w    #匹配一个字母,数字,下划线,汉字,其他国家文字
\W    #匹配一个非字母,数字,下划线,汉字,其他国家文字的字符
---------------------------------------------------------------------------------------
匹配次数
*   #匹配前面的字符任意次
.*  #任意长度的任意字符
\? #匹配其前面的字符出现0次或1次
\+  #匹配其前面字符最少一次
\{n\}  #匹配前面的字符n次
\{m,n} #匹配前面字符至少m次,至少n次
\{,n\}   #匹配前面字符至多n次
\{n,\} #匹配前面的字符至少n次

----------------------------------------------------------------------------------------
位置锚定
^       #行首锚定,用于模式的最左侧
$       #行尾锚定,用于模式的最右侧
^$     #空行
^PATTERN$ #用于模式匹配整行
^[[:space:]]*$  #空白行
\< 或 \b    #词首锚定,用于单词模式的左侧
\> </或> \b #词尾锚定,用于单词模式的右侧
\ <PATTERN\> #匹配整个单词


删除/etc/passwd文件每一行第一个字符
cp /etc/passwd 到 ~/ 在终端输入 sed -r 's/^.//g' passwd

image

删除文件每行的第二个字符:sed -r 's/^(.)(.)/\1/g' passwd

image

删除每行倒数第一个字符:``sed -r ' s/.$//g' passwd

image

删除每行倒数第二个字符sed 's/(.)(.)$/\2/' passwd
image

shell编程基础

变量的命名规则:
  1. 只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。
  2. 不能以数字开头: 变量名不能以数字开头,但可以包含数字。
  3. 避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
  4. 使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。
  5. 避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
  6. 避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数

环境变量:可以向下继承的变量 ,可以使子继承父进程 ,但父进程无法继承子进程 。 一般只用于文件配置例如 PATH,USER,PS1,PWD...
用户可以使用export来自己声明环境变量
例如:export MYSQL_HOME = /etc/mysql

位置变量:位置变量通常用于为 Shell 脚本或函数传递所需的参数

点击查看代码
例如:$1表示传递给shell脚本的第1个参数
$2表示传递给shell脚本的2参数
............依次类推
$0 命令本身,包括路径
$* 传递脚本的所有参数,全部参数合成一个字符串
$@ 传递给脚本所有参数,每个参数为独立字符串
$# 传递给脚本的参数的个数

状态变量:

点击查看代码
$$   获取当前shell的进程号(pid)
$!    执行上一个指令的pid,上一个后台运行进程的进程号
$?   获取执行上一个指令的返回值(0为成功,非零为失败)
$_    在此之前执行的命令(上一个命令)或脚本的最后一个参数

只读变量:可以使用 declare -r 命令或 readonly 命令将变量声明为只读。
只读变量一旦赋值后,其变量值将不能被改变

shell解决鸡兔同笼问题

问题:鸡和兔子头共有30只 ,腿共有80只。问鸡有几只,兔子有几只。
image

image

for循环创建100个用户

(1)for 遍历1..100
image
(2)用户ID是否存在
(3)用户存在说明存在,不存在则输出用户添加成功

点击查看代码
#遍历1到100
for i  in {1..100}
do
       #判断用户是否存在 ,不存在则输出重定向到/dev/null并创建用户 输出创建成功信息
        if ! id user$i &>/dev/null;then
              #创建用户 用户名为 user + i
                useradd user$i
                echo "user$i User create sucessful "
        else
		#输出创建失败信息
                echo "user$i USer already exists"
        fi

done

标签:shell,--,用户,文本处理,etc,useradd,Linux,ID
From: https://www.cnblogs.com/sun123456/p/18523572

相关文章

  • Shell概述、编写及执行脚本、Shell变量+数值运算
    一、shell基本介绍 1.1 什么是shell◆ 在Linux内核与用户之间的解释器程序◆通常指/bin/bash◆负责向内核翻译及传达用户/程序指令◆相当于操作系统的“外壳”1.2 shell使用方式◆交互式 ——命令行-----人工干预、智能化程度高-----逐条解释执行、效率......
  • 监控 Windows 更新补丁安装过程中的文件夹和文件,可以通过 PowerShell 监控 Windows 更
    监控Windows更新补丁安装过程中的文件夹和文件,可以通过PowerShell监控Windows更新的日志文件夹、注册表或其他相关位置。Windows更新会在多个地方生成日志和文件,下面提供了一个使用PowerShell监控Windows更新相关路径、文件夹及文件的示例。监控Windows更新相关的文......
  • linux文件的时间
    在类Unix系统中,文件的时间戳有几个不同的类别,每个时间戳代表了文件生命周期中的不同事件。"modify时间"(mtime)实际上是其中之一,下面是对常见时间戳的详细区分和解释:1. 修改时间(mtime -ModifyTime)定义:mtime 是文件内容最后一次被修改的时间。更新:当文件的内容发生改变......
  • c++执行shell操作
     message("----->>>>>shelldemo/CMakeLists.txt")#收集当前目录下所有的.cpp文件aux_source_directory(.DIR_SRCS)#添加可执行文件add_executable(shelldemo${DIR_SRCS})#链接需要的库target_link_libraries(shelldemo${LIB_LIB})/shelldemo/CMakeList......
  • 【Linux】获得同一子网下当前在线设备IP/Latency/MAC 通过nmap指定CIDR扫描当前在线设
    【Linux】获得同一子网下当前在线设备IP/Latency/MAC通过nmap指定CIDR扫描当前在线设备通过路由器的后台,查看当前在线设备,受到网卡版本的影响,有时会有部分设备看不见MAC和分配的IP。此时,可以借助命令行工具扫描子网下所有连接的设备信息与通信状态。Nmap是一个强大的网......
  • 【Linux】为终端命令自定义快件键并弹窗提醒 设置快捷键切换网络代理(Network Proxy)Dis
    【Linux】为终端命令自定义快件键并弹窗提醒设置快捷键切换网络代理(NetworkProxy)Disabled/Manual并弹窗提醒可以自定义快捷键执行终端命令,执行完毕会有弹窗提醒。下面给一个例子,设置快捷键切换网络代理(NetworkProxy)Disabled/Manual并弹窗提醒。适用于Ubuntu系统,为......
  • Linux 终端控件:实时时刻表
    为了看几点才能讨论所以设计的,因此这里面有一个自带的机房时间表,你直接跑就行写得很naive,因为没找到Linux有啥API接口因此你需要在终端里跑如果用Vscode推荐分一个终端挂着否则可以单开一个终端然后置顶终端各种部件和时刻详细信息都提供了快捷修改接口,设置项全都放在......
  • 云服务器Linux部署war、jar包,并在nginx配置域名
    一,打包Jar包        一个Springboot项目默认打包jar包,无需修改配置,点击右侧Maven-Lifecycle-package打包即可注意:需要先检查pom.xml文件,可能此时打包完的jar包会出现        nomainmanifestattribute,intest-0.0.1-SNAPSHOT.jar        xx......
  • 【linux】Linux虚拟网络中的网络接口介绍
    原创信息技术圈IntroductiontoLinuxinterfacesforvirtualnetworkingLinux拥有丰富的虚拟网络功能,这些功能为托管虚拟机、容器以及云环境提供了基础。在这篇文章中,我将简要介绍所有常用虚拟网络接口类型。本文不涉及代码分析,仅对Linux上的接口及其使用进行简要介绍。......
  • linux新增物理卷,扩容逻辑分区,出现WARNING: xfs signature detected on /dev/vdb at of
    linux新增物理卷出现WARNING:xfssignaturedetectedon/dev/vdbatoffset0.Wipeit?[y/n]:标识这个/dev/vdb磁盘已经从0位置被标记为xfs类型的文件系统报错解释:这条信息表示在设备/dev/vdb上检测到了XFS文件系统的签名。通常情况下,这可能意味着分区/dev/vdb已被......