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

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)来运行我们的命令,在运行完毕之后返回命令执行的结果。

 

[escape@localhost ~]$ 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
    删除密码

实战演示:

 

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

2.11 临时切换基本组:newgrp

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

实战演示:

 

[root@localhost ~]# 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可以修改文件的属主和属组

实战演示:

 

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

 

[root@localhost ~# chmod a+s test.ppt                   #chmod g+s ,为某个文件设置替代组标识
[root@localhost ~# 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
[root@localhost ~]# chown escape:escape nginx.conf      
#将www目录,所属用户和组改为escape,escape  
[root@localhost ~]# chown -R escape:escape www            
[root@localhost ~]# chown root nginx.conf       #只改变用户
[root@localhost ~]# 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
    递归的改变目录和它的内容的组所有权

实战演示:

 

[root@localhost www]# chgrp escape  abc.txt       #改变用户组
[root@localhost 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 #
    设定

实战演示:

 

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

4. 思维导图

用户和组管理

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值