欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux运维之道(8)——用户和组管理

程序员文章站 2022-04-26 10:00:12
...

1. 用户和组管理

1.1 资源分派三元组

  • Authentication:认证
  • Authorization:授权
  • Accouting:审计

1.2 Linux用户-UID

管理员root, 0
普通用户:1-65535

  • 系统用户:1-499, 1-999
    对守护进程获取资源进行权限分配
  • 登录用户:500+, 1000+
    交互式登录

1.3 Linux组-GID

管理员组root, 0
普通组

  • 系统组:1-499, 1-999
  • 普通组:500+, 1000+

Linux组的类别:

  • 用户的基本组(主组):
    组名同用户名,且仅包含一个用户:私有组
  • 用户的附加组(额外组):
    通过后需添加获得

1.4 Linux安全上下文

进程所能够访问的所有资源的权限取决于进程的发起者的身份

  • 比如说,当我以escape这个用户使用ls命令时,首先系统会检测我这个用户是否是这个命令的所有者(rwx),如果不是判断是否为这个命令的所属组(r-x),如果都不是则会应用其他人(r-x)权限。但是,也有一些命令例外,具体什么呢?下一篇文章将会涉及,请多关注。
  • 其实在我们执行命令的时候,系统会重新启动一个bash(假设你使用的是bash)来运行我们的命令,在运行完毕之后返回命令执行的结果。

 

[aaa@qq.com ~]$ ll /usr/bin/ls
-rwxr-xr-x. 1 root root 117616 2月  16 23:49 /usr/bin/ls

1.5 Linux用户和组相关的配置文件

配置文件包含:
/etc/passwd:用户及其属性信息(名称、UID、基本组ID等等);
/etc/group:组及其属性信息;
/etc/shadow:用户密码及其相关属性;
/etc/gshadow:组密码及其相关属性;

/etc/passwd

  • name:password:UID:GID:GECOS:directory:shell
  • 用户名:密码:UID:GID:GECOS:主目录:默认shell

/etc/group

  • group_name:password:GID:user_list
  • 组名:组密码:GID:以当前组为附加组的用户列表(分隔符为逗号)

/etc/shadow

  • 用户名:加密了的密码:最近一次更改密码的日期:密码的最小使用期限:最大密码使用期限:密码警告时间段:密码禁用期:账户过期日期:保留字段

/etc/gshadow

  • 组名:口令:组管理者:组内用户列表

**密码的复杂性策略: **
1、使用数字、大写字母、小写字母及特殊字符中至少3种;
2、足够长;
3、使用随机密码;
4、定期更换;不要使用最近曾经使用过的密码;

2. 用户和组相关的管理类命令


2.1 用户创建:useradd

格式:useradd [options] LOGIN

参数选项:

  • -u UID
    [UID_MIN, UID_MAX], 定义在/etc/login.defs
  • -g GID
    指明用户所属基本组,可为组名,也可以GID
  • -c "COMMENT"
    用户的注释信息;
  • -d /PATH/TO/HOME_DIR
    以指定的路径为家目录
  • -s SHELL
    指明用户的默认shell程序,可用列表在/etc/shells文件中
  • -G GROUP1[,GROUP2,...[,GROUPN]]]
    为用户指明附加组;组必须事先存在
  • -r
    创建系统用户
    CentOS 6: ID<500
    CentOS 7: ID<1000

默认值设定/etc/default/useradd文件中


2.2 组创建:groupadd

格式:groupadd [OPTION]... group_name

参数选项:

  • -g GID
    指明GID号;[GID_MIN, GID_MAX]
  • -r
    创建系统组
    CentOS 6: ID<500
    CentOS 7: ID<1000

2.3 查看用户相关的ID信息:id

格式:id [OPTION]... [USER]

参数选项:

  • -u
    UID
  • -g
    GID
  • -G
    Groups
  • -n
    Name

2.4 切换用户或以其他用户身份执行命令:su

格式:su [options...] [-] [user [args...]]

切换用户的方式:
su UserName

  • 非登录式切换,即不会读取目标用户的配置文件;

su - UserName

  • 登录式切换,会读取目标用户的配置文件;完全切换;

换个身份执行命令:
su [-] UserName -c 'COMMAND'

参数选项:

  • -l
    su -l UserName相当于su - UserName

Note:root用户su至其他用户无须密码;非root用户切换时需要密码;


2.5 用户属性修改:usermod

格式:usermod [OPTION] login

参数选项:

  • -u UID
    新UID
  • -g GID
    新基本组
  • -G GROUP1[,GROUP2,...[,GROUPN]]]
    新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append
  • -s SHELL
    新的默认SHELL
  • -c 'COMMENT'
    新的注释信息
  • -d HOME
    新的家目录;原有家目录中的文件不会同时移动至新的家目录;若要移动,则同时使用-m选项
  • -l login_name
    新的名字
  • -L
    lock指定用户
  • -U
    unlock指定用户
  • -e YYYY-MM-DD
    指明用户账号过期日期
  • -f INACTIVE
    设定非活动期限

2.6 给用户添加密码:passwd

格式:passwd [OPTIONS] UserName

  • 修改指定用户的密码,仅root用户权限
  • passwd: 修改自己的密码;

参数选项:

  • -l
    锁定指定用户
  • -u
    解锁指定用户
  • -n mindays
    指定最短使用期限
  • -x maxdays
    最大使用期限
  • -w warndays
    提前多少天开始警告
  • -i inactivedays
    非活动期限
  • --stdin
    从标准输入接收用户密码
    echo "PASSWORD" | passwd --stdin USERNAME

Note: /dev/null and /dev/zero
/dev/null,它是空设备.看作黑洞,它非常等价于一个只写文件,所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到,然而/dev/null对命令行和脚本都非常的有用。
/dev/zero也是一个伪文件,但它实际上产生连续不断的null的流(二进制的零流,而不是 ASCII型的)。写入它的输出会丢失不见,而从/dev/zero读出一连串的null也比较困难,虽然这也能通过od或一个十六进制编辑器来做到。 /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件。


2.7 删除用户:userdel

格式:userdel [OPTION]... login

参数选项:

  • -r
    删除用户家目录

2.8 组属性修改:groupmod

格式:groupmod [OPTION]... group

  • -n group_name
    新名字
  • -g GID
    新的GID

Note:userdel不允许你移除正在线上的使用者帐 号


2.9 组删除:groupdel

格式:groupdel GROUP

Note: 如果有任何一个群组的使用者在线上的话就不能移除该群组,最好先移除使用者后再移除群组。


2.10 组密码:gpasswd

格式:gpasswd [OPTION] GROUP

参数选项:

  • -a user
    将user添加至指定组中
  • -d user
    删除用户user的以当前组为组名的附加组
  • -A user1,user2,...
    设置有管理权限的用户列表
  • -r
    删除密码

实战演示:

 

[aaa@qq.com ~]# gpasswd -A peter test2  #将peter设为test2组管理员
[aaa@qq.com ~]# gpasswd -a peter test2  #将用户peter加入到test2组
[aaa@qq.com ~]# gpasswd -d peter test2  #将用户peter从test2组中移出

2.11 临时切换基本组:newgrp

格式:newgrp [-] [group]
如果用户本不属于此组,则需要组密码

实战演示:

 

[aaa@qq.com ~]# newgrp www  #登录到www群组

2.12 修改用户属性:chage

格式:chage [OPTION]... LOGIN

参数选项:

  • -d LAST_DAY
  • -E, --expiredate EXPIRE_DATE
  • -I, --inactive INACTIVE
  • -m, --mindays MIN_DAYS
  • -M, --maxdays MAX_DAYS
  • -W, --warndays WARN_DAYS

其它命令:chfn, chsh, finger

3. 权限管理

文件的权限主要针对三类对象进行定义:

  • owner: 属主, u
  • group: 属组, g
  • other: 其他, o

每个文件针对每类访问者都定义了三种权限:

  • r: Readable
  • w: Writable
  • x: eXcutable

文件:

  • r: 可使用文件查看类工具获取其内容;
  • w: 可修改其内容;
  • x: 可以把此文件提请内核启动为一个进程;

目录:

  • r: 可以使用ls查看此目录中文件列表;
  • w: 可在此目录中创建文件,也可删除此目录中的文件;
  • x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录;

举例:

  • r-->4
  • w-->2
  • x-->1
    640: rw-r-----
    rwxr-xr-x: 755

3.1 修改文件权限:chmod

格式:

  • chmod [OPTION]... MODE[,MODE]... FILE...
  • chmod [OPTION]... OCTAL-MODE FILE...
  • chmod [OPTION]... --reference=RFILE FILE...

参数选项:

  • --reference=参考文件
    使用指定参考文件的模式,而非自行指定权限模式
  • -R
    以递归方式更改所有的文件及子目录
  • --help
    显示此帮助信息并退出
  • --version
    显示版本信息并退出

Note:每种 MODE 都应属于这类形式[ugoa] [-+=] [rwxXst] [ugo]

操作对像

  • u 文件属主权限
  • g 同组用户权限
  • o 其它用户权限
  • a 所有用户(包括以上三种)

权限设定

  • + 增加权限
  • - 取消权限
  • = 唯一设定权限

权限类别

  • r 读权限
  • w 写权限
  • x 执行权限
  • X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
  • s 文件属主和组id
  • l 给文件加锁,使其它用户无法访问

Note:仅root可以修改文件的属主和属组

实战演示:

 

[aaa@qq.com ~]# chmod ugo+r nginx_bak.conf        #所有人皆可读取
[aaa@qq.com ~]# chmod a+r nginx_bak.conf          #所有人皆可读取
[aaa@qq.com ~]# chmod ug+w,o-w nginx_bak.conf     #设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
[aaa@qq.com ~]# chmod u+x nginx_bak.conf          #创建者拥有执行权限 
[aaa@qq.com ~]# chmod -R a+r ./www/               #将www下的所有档案与子目录皆设为任何人可读取
[aaa@qq.com ~]# chmod a-x nginx_bak.conf          #收回所有用户的对nginx_bak.conf的执行权限
[aaa@qq.com ~]# chmod 777 nginx_bak.conf          #所有人可读,写,执行

 

[aaa@qq.com ~# chmod a+s test.ppt                   #chmod g+s ,为某个文件设置替代组标识
[aaa@qq.com ~# ls -al |grep test.ppt
-rwSr-Sr--.  1 tank tank    2320384 11月 18 19:29 test.ppt
# 第一个S指示用户替代标识(suid)已经被设置。
# 第二个S指示替代组标识(sgid)已经被设置。
# 这样,每一个运行该程序的用户将给予和程序拥有者同样有效的用户标识,和用户所属组同样有效的组标识。

3.2 修改文件的属主:chown

格式:chown [OPTION]... [OWNER][:[GROUP]] FILE...

参数选项:

  • --reference=参考文件
    使用参考文件的所属组,而非指定值
  • --help
    显示此帮助信息并退出
  • --version
    显示版本信息并退出
  • -R, --recursive 递归处理所有的文件及子目录
    以下选项是在指定了 -R 选项时被用于设置如何穿越目录结构体系。如果您指定了多于一个选项,那么只有最后一个会生效。
  • -H 如果命令行参数是一个通到目录的符号链接,则遍历符号链接
  • -L 遍历每一个遇到的通到目录的符号链接
  • -P 不遍历任何符号链接(默认)

实战演示:

 

#将nginx.conf所属用户和组改为escape,escape
[aaa@qq.com ~]# chown escape:escape nginx.conf      
#将www目录,所属用户和组改为escape,escape  
[aaa@qq.com ~]# chown -R escape:escape www            
[aaa@qq.com ~]# chown root nginx.conf       #只改变用户
[aaa@qq.com ~]# chown :escape 1.html        #只改变组

3.3 修改文件的属组:chgrp

格式:

  • chgrp [OPTION]... GROUP FILE...
  • chgrp [OPTION]... --reference=RFILE FILE...

参数选项:

  • -c, --changes
    详细描述对每一个文件的动作:实际上改变了哪个组
  • -f, --silent, --quiet
    不列出错误信息.(那些组不能被改变)
  • -h
    作用于符号链接本身代替它所指向的. 仅可用于 lchown 系统调用被提供时
  • -v, --verbose
    详细描述作用或没作用的所有文件
  • -R
    递归的改变目录和它的内容的组所有权

实战演示:

 

[aaa@qq.com www]# chgrp escape  abc.txt       #改变用户组
[aaa@qq.com www]# chgrp -R escape  myweb      #改变myweb目录,以及目录下的所有文件所属组

3.4 文件或目录创建时的遮罩码:umask

格式:umask [-p] [-S] [mode]

  • FILE: 666-umask
    Note: 如果某类的用户的权限减得的结果中存在x权限,则将其权限+1
  • DIR: 777-umask

参数选项:

  • -S
    以字符的形势显示当前的掩码
  • -p
    umask开头以数字的形势显示当前掩码

常用命令:

  • umask
    查看
  • umask #
    设定

实战演示:

 

[aaa@qq.com ~]# umask        #查看当前用户预设权限
0022
[aaa@qq.com ~]# umask -S     #以字母的形势显示权限
u=rwx,g=rx,o=rx
[aaa@qq.com ~]# umask -p     
umask 0022
[aaa@qq.com ~]# umask 755    #设置预设权限
[aaa@qq.com ~]# umask 
0755

4. 思维导图

Linux运维之道(8)——用户和组管理

用户和组管理

https://www.jianshu.com/p/fbf9307c2287