通过比对事先存储的,与登录提供的信息是否一致;
Linux中每个用户是通过UID来标识的。
让进程以用户的身份(权限)来获取资源
Linux中每个组是通过GID来标识的。
让守护进程组的身份(权限)来获取资源
私有组:组名同用户名,且只包含一个用户;
公有组:组内包含了多个用户;
Linux的安全上下文(context):进程以进程发起者的身份运行,能够访问资源的权限取决于进程运行者的身份;
name:password:UID:GID:GECOS:directory:shell
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
group_name:password:GID:user_list
group:encrypted password:administrators:members
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
新建用户的相关文件
批量创建用户
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
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
userdel - delete a user account and related files SYNOPSIS userdel [options] LOGIN -r --remove 删除用户时同时移除用户的家目录和邮件目录文件 -f --force 强制
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
即switch user
切换用户的方式:
SYNOPSIS su [options...] [-] [user [args...]] -c command, --command=command -l --login su -l USERNAME相当于 su - USERNAME
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
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
范例:
~]# 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
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
格式:
groupmod [OPTION]... group
常见选项:
-n group_name: 新名字
-g GID: 新的GID
格式:
groupdel [OPTIONS] GROUP
常见选项: -f, --force 强制删除,即使是用户的主组也强制删除组
设定组密码,可以有效防止其他未加入该组的用户使用该组的身份创建文件或目录;
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:
主组视为有效组,切换其他组时,如果其他组设定了密码,则需要输入密码才能完成切换。
格式:
newgrp [-] [group]
如果使用 - 选项,可以初始化用户环境
格式:
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
创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution" ;
创建下面的用户、组和组成员关系: 名字为webs 的组 用户nginx,使用webs 作为附加组 用户varnish,使用webs 作为附加组 用户mysql,不可交互登录系统,且不是webs 的成员,nginx,varnish,mysql密码都是magedu;
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目录下的文件或子目录的数量增多或减少了
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
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
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/
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