Java教程

用户及权限管理

本文主要是介绍用户及权限管理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

用户及权限管理

1. Linux的安全模型

1.1 资源分配

通过比对事先存储的,与登录提供的信息是否一致;

  • Authentication:认证,验证用户身份;
  • Authorization:授权,不同的用户设置不同的权限;
  • Accounting | Audition :审计;

1.2 加密算法

  1. 对称加密:加密的密钥和解密的密钥是一对;
  2. 公开密钥加密:用公钥加密,用私钥解密;
  3. 单向加密:只能加密,不能解密;提取数据特征码;
    1. 定长输出;
    2. 雪崩效应;
      1. 只要密码发生微小的改变,加密后的密文会完全不同;
  4. 算法:
    1. MD5:message digest,128bits
    2. sha:secure hash algorithm,168bits
    3. sha224
    4. sha256
    5. sha384
    6. sha512

1.3 用户

Linux中每个用户是通过UID来标识的。

让进程以用户的身份(权限)来获取资源

  • 管理员:root,0
  • 普通用户:1-60000自动分配
    • 系统用户:1-999(centos7以后)1-499(centos6以前)
    • 可登录用户:1000(centos7以后)500+(centos6以前)

1.4 用户组

Linux中每个组是通过GID来标识的。

让守护进程组的身份(权限)来获取资源

  • 管理员组:root,0
  • 普通组:1-60000自动分配
    • 系统组:1-999(centos7以后)1-499(centos6以前)
    • 登录用户组:1000(centos7以后)500+(centos6以前)

1.5 用户与组的关系

私有组:组名同用户名,且只包含一个用户;

公有组:组内包含了多个用户;

1.6 安全上下文

Linux的安全上下文(context):进程以进程发起者的身份运行,能够访问资源的权限取决于进程运行者的身份;

2. 用户和组的配置文件

2.1 用户和组的主要配置文件

  • /etc/passwd
  • /etc/shadow
  • /etc/group
  • /etc/gshadow

2.2 passwd文件格式

name:password:UID:GID:GECOS:directory:shell

2.3 shadow文件格式

login name:encrypted password:date of last password change:minimum password age:maxinum password age:password warning period:password inactivity period:account expiration date:reserve filed

2.4 group文件格式

group_name:password:GID:user_list

2.5 gshadow文件格式

group:encrypted password:administrators:members

2.7 关于文件操作命令

  • vipw和vigr
  • pwck和grpck

3. 用户和组的管理命令

3.31 useradd命令

useradd [options] LOGIN
useradd -D
useradd -D [options]

-d, --home-dir HOME_DIR 创建用户时改变指定的家目录
-c, --comment COMMENT 对用户说明
-D, --defaults 
-e, --expiredate EXPIRE_DATE
-f, --inactive INACTIVE
-g, --gid GROUP
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]
-M, --no-create-home
-r, --system 
范例:
注意:apache组,必须事先存在
~]# useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache

useradd命令默认值设定由/etc/default/useradd定义

~]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

显示或更改默认值

useradd -D
useradd -D -s SHELL
useradd -D -b BASE_DIR
useradd -D -g GROUP

新建用户的相关文件

  • /etc/default/useradd
  • /etc/skel/*
  • /etc/login.defs

批量创建用户

newusers - update and create new users in batch

例:
newusers /etc/passwd内容格式式的文件
	pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell

批量修改用户口令

chpasswd - update passwords in batch mode

the format:

       user_name:password
例:
echo username:passwd | chpasswd

3.2 usermod命令

usermod - modify a user account
SYNOPSIS
       usermod [options] LOGIN
-e, --expiredate EXPIRE_DATE format YYYY-MM-DD
-d, --home HOME_DIR 
	If the -m option is given, the contents of the current home directory will be
  moved to the new home directory
-f, --inactive INACTIVE /etc/shadow的第七列,设定非活动期限
-g, --gid GROUP
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]] 如果不加-a选项,原来的组将会被覆盖
-l, --login NEW_LOGIN 新的名字
-L, --lock
-m, --move-home 经常与-d一起组合使用
-u, --uid UID
-U, --unlock
-L, --lock

3.3 userdel命令

userdel - delete a user account and related files
SYNOPSIS
       userdel [options] LOGIN
-r --remove 删除用户时同时移除用户的家目录和邮件目录文件
-f --force 强制

3.4 查看用户的相关ID信息:id命令

id - print real and effective user and group IDs
SYNOPSIS
       id [OPTION]... [USER]
-g, --group 仅仅只显示有效组id号
-G, --groups  print all group IDs
-n, --name 打印名称,需配合ugG使用
-u, --user

3.5 su

即switch user

切换用户的方式:

  • su USERNAME:非登录式切换,不会读取目标用户的环境配置文件
  • su - USERNAME:登录式切换,读取目标用户的家目录,切换至家目录,完全切换
SYNOPSIS
       su [options...] [-] [user [args...]]
-c command, --command=command
-l --login su -l USERNAME相当于 su - USERNAME

3.6 设置密码

SYNOPSIS
       passwd [options] USERNAME
-e DATE, --expire 强制用户下次登录时修改密码
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-n DAYS mindays 密码最短使用期限
-x DAYS maxdays 最大使用期限
-w DAYS warndays 提前多少天开始警告
-i DAYS inactivedays 非活动期限
--stdin 从标准输入接收用户密码
例:
~]# echo "PASSWORD" | passwd --stdin USERNAME

3.7 修改用户密码策略:chage

chage - change user password expiry information
SYNOPSIS
       chage [options] LOGIN
-d, --lastday LAST_DAY format YYYY-MM-DD,对应/etc/shadow的第三栏,如果为0的话,强制用户下次登陆时修改密码
-m --mindays MIN_DAYS 
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-E, --expiredate EXPIRE_DATE 用户的有效期
-I, --inactive INACTIVE 密码过期后的宽限期
-l, --list 显示密码策略

范例:

~]# tail -1 /etc/shadow
student:$6$nLWqd9gU$HPlrRyBlLExIeCznM448X9ZFdaslHsKkm80KD0eBA6vTwTYgfRqSqcti4uO9PdWNzFxAoiaDOJ7xXC/cSyjre/:19183:0:99999:7:::
~]# chage -l student
Last password change					: Jul 10, 2022
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7
~]# chage -m 3 -M 42 -W 14 -I 7 -E 2020-10-10 student
~]# chage -l student
Last password change					: Jul 10, 2022
Password expires					: Aug 21, 2022
Password inactive					: Aug 28, 2022
Account expires						: Oct 10, 2020
Minimum number of days between password change		: 3
Maximum number of days between password change		: 42
Number of days of warning before password expires	: 14
~]# getent shadow student
student:$6$nLWqd9gU$HPlrRyBlLExIeCznM448X9ZFdaslHsKkm80KD0eBA6vTwTYgfRqSqcti4uO9PdWNzFxAoiaDOJ7xXC/cSyjre/:19183:3:42:14:7:18545:
~]# chage -d 0 student
~]# chage -l student
Last password change					: password must be changed
Password expires					: password must be changed
Password inactive					: password must be changed
Account expires						: Oct 10, 2020
Minimum number of days between password change		: 3
Maximum number of days between password change		: 42
Number of days of warning before password expires	: 14

3.8 用户相关其他命令

  • chsh 指定shell
  • chfn 指定个人信息
  • finger 可查看用户个人信息

范例:

~]# chfn student
Changing finger information for student.
Name []: zsl
Office []: szpt
Office Phone []: 1234XXX34
Home Phone []: 134579XXX

Finger information changed.
~]# finger student
Login: student        			Name: zsl
Directory: /home/student            	Shell: /bin/bash
Office: szpt, 1234XXX34			Home Phone: 134579XXX
Last login Sun Jul 10 20:20 (CST) on pts/1
No mail.
No Plan.
~]# getent passwd student
student:x:4003:4003:zsl,szpt,1234XXX34,134579XXX:/home/student:/bin/bash

3.9 有关于组的相关命令

3.9.1 groupadd

groupadd [OPTION]... group_name

常见选项:
-g GID 指明GID号;[GID_MIN, GID_MAX]
-r 创建系统组,CentOS 6之前: ID<500,CentOS 7以后: ID<1000

范例:

groupadd -g 48 -r apache

3.9.2 groupmod 修改组

格式:

groupmod [OPTION]... group

常见选项:
-n group_name: 新名字
-g GID: 新的GID

3.9.3 groupdel 删除组

格式:

groupdel [OPTIONS] GROUP

常见选项: -f, --force 强制删除,即使是用户的主组也强制删除组

3.9.4 gpasswd

设定组密码,可以有效防止其他未加入该组的用户使用该组的身份创建文件或目录;

gpasswd [OPTION] GROUP

常见选项:
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2,... 设置有管理权限的用户列表

范例:

~]# groupadd admins
[root@client ~]# gpasswd -a zhao admins
Adding user zhao to group admins
[root@client ~]# id zhao
uid=4004(zhao) gid=4004(zhao) groups=4004(zhao),5002(admins)
**注意:**groups - print the groups a user is in
~]# groups admins
groups: admins: no such user
[root@client ~]# groups zhao
zhao : zhao admins
~]# getent group admins
admins:x:5002:zhao
~]# gpasswd -d zhao admins
Removing user zhao from group admins
~]# groups zhao
zhao : zhao
[root@client ~]# id zhao
uid=4004(zhao) gid=4004(zhao) groups=4004(zhao)
~]# getent group admins
admins:x:5002:

3.9.5 临时切换主组:newgrp

主组视为有效组,切换其他组时,如果其他组设定了密码,则需要输入密码才能完成切换。

格式:

newgrp [-] [group]

如果使用 - 选项,可以初始化用户环境

3.9.6 更改和查看组成员:groupmems

格式:

groupmems [options] [action]

常见选项:
-g, --group groupname 更改为指定组 (只有root) actions:
-a, --add username 指定用户加入组
-d, --delete username 从组中删除用户
-p, --purge 从组中清除所有成员
-l, --list 显示组成员列

例:

~]# groupmems -l -g admins
~]# groupmems -a zhao -g admins
~]# groupmems -l -g admins
zhao 
~]# groupmems -d zhao -g admins
~]# groupmems -l -g admins

3.10 习题

创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution" ;
创建下面的用户、组和组成员关系: 名字为webs 的组 用户nginx,使用webs 作为附加组 用户varnish,使用webs 作为附加组 用户mysql,不可交互登录系统,且不是webs 的成员,nginx,varnish,mysql密码都是magedu;

4 权限管理

4.1 chmod命令

chmod - change file mode bits
SYNOPSIS
1.MODE表示:
	chmod [OPTION]... MODE[,MODE]... FILE...
			赋权表示法:直接操作一类用户的所有权限位
					u= ,g= ,o= ,a= ;
			授权表示法:	直接操作一类用户的一个权限位
					u+ ,u- ;
					g+ ,g- ;
					...
2.八进制表示法:
	chmod [OPTION]... OCTAL-MODE FILE...
			chmod 555 FILE(DIRCTORY)...
3.获取某文件或目录相同的权限:
	chmod [OPTION]... --reference=RFILE FILE...

--reference=RFILE
              use RFILE's mode instead of MODE values
**-R, --recursive**
              change files and directories recursiv

范例:

[root@client data]# ll dir
total 0
-rw-r--r--. 1 root root 0 Jul 10 21:57 f1.txt
-rw-r--r--. 1 root root 0 Jul 10 21:57 f2.txt
drwxr-xr-x. 2 root root 6 Jul 10 21:57 subdir
[root@client data]# ll -d dir
drwxr-xr-x. 3 root root 48 Jul 10 21:57 dir
[root@client data]# chmod -R  a+x dir
[root@client data]# ll -d dir
drwxr-xr-x. 3 root root 48 Jul 10 21:57 dir
[root@client data]# ll dir
total 0
-rwxr-xr-x. 1 root root 0 Jul 10 21:57 f1.txt
-rwxr-xr-x. 1 root root 0 Jul 10 21:57 f2.txt
drwxr-xr-x. 2 root root 6 Jul 10 21:57 subdir

面试题:

执行 cp /etc/issue /data/dir 所需要的最小权限?
/bin/cp 需要x权限
/etc/ 需要x权限 /etc目录数量没有变化,不需要w权限
/etc/issue 需要r 权限 复制文件,至少需要能够看到文件的内容
/data 需要x权限 要进到dir目录
/data/dir 需要w,x 权限 dir目录下的文件或子目录的数量增多或减少了

4.2 chown命令

chown - change file owner and group
SYNOPSIS
       chown [OPTION]... [OWNER][:[GROUP]] FILE...
       chown [OPTION]... --reference=RFILE FILE...
-R, --recursive
              operate on files and directories recursively

4.3 新建文件或目录的默认权限

umask:文件权限的反向掩码,遮罩码;

Display or set file mode mask.
umask 查看当前的umask
umask MASK:设置umask

范例:

umask 002
umask u=rw,g=r,o=

练习:

当用户docker对/testdir 目录无执行权限时,意味着无法做哪些操作?
不能复制、移动文件或目录至此目录下,不能cd进入此目录;
当用户mongodb对/testdir 目录无读权限时,意味着无法做哪些操作?
不能查看此目录下的内容;
当用户redis 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?
不可以;
当用户zabbix对/testdir 目录有写和执行权限时,该目录下的只读文件file1是否可修改和删除?
不可以修改,但可以删除;
复制/etc/fstab文件到/var/tmp下,设置文件所有者为tomcat读写权限,所属组为apps组有读写权限,其他人无权限
~]# cp /etc/fstab /var/tmp
~]# chown tomcat:apps /var/tmp/fstab
~]# chmod u=rw,g=rx,o= /var/tmp/fatab
误删除了用户git的家目录,请重建并恢复该用户家目录及相应的权限属性
~]# cp -r /etc/skel /home/
~]# mv /home/skel /home/git
~]# chown git:git /home/git ~]# chmod 700 /home/git

4.4 install命令

install - copy files and set attributes
SYNOPSIS
单源复制:
	install [OPTION]... [-T] SOURCE DEST
多源复制:  
	install [OPTION]... SOURCE... DIRECTORY
  install [OPTION]... -t DIRECTORY SOURCE...
创建目录:  
	install [OPTION]... -d DIRECTORY...

-m, --mode=MODE 创建目标文件的权限,默认为755;
-d, --directory 创建目录;
-o, --owner=OWNER 设定目标文件属主 ;
-g, --group=GROUP 设定目标文件属组;

范例:

~]# install /etc/inittab /root
~]# ls
all.txt          bc.log  EOF      mail2.txt  motd      stderr.log
anaconda-ks.cfg  df.log  **inittab**  mail.txt   root.log  stdout.log
~]# ls -l inittab 
**-rwxr-xr-x.** 1 root root 511 Jul 10 22:38 inittab
~]# ls -l /etc/inittab 
**-rw-r--r--.** 1 root root 511 Oct 13  2020 /etc/inittab
 ~]# rm inittab -f
~]# install **-m 640** /etc/inittab  /root
~]# ls -l inittab 
**-rw-r-----.** 1 root root 511 Jul 10 22:39 inittab
~]# ls
all.txt          bc.log  EOF      mail2.txt  motd      stderr.log
anaconda-ks.cfg  df.log  inittab  mail.txt   root.log  stdout.log
~]# install **-d** hello
~]# ls
all.txt          bc.log  EOF    inittab    mail.txt  root.log    stdout.log
anaconda-ks.cfg  df.log  hello  mail2.txt  motd      stderr.log
~]# ls -ld hello/
**d**rwxr-xr-x. 2 root root 6 Jul 10 22:40 hello/

4.5 mktemp命令

mktemp - create a temporary file or directory
SYNOPSIS
       mktemp [OPTION]... [TEMPLATE]
-d, --directory 创建临时目录
注意:mktemp会创建临时文件名直接返回,可直接通过命令引用保存起来;
如:
	~]# variable=$(mktemp /PATH/TO/SOMEFILEXXXX)

范例:

~]# mktemp /tmp/mytmp.XXXX
/tmp/mytmp.RAhC
~]# mktemp /tmp/mytmp.XXXXX
/tmp/mytmp.z8kjL
这篇关于用户及权限管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!