第1章
组命名管理**    1

1.1 group组信息和密码信息    1

1.1.1 /etc/group 组账户信息    1

1.1.2 /etc/gshadow 组密码信息    1

1.1.3 groupadd增加新组    1

1.1.4 使用groupmod命令修改组信息    1

1.1.5 使用groupdel删除组    1

1.1.6 使用gpasswd设置组密码    1

1.1.7 使用newgrp命令切换基本组身份    1

第2章 5身份切换*****    1

2.1 Shell分类    1

2.2 全局配置和个人配置设置冲突, 以个人设置为准    1

2.3 如果全局配置和个人配置出现冲突, 那么如何验证呢?    1

2.4 切换用户,使用命令su [-] username    1

第3章 sudo提升权限*****    1

3.1 entos7提权方法    1

3.2 sudo配置选项详解    1

3.3 检查普通用户sudo权限明细    1

3.4 sudo免密码配置选项    1

3.5 sudo配置组    1

3.6 配置sudo权限    1

第4章 sudo日志审计    1

4.1 安装sudo、rsysylog    1

4.2 日志审计    1

 

  1. 组命名管理**

  2. group组信息和密码信息

    组账户信息保存在/etc/group和/etc/gshadow两个文件中。

  1. /etc/group 组账户信息

[root@oldboy ~]# head -3 /etc/group

root:x:0:

bin:x:1:

daemon:x:2:

// /etc/group由 ':' 分割成4个字段,每个字段的具体含义如下:

字段名称 注释说明

1.组账户名称 //组的名称

2.密码占位符 //组的密码(存在/etc/gshadow)

3.组GID //组GID信息

4.组成员 //这里仅显示附加成员,基本成员不显示

  1. /etc/gshadow 组密码信息

[root@oldboy ~]# head -4 /etc/gshadow

root:::

bin:::

daemon:::

sys:::

// /etc/gshadow由 ':' 分割成4个字段,每个字段的具体含义如下:

字段名称 注释说明

1.组账户名称 //组名称

2.密码占位符 //组密码

3.组管理员 //组管理员

4.组成员 //这里仅显示附加成员,基本成员不显示

  1. groupadd增加新组

    groupadd [-g GID] groupname

    -g:指定组的GID,不指定GID时,GID从1000开始

[root@oldboy ~]# tail -1 /etc/group

music:x:2000:

    -r:创建系统组,gid从201-999

[root@oldboy ~]# tail -1 /etc/group

song:x:996:

 

  1. 使用groupmod命令修改组信息

    groupmod [选项] groupname

    -g:修改组GID

[root@oldboy ~]# tail -1 /etc/group

song:x:3001:

    -n:修改组名称

[root@oldboy ~]# tail -1 /etc/group

song1:x:3001:

 

  1. 使用groupdel删除组

    groupdel groupname

    当该组是用户的基本组时无法删除,只有删除用户或者用户变更基本后,方可删除该组

[root@oldboy ~]# tail -1 /etc/passwd

cat:x:6002:3001::/home/cat:/bin/bash

[root@oldboy ~]# groupdel song1

groupdel:不能移除用户"cat"的主组

 

    当该组只是用户的附加组时,可以直接删除

uid=6002(cat) gid=3000(music) 组=3000(music),3001(song1)

[root@oldboy ~]# groupdel song1

 

  1. 使用gpasswd设置组密码

[root@oldboy ~]# gpasswd music

正在修改 music 组的密码

新密码:

请重新输入新密码:

 

  1. 使用newgrp命令切换基本组身份

//检查账户信息

[root@oldboy ~]# id oldboy

uid=6001(oldboy) gid=5008(network_sa) gro

 

 

 

 

 

 

 

 

 

 

 

  1. 5身份切换*****

  2. Shell分类

1、交互式shell 等待用户输入执行提交的命令(终端操作), exit退出

2、非交互式shell 执行shell脚本, 脚本执行结束shell自动退出

3、登陆shell 需要输入用户名和密码才能进入shell, su - oldboy

4、非登陆shell 不需要输入用户和密码就能进入,比如执行, sh, bash

查看登陆shell

[root@oldboy ~]# pstree

systemd─┬─NetworkManager───2*[{NetworkManager}]

├─VGAuthService

├─agetty

├─auditd───{auditd}

├─crond

├─dbus-daemon

├─master─┬─pickup

│ └─qmgr

├─polkitd───5*[{polkitd}]

├─rsyslogd───2*[{rsyslogd}]

├─sshd───sshd───bash───pstree

├─systemd-journal

├─systemd-logind

├─systemd-udevd

├─tuned───4*[{tuned}]

└─vmtoolsd───{vmtoolsd}

 

//临时设置,永久设置需要写配置文件

[root@oldboy ~]# export PS1='[\h@\u \t]#'

[oldboy@root 02:06:28]#

bash配置文件

Bash的配置文件保存用户的工作环境

个人配置文件: ~/.bash_profile ~/.bashrc

全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc

 

profile类文件, 设定环境变量, 登陆前运行的脚本和命令

bashrc 类文件, 设定本地变量, 定义命令别名

 

  1. 全局配置和个人配置设置冲突, 以个人设置为准

1、shell配置文件应用顺序

    //登录式shell配置文件执行顺序

    /etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc

 

    //非登陆式shell配置文件执行顺序

    ~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh

 

    //如何验证登陆shell和非登陆shell,配置文件执行顺序, 只需要在每个配置文件加入一段 "echo"即可。

    //最后通过登陆shell和非登录shell方式登陆linux, 即可验证执行顺序。

  1.     如果全局配置和个人配置出现冲突, 那么如何验证呢?

 

    编辑全局配置 /etc/profile 新增一行: PS1='[\h@\u \t]#'

    [oldboy@root 02:16:57]# //当前终端shell环境

    编辑个人配置 /home/oldboy/.bash_profile 新增一行: PS1='[\u@\H]#'

[oldboy@root 02:18:27]#su oldboy

[oldboy@oldboy root]$

[oldboy@root 02:18:34]# su - oldboy

[oldboy@oldboy.com]#

创建用户,并登录系统

[root@oldboy ~]# useradd oldboy

[root@oldboy ~]# echo "123"|passwd --stdin oldboy

更改用户 oldboy 的密码 。

passwd: 所有的身份验证令牌已经成功更新。

//使用oldboy用户登录Linux

oldboy@10.0.0.200's password:

Last login: Sun Nov 5 17:23:06 2017 from 10.0.0.200

[oldboy@oldboy ~]$

 

//可以使用whoami查看当前登录用户

[oldboy@oldboy ~]$ whoami

oldboy

  1. 切换用户,使用命令su [-] username

su命令后面跟 - 代表进入登陆式shell 否则代表进入非登陆式shell 只不过他们所执行的环境变量配置文件不一样。

普通用户su -不加username时可以切换root用户, 但需要输入密码。

超级管理员root用户使用su -切换普通用户不需要密码。

[oldboy@oldboy ~]$ pwd

/home/oldboy

 

//不加 '-' 切换到root账户下时,当前目录没有变化

[oldboy@oldboy ~]$ su

密码:

[root@oldboy oldboy]# pwd

/home/oldboy

[root@oldboy oldboy]# exit

exit

 

//加上 '-' 切换到root账户后,当前目录为root账户的家目录。

//当用root切换普通用户时,是不需要输入密码的。

[oldboy@oldboy ~]$ su -

密码:

[root@oldboy ~]# pwd

/root

以某个用户的身份执行某个服务,使用命令su -c username

 

[root@oldboy ~]# su - oldboy -c 'ifconfig'

[root@oldboy ~]# su - oldboy -c 'ls ~'

  1. sudo提升权限*****

su切换用户身份,如果每个普通用户都能切换到root身份,如果某个用户不小心泄漏了root的密码,那系统会变得非常不安全。

为了改进这个问题,从而产生了sudo这个命令。使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。

默认只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的,即,使用 visudo命令去编辑相关的配置文件/etc/sudoers

 

  1. centos7提权方法

[root@oldboy ~]# usermod -G wheel oldboy

 

  1. sudo配置选项详解

//下面解释如上每行代表含义

用户名

主机名

角色名

命令名

   

root

ALL=

(ALL)

ALL

   

oldboy

ALL

使用最高角色执行

/bin/rm,

/bin/cp

//执行命令

oldboy

ALL=(ALL)

NOPASSWD:/bin/cp,

/bin/rm

不需要密码使用rm、cp命令

 

 

普通用户验证sudo权限

//切换普通用户

[root@oldboy ~]# su - oldboy

 

  1. 检查普通用户sudo权限明细

[oldboy@oldboy ~]$ sudo -l

...省略部分

User oldboy may run the following commands on this host:

(ALL) /bin/rm, (ALL) /bin/cp

 

//普通用户删除opt目录,删除失败

[oldboy@oldboy ~]$ rm -rf /opt/

rm: cannot remove `/opt': Permission denied

 

//使用sudo提权,验证用户权限是否可用,需要输入普通用户的密码

[oldboy@oldboy ~]$ sudo rm -rf /opt

 

  1. sudo免密码配置选项

//普通用户执行sudo不需要输入密码配置

[root@oldboy ~]# visudo

 

//修改前

oldboy ALL=(ALL) /bin/rm, /bin/cp

//修改后

oldboy ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp

 

//默认普通用户无权删除

[oldboy@oldboy ~]$ rm -f /root/002

rm: cannot remove `/root/002': Permission denied

//验证sudo免密码执行权限

[oldboy@oldboy ~]$ sudo rm -f /root/002

  1. sudo配置组

//如果每增加一个用户需配置一行sudo,这样设置太麻烦了。所以可以进行如下设置:

//新增组

%oldboy ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp

//group1这个组的所有用户都拥有sudo的权力。接下来只需要将用户加入该组即可。

 

//创建用户加入该组

[root@oldboy ~]# groupadd oldboy

[root@oldboy ~]# useradd oldboy -g oldboy

[root@oldboy ~]# useradd oldgirl -g oldboy

 

//root用户建立目录

[root@oldboy ~]# mkdir /root/oldboy_sudo

 

//切换用户并删除测试

[root@oldboy ~]# su - oldboy

[oldboy1@oldboy ~]$ rm -rf /root/oldboy_sudo

rm: cannot remove `/root/bgx_sudo': Permission denied

 

//使用sudo

[oldboy1@oldboy ~]$ sudo rm -rf /root/oldboy_sudo

当然配置文件/etc/sudoers包含了诸多配置项,可以使用命令 man sudoers 来获得帮助信息。

 

下面介绍一个很实用的案例,我们的需求是把Linux服务器设置成这个样子:只允许使用普通账户登陆Linux服务器,但可以让普通用户不输入密码就能sudo su -切换到root账户。

 

//禁止root用户登陆

[root@oldboy ~]# sed -i 's@#PermitRootLogin yes@PermitRootLogin no@g' /etc/ssh/sshd_config

[root@oldboy ~]# systemctl restart sshd

 

  1. 配置sudo权限

[root@oldboy ~]# visudo

User_Alias USER_SU = oldboy1,oldboy

Cmnd_Alias SU = /bin/su

USER_SU ALL=(ALL) NOPASSWD:SU

 

//使用root登陆服务器失败

ssh root@10.0.0.200

root@10.0.0.200's password:

Permission denied, please try again.

 

//使用普通用户登陆服务器

~ ssh oldboy@10.0.0.200

oldboy@10.0.0.200's password:

Last login: Mon Oct 30 09:28:21 2017 from 10.0.0.1

 

//使用sudo提权至root用户

[oldboy@oldboy ~]$ sudo su -

[root@oldboy ~]#

 

 

  1. sudo日志审计

通过sudo和syslog配合实现对所有用户进行权限的日志审计并将记录日志集中管理,实施后让所有运维和开发执行的sudo命令都有记录可查,杜绝了内部人员的操作安全隐患。

sudo日志审计,专门针对sudo命令的系统用户记录其执行的命令相关信息,所谓sudo命令日志审计,并不记录普通用户的操作,而是记录执行sudo命令的用户操作。

 

  1. 安装sudo、rsysylog

[root@oldboy ~]# yum install -y sudo rsyslog

 

//检测是否安装成功

[root@oldboy ~]# rpm -qa rsyslog sudo

rsyslog-8.24.0-16.el7.x86_64

sudo-1.8.19p2-13.el7.x86_64

配置/etc/sudoers记录日志路径

[root@oldboy ~]# echo "Defaults logfile=/var/log/sudo.log" >>/etc/sudoers

 

//查看追加的日志配置

[root@oldboy ~]# tail -1 /etc/sudoers

Defaults logfile=/var/log/sudo.log

 

//检查语法

[root@oldboy ~]# visudo -c

/etc/sudoers: parsed OK

 

 

配置rsyslog日志服务

[root@oldboy ~]# echo "local2.debug /var/log/sudo.log" >>/etc/rsyslog.conf

 

//重启rsyslog服务

[root@oldboy ~]# systemctl restart rsyslog

普通用户使用sudo权限验证日志记录

//使用普通执行sudo命令

[oldboy@oldboy ~]$ rm -rf /root/test/

rm: 无法删除"/root/test": 权限不够

[oldboy@oldboy ~]$ sudo rm -rf /root/test/

 

//检查用户在什么时间执行过什么操作

[oldboy@oldboy ~]$ tail /var/log/sudo.log

Nov 7 07:56:58 : oldboy : TTY=pts/1 ; PWD=/home/oldboy ; USER=root ;

COMMAND=/bin/rm -rf /root/test/

17874

 

  1. 日志审计

[root@oldboy ~]$ sudo tail -f /var/log/secure

系统安装后就有sudo命令,如果没有sudo命令,可通过如下方式安装

[root@oldboy ~]# yum install -y sudo

使用visudo命令编辑/etc/sudoers配置文件

//执行visudo,等于使用vi编辑sudoers配置文件

[root@oldboy ~]# visudo

默认

root ALL=(ALL) ALL

 

//新增

oldboy ALL=(ALL) /bin/rm, /bin/cp

//root默认就拥有sudo最高权限,我们在该行下新增oldboy用户,让此用户拥有sudo权限

//使用visudo -c检查配置文件

[root@oldboy ~]# visudo -c

/etc/sudoers: parsed OK

 

Linux组和提权的更多相关文章

  1. LINUX渗透与提权总结

    本文为Linux渗透与提权技巧总结篇,旨在收集各种Linux渗透技巧与提权版本,方便各位同学在日后的渗透测试中能够事半功倍. Linux 系统下的一些常见路径: 001 /etc/passwd 002 ...

  2. Linux本地内核提权漏洞复现(CVE-2019-13272)

    Linux本地内核提权漏洞复现(CVE-2019-13272) 一.漏洞描述 当调用PTRACE_TRACEME时,ptrace_link函数将获得对父进程凭据的RCU引用,然后将该指针指向get_c ...

  3. Enumy:一款功能强大的Linux后渗透提权枚举工具

    Enumy是一款功能强大的Linux后渗透提权枚举工具,该工具是一个速度非常快的可移植可执行文件,广大研究人员可以在针对Linux设备的渗透测试以及CTF的后渗透阶段利用该工具实现权限提升,而Enum ...

  4. linux一句话轻松提权

    linux命令:‍ [b@fuckks~]$ printf "install uprobes /bin/sh" > exploit.conf; MODPROBE_OPTI** ...

  5. Linux下漏洞提权

    Linux下的漏洞提权 linux下一般都是系统漏洞提权,分为以下几个步骤:

  6. adore-ng笔记和Linux普通用户提权

    官网:https://github.com/trimpsyw/adore-ng 安装: [root@xuegod63 ~]# unzipadore-ng-master.zip [root@xuegod ...

  7. LINUX下渗透提权之嗅探技术

    内网渗透在攻击层面,其实更趋向于社工和常规漏洞检测的结合,为了了解网内防护措施的设置是通过一步步的刺探和经验积累,有时判断出错,也能进入误 区.但是如果能在网内进行嗅探,则能事半功倍,处于一个对网内设 ...

  8. kali linux之本地提权

    已实现本地低权限帐号登录,希望获取更高权限,实现对目标进一步控制 系统帐号之间权限隔离(操作系统安全的基础,用户空间,内核空间) 系统帐号(用户帐号登录时获取权限令牌,服务帐号无需用户登录已在后台启动 ...

  9. Linux sudo用户提权与日志审计

    一.格式说明及常用配置选项 格式: 用户或组 主机=授权可以使用哪个用户的权限 可以执行的命令 User_Alias 用户定义别名(别名可以是用户,用户组(用户组前面要加%))例:User_Alias ...

随机推荐

  1. 多线程 线程间通信 wait,notify

    1. 方法wait锁释放,notify()锁不释放

  2. 两边是线 ,中间是文字 的CSS写法 而且还是自适应的

  3. Milking Grid POJ - 2185 || 最小覆盖子串

    Milking Grid POJ - 2185 最小覆盖子串: 最小覆盖子串(串尾多一小段时,用前缀覆盖)长度为n-next[n](n-pre[n]),n为串长. 当n%(n-next[n])==0时 ...

  4. oozie.log报提示:org.apache.oozie.service.ServiceException: E0104错误 An Admin needs to install the sharelib with oozie-setup.sh and issue the 'oozie admin' CLI command to update sharelib

    不多说,直接上干货! 问题详情 关于怎么启动oozie,我这里不多赘述. Oozie的详细启动步骤(CDH版本的3节点集群) 然后,我在查看 [hadoop@bigdatamaster logs]$ ...

  5. 动手实现 React-redux(二):结合 context 和 store

    既然要把 store 和 context 结合起来,我们就先构建 store.在 src/index.js 加入之前创建的 createStore 函数,并且构建一个 themeReducer 来生成 ...

  6. Java基础50题test4—分解质因数

    [分解质因数] 题目:将一个正整数分解质因数.例如:输入 90,打印出 90=2*3*3*5. 程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成: (1)如果这个质数恰 ...

  7. 【学习笔记】深入理解js原型和闭包(17)——补this

    本文对<深入理解js原型和闭包(10)——this>一篇进行补充,原文链接:https://www.cnblogs.com/lauzhishuai/p/10078307.html 原文中, ...

  8. mysql5.7.25集群部署和方案设计(附PXC一键部署脚本)

    还记得我们之前部署mysql集群有多麻烦嘛?波哥来救你们啦!~ 我已将项目上传到了我的github仓库中,大家可以点击仓库地址出现的连接登录查看相应的代码!如果觉得不错别忘了转发.点赞哦! 部署步骤: ...

  9. 【转载】Hierarchal Temporal Memory (HTM)

    最近在看机器学习,看能否根据已有的历史来预测Hardware的故障发生概率.下文是一篇很有意思的文章,转自 http://numenta.org/htm.html. NuPIC是一个开源项目,用来实现 ...

  10. Dockerfile 中的 CMD和ENTRYPOINT 两兄弟

    CMD 先说老大 CMD 当一个容器准备好运行之后,需要找一个指定命令来创建一个初始进程并运行. 一,/bin/sh -c 因为某种意义上一个Dockerfile其实可以理解是一个简化版bash 脚本 ...