首页 > 其他分享 >用户管理

用户管理

时间:2022-10-08 19:15:09浏览次数:51  
标签:管理 passwd 用户 echo etc root localhost

目录

# awk 基础语法
awk:一般来说,取出想要的字符串(主要过滤列)
默认以空格为分隔符,在awk中双引号,代表不识别变量
$1-$N 都是取第几列
$0 取出文件中的所有内容
$NF 文件的最后一列
# 选项
-F:指定分隔符
awk -F '[xx]' NP=n'{print $n}'

# sed 命令取行
sed -n 'NP'
N是阿拉伯数字


# seq 序列命令
-w:补全位数,用0来补

用户管理

创建用户流程

跟用户创建相关的文件

/etc/login.defs

[root@localhost ~]# grep -i '^[a-z]' /etc/login.defs 
# 指定创建用户时,默认邮件文件位置
MAIL_DIR	/var/spool/mail
# 创建用户默认密码最大使用天数
PASS_MAX_DAYS	99999
# 创建用户默认密码最小使用天数(0代表无限)
PASS_MIN_DAYS	0
# 密码最短位数
PASS_MIN_LEN	5
# 密码过期警告
PASS_WARN_AGE	7
# 普通用户,最小uid是1000
UID_MIN                  1000
# 普通用户,最大uid是60000
UID_MAX                 60000
# 系统用户,最小uid是201
SYS_UID_MIN               201
# 系统用户,最大uid是999
SYS_UID_MAX               999
# 普通用户,最小gid是1000
GID_MIN                  1000
# 普通用户,最大gid是60000
GID_MAX                 60000
# 系统用户,最小gid是201
SYS_GID_MIN               201
# 系统用户,最大gid是999
SYS_GID_MAX               999
# 默认创建用户的家目录
CREATE_HOME	yes
# UMASK  077  指定用户创建家目录的默认权限
UMASK           077
# 创建用户时,如果不用-g指定组,那么会默认创建出该用户的同名组
USERGROUPS_ENAB yes
# 用户密码的加密方式 SHA512
ENCRYPT_METHOD SHA512


# 权限了解
r:读           4
w:写           2
x:执行         1
-:没有权限      0

目录创建默认权限:0777 - umask
文件创建默认权限:0666 - umask


如果当前用户UID大于199 并且用户的用户名和用户的组名相同                   那么
if [ $UID-gt199 ] && [ "`/usr/bin/id -gn`"="`/usr/bin/id -un`" ]; then
   umask是002    
   umask 002
否则
else
   umask是022    
   umask 022

/etc/default/useradd

[root@localhost ~]# cat /etc/default/useradd
# 如果login.defs文件中的USERGROUPS_ENAB yes是no,该行配置才会生效
# useradd defaults file
# 如果创建用户不创建同名组,默认会将该用户加入GID为100的系统组中(users)
GROUP=100
# 指定用户默认创建家目录的位置
HOME=/home
# 用户账户停权 -1永远不过期
INACTIVE=-1
# 账号终止时间的设置,不设置不终止
EXPIRE=
# 用户默认创建登录shel
SHELL=/bin/bash
# 该目录下存放的是,用户的环境变量初始配置文件
SKEL=/etc/skel
# 创建用户的同时,创建该用户的邮箱文件
CREATE_MAIL_SPOOL=yes


# 用户创建的流程:
1.执行useradd 命令+用户名
2.查看执行命令是否有选项
3.读取/etc/login.defs文件
4.读取/etc/default/useradd文件
5.如果没有-M则创建家目录
6.根据配置文件中的SKEL=/etc/skel 将skel下面的环境变量文件拷贝到家目录下
7.用户信息记录到/etc/passwd文件中
8.用户密码信息记录到/etc/shadow文件中
9.用户组信息记录到/etc/group文件中
10.用户组密码信息记录到/etc/gshadow文件中

用户的密码管理-passwd

passwd:给用户设置密码

# 语法
passwd [用户名]
注意:如果不加用户名,则修改当前登录用户的密码,只有root用户能在passwd命令后加用户名

# 修改其他用户密码
[root@localhost ~]# passwd lza
# 修改lza用户的密码
Changing password for user lza.
# 新密码
New password:
BAD PASSWORD: The password is a palindrome
# 重复新密码
Retype new password:
# 所有认证令牌更新成功
passwd: all authentication tokens updated successfully.

# 免交互方式
stdin:标准输入
stdout:标准输出
stderr:错误输出

[root@localhost ~]# echo '1'|passwd --stdin lza
Changing password for user lza.
passwd: all authentication tokens updated successfully.

随机密码生成

tee:管道命令
-a:append 追加

[root@localhost ~]# echo $RANDOM|tee -a /tmp/pass.txt |passwd --stdin lza

用户组管理及用户提权

用户组管理

# 相关文件
/etc/group
[root@localhost ~]# cat /etc/group
root:x:0:
# 1.组名字
# 2.组密码占位符
# 3.GID
# 4.显示该组的附加组成员

/etc/gshadow
[root@localhost ~]# cat /etc/gshadow
lza:!::
# 1.组名字
# 2.组密码(空和!是没有密码)
# 3.组管理员
# 4.显示该组的附加成员


# 相关命令
#增
groupadd [选项]... 组名

#选项
-g:指定组的gid
-r:指定gid范围201-999之间的系统组

# -g 
[root@localhost ~]# groupadd test200 -g 10086 
[root@localhost ~]# tail -1 /etc/group 
test200:x:10086: 

# -r 
[root@localhost ~]# groupadd test300 -r 
[root@localhost ~]# tail -1 /etc/group 
test300:x:995:

#删
groupdel 组名

#改
groupmod
-g:修改组的gid
-n:修改组的名字

# 例:
[root@localhost ~]# groupmod -g 10010 test200 
[root@localhost ~]# tail -2 /etc/group 
test200:x:10010: 
test300:x:995: 

[root@localhost ~]# groupmod -n test400 test300 
[root@localhost ~]# tail -2 /etc/group 
test200:x:10010: 
test400:x:995: 

[root@localhost ~]# groupmod test400 -n test666 
[root@localhost ~]# tail -2 /etc/group 
test200:x:10010:
test666:x:995:

# 查
[root@localhost ~]# cat /etc/group

用户身份切换

Linux系统中,有时候普通用户有些事情是没办法操作,除非是root管理员用户才能做到。这时就需要临时切换到root管理员身份。

如何在普通用户的情况下,完成日常工作?

  • 1)su - username 切换用户,使用普通用户登录,然后使用su命令切换到root。

优点:简单,方便

缺点:需要知道root密码,不安全,切换到root没有日志审计功能

su -xxx -c :不切换用户,以该用户身份执行命令

su - :直接切换到root用户
  • 2)sudo 提权,当需要使用root权限时,进行提权,而无需切换至root用户。

优点:安全,方便

缺点:复杂

su命令前戏

shell的种类

  • 交互式shell
  • 非交互式shell
  • 登录shell
    • 需要输入用户名,才可以登录
  • 非登录shell
    • 不需要输入用户名和密码,就可以登录

注意:用户在登录时,两种shell加载的环境变量不同

系统的环境变量文件

# 局部环境变量 
~/.bashrc 
~/.bash_profile 

# 全局环境变量 
/etc/profile 
/etc/profile.d/*.sh 
/etc/bashrc 


# 查看加载顺序
[Thu Apr 07 - zls root@localhost ~]$ vim ~/.bashrc 
[Thu Apr 07 - zls root@localhost ~]$ vim ~/.bash_profile 
[Thu Apr 07 - zls root@localhost ~]$ vim /etc/profile 
[Thu Apr 07 - zls root@localhost ~]$ vim /etc/profile.d/zls.sh 
[Thu Apr 07 - zls root@localhost ~]$ vim /etc/bashrc 
# 顺序
/etc/profile 
/etc/profile.d/*.sh 
~/.bash_profile 
~/.bashrc 
/etc/bashrc

# 非登录式shell不加载的环境变量
/etc/profile
~/.bash_profile

用户身份提权

sudo命令提权

  • 什么是sudo
    • sudo就是普通用户可以提权,执行root用户可以执行的命令
  • 为什么要用到sudo
    • 如果在公司中,入职后,领导给运维的用户为普通用户,但是有些命令只能root执行
  • sudo如何使用
# 系统的超级管理员(root)需要做sudo的配置(发一个兵符给指定的普通用户)
# 普通用户只需在,执行命令之前,加上sudo即可

sudo的配置(root发兵符的过程)

# 没有sudo命令,则需要安装
[root@localhost ~]# yum install -y sudo 

# sudo的配置文件
[root@localhost ~]# vim /etc/sudoers
# 用户名    所有主机=(所有角色)    所有命令的执行权限 
root       ALL=(ALL)           ALL 
lza        ALL=(ALL)           ALL
# 普通用户也不需要输入自己的密码了 
lza        ALL=(ALL)          NOPASSWD:ALL


# 推荐修改sudo的方式
[root@localhost ~]# visudo
-c:检查sudoers文件的语法

# [root@localhost ~]# visudo -c
/etc/sudoers: parsed OK

# 修改在第100行
 100 root    ALL=(ALL)   ALL
 101 


# 免密切换到root用户,就算不免密,也是输入lza用户的密码,切换到root用户 
[lza@localhost ~]$ sudo su -


# 报错 
[root@localhost ~]# sudo ll 
sudo: ll: command not found
原因:ll是别名,不是系统命令,sudo不走别名,只认识系统命令 


# 普通用户以root身份执行命令
[root@localhost ~]# visudo 
[root@localhost ~]# su - lza
Last login: Sun Apr 10 10:12:44 CST 2022 on pts/0
[lza@localhost ~]$ mkdir /root/lza
mkdir: cannot create directory ‘/root/lza’: Permission denied
[lza@localhost ~]$ ll /root/lza 
ls: cannot access /root/lza: Permission denied
[lza@localhost ~]$ sudo mkdir /root/lza
[sudo] password for lza: 
# ll是别名,不是系统命令。
[lza@localhost ~]$ sudo ll /root/lza
sudo: ll: command not found
[lza@localhost ~]$ sudo ls -l /root/lza
total 0


# sudoers其他别名设置
Host_Alias FILESERVERS = localhost, web01 
Cmnd_Alias ZLSCMD = /bin/cp,/bin/mv
Cmnd_Alias ZLSUNCMD =!/bin/rm,!/bin/su 
# lza  ALL=(ALL)  !/bin/ls
表示lza用户除了"ls"这个命令不能用,其它命令都能用

Cmnd_Alias:命令别名 
Host_Alias:主机别名 
User_Alias:角色别名




# 给组发兵符
%whell ALL=(ALL) NOPASSWD:ALL

# 提权不用修改visudo,只需要加入提权组,即可
usermod 用户名 -G 提权组

注意:除非企业中有要求,哪些命令需要用,哪些不能使用

练习题

1.创建一个用户oldboy996并设置uid为615

[root@localhost ~]# useradd oldboy996 -u 615
[root@localhost ~]# id oldboy996
uid=615(oldboy996) gid=1001(oldboy996) groups=1001(oldboy996)

2.创建一个mysql用户禁止登录并且不创建家目录

[root@localhost ~]# useradd mysql -M -s /sbin/nologin
mysql:x:1001:1002::/home/mysql:/sbin/nologin

3.Linux系统中切换用户的命令为?

su - 用户名

4.如何将/data/logs目录的权限赋给web用户和users组


5.创建admins组

[root@localhost ~]# groupadd admins

6.创建用户wow ,使用admins作为附加组

[root@localhost ~]# useradd wow -G admins
[root@localhost ~]# id wow
uid=1001(wow) gid=1003(wow) groups=1003(wow),1002(admins)

7.创建用户niuwa,不可交互登录系统

[root@localhost ~]# useradd niuwa -s /sbin/nologin

8.wow,niuwa的密码都是centos7

[root@localhost ~]# echo centos7 |awk '{print "echo"$1"|passwd --stdin wow&&echo"$1"|passwd --stdin niuwa"}'

9.创建用户user100,将该用户添加到group123组中

[root@localhost ~]# useradd user100 -g group123

10.修改用户usre100 用户名为user1000

[root@localhost ~]# usermod user100 -l user1000

11.如何删除用户oldboy?说说删除用户的-r参数什么意思?

[root@localhost ~]# userdel -r oldboy
-r:递归删除,删除该用户的相关文件

12.系统上有oldboy与oldgirl两个账号,如何把oldboy从原来oldboy用户组变为oldgirl用户组,将普通用户test加入root组的命令是?

[root@localhost ~]# usermod oldboy -g oldgirl

[root@localhost ~]# usermod test -g root

13.如何提权

[root@localhost ~]# visudo
root    ALL=(ALL)       ALL
lza     ALL=(ALL)       ALL

14.作为一个Linux系统管理员,你希望在每一个新用户的目录下放一个文件 .bashrc,那么你应该在哪个目录下放置这个文件,以便于新用户创建主目录时自动将这个文件复制到自己的目录下( A )

A./etc/skel/  用来存放新用户配置文件的目录
B./etc/default/
C./etc/defaults/
D./etc/profile.d/  应用程序的启动脚本

15.关于Linux的用户账号,下面说法正确的( C )

A.用户的密码,是以密文形式存储在/etc/passwd 文件中的
B.用户的密码,是以密文形式存储在/etc/passwd文件中的
C.用户的密码,是以密文形式存储在/etc/shadow文件中的
D.用户登录的时候,会把用户的密码明文与保存的密码做对比

16.普通用户的ID一般是( C )

A.>100
B.>500
C>>1000
D.>0

17.Linux的非root用户,在自己的目录中,不可以删除非空目录dirs的方法是( ACD )

A.rm dir dirs
B.rm -r dirs
C.mv dirs /dev/null
D.destroy dirs

18.改变文件所有者的命令为( C )

A.chmod
B.touch
C.chown
D.cat

19.关于建立系统用户的正确描述是( A )

A.在Linux系统下建立用户使用adduser命令
B.每个系统用户分别在/etc/password和/etc/shadow文件中有一条记录
C.访问每个用户的工作目录使用命令“cd /home/用户名”
D.每个系统用户在默认状态下的工作目录在/home/用户名
E.每个系统用户在/etc/fstab文件中有一条记录

20.创建三个用户,分别是zls,oldboy,yourname这些用户都属于oldboyedu组的成员。这些用户的密码都是123

[root@localhost ~]# seq -w 1|awk '{print "useradd zls -g oldboyedu&&echo 123|passwd --stdin zls;useradd oldboy -g oldboyedu&&echo 123|passwd --stdin oldboy;useradd yourname -g oldboyedu&&echo123|passwd --stdin yourname"}'|bash

思考一下问题

1.普通用户是否可以修改密码?

可以,修改自己的密码。

2.修改密码,密码相关的文件是什么?

3.密码相关文件的权限是什么?

4.普通用户没有权限操作/etc/shadow文件,为什么还可以修改密码?

作业-创100个用户

# 需求:
1.批量创建100个用户
2.然后给这100个用户随机密码
3.将100个用户的密码保存到文件中

例如:创建100用户 zls001-zls100
用户名:密码
cat   /tmp/pass.txt
zls001:71297391
zls002:1892319283
zls003:1823728


[root@localhost ~]# seq -w 100|awk '{print "useradd lzan&&echo $RANDOM|tee -a /tmp/pass.txt|passwd --stdint"$1}'|bash


# awk取列内容 "和cut差不多"
awk'{print $第几列}'
awk'{print "拼接字符串"$第几列"拼接的字符串"}'
[root@localhost ~]# seq 10|awk '{print $1,$1,$1"    "$1}'

# seq 生成序列
-w:位数补全

# 变量的设置及调用
[root@localhost ~]# name=zls
[root@localhost ~]# echo $namezls

----用不上---
## tee


# 1.
[root@localhost ~]# useradd zls001
[root@localhost ~]# echo 123|passwd --stdin zls001
Changing password for user zls001.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# echo zls001:123 >> /tmp/pass.txt

# 2.
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt
useradd zls001 && echo123|passwd --stdin zls001 && echo zls001:123 >> /tmp/pass.txt

# 3.
awk取出数字
[root@localhost ~]# seq -w 5|awk '{print $1}'
1
2
3
4
5

# 4.
把命令当成字符串,放入awk中
[root@localhost ~]# seq -w 5|awk '{print "useradd zls001;echo 123|passwd --stdinzls001;echo zls001:123 >> /tmp/pass.txt"}'
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt

# 5.用$1替换001部分(写死的部分)
[root@localhost ~]# seq -w 5|awk '{print "useradd zls$1;echo 123|passwd --stdinzls$1;echo zls$1:123 >> /tmp/pass.txt"}'
useradd zls$1;echo 123|passwd --stdin zls$1;echo zls$1:123 >> /tmp/pass.txt
useradd zls$1;echo 123|passwd --stdin zls$1;echo zls$1:123 >> /tmp/pass.txt
useradd zls$1;echo 123|passwd --stdin zls$1;echo zls$1:123 >> /tmp/pass.txt
useradd zls$1;echo 123|passwd --stdin zls$1;echo zls$1:123 >> /tmp/pass.txt
useradd zls$1;echo 123|passwd --stdin zls$1;echo zls$1:123 >> /tmp/pass.txt

# 6.
把$1放在双引号的外面
[root@localhost ~]# seq -w 5|awk '{print "useradd zls"$1";echo 123|passwd --stdinzls"$1";echo zls"$1":123 >> /tmp/pass.txt"}'
useradd zls1;echo 123|passwd --stdin zls1;echo zls1:123 >> /tmp/pass.txt
useradd zls2;echo 123|passwd --stdin zls2;echo zls2:123 >> /tmp/pass.txt
useradd zls3;echo 123|passwd --stdin zls3;echo zls3:123 >> /tmp/pass.txt
useradd zls4;echo 123|passwd --stdin zls4;echo zls4:123 >> /tmp/pass.txt

mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>/tmp/pass.txt

mima=`echo $RANDOM`

# 最终命令,塞到awk里
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>/tmp/pass.txt

[root@localhost ~]# seq -w 5|awk '{print "mima=`echo $RANDOM`;useradd zls5;echo$mima|passwd --stdin zls5;echo zls5:$mima >> /tmp/pass.txt"}'
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>/tmp/pass.txt
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>/tmp/pass.txt
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>/tmp/pass.txt
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>/tmp/pass.txt
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>/tmp/pass.txt

# 把$1放在双引号的外面
[root@localhost ~]# seq -w 5|awk '{print "mima=`echo $RANDOM`;useradd luowei"$1";echo$mima|passwd --stdin luowei"$1";echo luowei"$1":$mima >> /tmp/pass.txt"}'

# 拼接出来的命令交给bash处理
[root@localhost ~]# seq -w 5|awk '{print "mima=`echo $RANDOM`;useradd luowei"$1";echo$mima|passwd --stdin luowei"$1";echo luowei"$1":$mima >> /tmp/pass.txt"}'|bash

标签:管理,passwd,用户,echo,etc,root,localhost
From: https://www.cnblogs.com/LZA1218/p/16769912.html

相关文章

  • 用户操作命令
    目录用户管理linux中用户的概述用户的作用查看系统中用户的命令系统用户相关的配置文件用户分类(约定,规范centos7)chage命令修改用户信息用户操作命令用户创建-useradd修改用......
  • RPM包管理
    目录RPM包管理RPM包概述Linux中软件的安装方式RPM包获取途径rpm命令使用-安装rpm命令使用-查询rpm命令使用-升级rpm命令使用-卸载镜像站地址思维导图yum报错RPM包管理RPM......
  • yum管理工具
    目录yum管理工具yum概述配置yum源yum命令实践yum查询infoprovidesyum安装installyum重装reinstallyum更新check-updateyum卸载removeyum仓库指令repolistallyum缓......
  • 文件管理
    目录文件管理/目录下的文件/etc目录/var存放系统日志文件目录/dev系统设备文件目录路径的定位特殊目录文件管理重点:在linux中,一切皆文件。没有后缀区分。/目录下的文件......
  • IPMI智能平台管理接口
      智能平台管理接口(IPMI)是一种开放标准的硬件管理接口规格,定义了嵌入式管理子系统进行通信的特定方法。IPMI信息通过基板管理控制器(BMC)(位于IPMI规格的硬件组件......
  • 重装Intel核显后,设备管理器英特尔显卡属性这里报告了一个未启动设备(igfx)
    问题:卸载了Intel集显之后,重装,发现外接显示器无法被识别并显示页面在设备管理器里面,右键核显的属性,查看事件,显示“未启动设备(igfx)”解决方案:右键集显,点击“扫描硬件改动”......
  • Tita 360 评估:中层管理者能力测评问卷
    360评估指导语本次员工职业领导力素质测评由Tita360评估全程在线支持。Tita「360 评估」,申请试用请联系售前/售后顾问,或者直接在线预约演示本问卷通过对被评价者的......
  • 学籍管理系统可行性研究分析
    1、引言1.1编写目的通过对学生学籍管理系统项目进行一系列的详细调查研究,明确了该系统项目的实现在技术、经济和社会因素方面的可行性,阐述为了合理地达到项目目标的实现报......
  • 非root权限升级(修改当前用户)Linux gcc版本
    参考链接:非root权限升级(修改当前用户)Linuxgcc版本没有root权限,Linux离线升级gcc......
  • 仓储管理 | 新手如上架商品?
    进货,提货,仓库备货,一片混乱。想用纸和笔记录下来,发现工作量太大;用Excel代替,数据同步困难;想自己搭建一个系统,但是不会编程,没有经验…作为一个没有经验的新手,如何快速搭建一......