linux用户,组管理介绍
linux操作系统对多用户管理是非常繁琐的,所以用组的概念来管理用户就变得简单了,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户,Linux系统用户时根据用户ID来识别的,默认ID长度为32位,默认ID编号从0开始(其实就是root),但是为了和老式系统兼容,用户ID限制在60000以下,linux用户总共分为3种:
- root用户(ID 0)
- 系统用户(ID 1~999)
- 普通用户(ID 1000以上)
linux操作系统用户的特点如下:
- 每个用户拥有一个UserID,操作系统实际读取的是UID,而非用户名
- 每个用户属于一个主组,属于一个或者多个附属组,一个用户最多有31个附属组
- 每个组拥有一个组ID
- 每个进程以一个用户身份运行,该用户可对进程拥有资源控制的权限
- 每个可登陆用户拥有一个指定的shell环境
linux用户在操作系统中可以进行日常管理和维护,涉及的相关配置文件如下:
- /etc/passwd:保存用户信息
- /etc/shadow:保存用户密码(以加密形式保存)
- /etc/group:保存组信息
- /etc/login.defs:用户属性,密码过期时间,密码最大长度等限制
- /etc/default/useradd:显示或更改默认的useradd配置文件
linux系统中的每个文件或者文件夹都有一个所属用户及所属组,使用id命令可以显示当前用户的信息,使用passwd命令可以修改当前用户密码。
[root@localhost ~]# id lizhifeng uid=1000(lizhifeng) gid=1000(lizhifeng) 组=1000(lizhifeng)
linux用户管理
如果创建新用户,可以使用命令useradd,执行命令 useradd lizf 即可创建lizf用户,同时会创建一个同名的组lizf,默认该用户属于lizf组
执行useradd lizf会根据以下操作步骤进行:
- 在/etc/passwd文件中添加lizf用户信息
- 如使用passwd命令创建密码,密码会被保存在/etc/shadow中
- 为lizf创建一个家目录/home/lizf
- 将/etc/skel中的.bash开头的文件复制到/home/lizf家目录
- lizf组信息保存在/etc/group配置文件中
/etc/passwd文件介绍
[root@localhost ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin lizhifeng:x:1000:1000::/home/lizhifeng:/bin/bash mysql:x:997:995:MySQL server:/var/lib/mysql:/sbin/nologin zabbix:x:996:994:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin #/etc/passwd存放用户的信息,用冒号分隔,一共分为七个部分 第一列为用户名 第二例为用户的密码信息,x表示密码存放于/etc/shadow文件中 第三列为用户的UID 第四列为用户的GID 第五列为用户的描述,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。 第六列为用户的家目录 第七列为用户登陆的shell,nologin代表禁止登陆(伪用户) 伪用户解释:用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux系统要求只有那些在系统中登记了的程序才能出现在这个字段中。系统中有一类用户称为伪用户(psuedousers),这些用户在Linux /etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。常见的伪用户如下所示。 bin 拥有可执行的用户命令文件 sys 拥有系统文件 adm 拥有帐户文件 nobody NFS使用
在使用useradd命令时,可以添加如下参数:
-d:新账户的主目录 -e:新账户的过期日期 MM/DD/YY -g:新账户属组的名称或ID -r:创建一个系统账户 -s:新账户的登录shell -u:新账户的UID -G:新建账户的附加组 -c, --comment 注释
案例:
此外我们可以用chage命令去查看用户状态
[root@localhost ~]# chage -l lizhifeng 最近一次密码修改时间 :7月 12, 2021 密码过期时间 :从不 密码失效时间 :从不 帐户过期时间 :从不 两次改变密码之间相距的最小天数 :0 两次改变密码之间相距的最大天数 :99999 在密码过期之前警告的天数 :7
我们可以编辑/etc/login.defs进行修改 ,那么后建立的账户就会遵循这个配置进行创建
[root@localhost ~]# cat /etc/login.defs | egrep -v "^#|^$" MAIL_DIR /var/spool/mail PASS_MAX_DAYS 99999 #密码过期时间,99999代表永不过期 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 #密码最小长度 PASS_WARN_AGE 7 #在密码过期之前警告的天数 UID_MIN 1000 #普通用户uid从1000开始 UID_MAX 60000 #普通用户最大uid值 SYS_UID_MIN 201 #系统用户uid开始值 SYS_UID_MAX 999 #系统用户uid最大值 GID_MIN 1000 #普通用户gid从1000开始 GID_MAX 60000 #普通用户gid从1000开始 SYS_GID_MIN 201 #系统用户gid从201开始 SYS_GID_MAX 999 #系统用户gid最大值999 CREATE_HOME yes #自动在/home/创建家目录 UMASK 077 #家目录默认权限是700 USERGROUPS_ENAB yes #自动创建用户组 ENCRYPT_METHOD SHA512
如果用户已经被创建,我们想修改他的用户信息可以用
chage -I 5 USERNAME:密码5天后失效时间 chage -M 30 USERNAME:密码30天后过期 chage -W 3 USERNAME:在密码过期之前3天警告 chage -E 11/15/19 USERNAME:在19年11月15日账户过期 chage -l USERNAME:查看用户过期时间,密码过期时间等
linux组管理
linux组管理有如下特点
- 每个组有一个组ID
- 组信息保存在/etc/group中
- 每个用户至少拥有一个主组,最多可以拥有31个附属组
- 通过命令groupadd,groupdel,groupmod来对组进行管理
/etc/group文件解释:
[root@localhost ~]# head /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7: mem:x:8: kmem:x:9: 每一个冒号分隔一个内容 第一列表示组名 第二列表示组密码,x表示组密码放在/etc/shadow下 第三列表示组ID 第四列表示组成员
groupadd用法如下:
groupadd:创建一个group1的组
[root@localhost ~]# groupadd group1
-g :指定创建的组的ID
[root@localhost ~]# groupadd group2 -g 1500 #创建一个group2的组,并指定组ID为1500
-r:创建一个系统组
[root@localhost ~]# groupadd -r group3 #创建一个系统组group3 [root@localhost ~]# cat /etc/group | grep group group1:x:1001: group2:x:1500: group3:x:991:
groupmod用法如下:
-n :修改组名
[root@localhost ~]# groupmod -n group200 group1 #将group1组名改为group200
-g :修改组ID号
[root@localhost ~]# groupmod -g 4000 group2 #将group2组ID修改为4000 [root@localhost ~]# cat /etc/group | grep group group2:x:4000: group3:x:991: group200:x:1001:
groupdel 删除组
[root@localhost ~]# groupdel group200 #删除group200 [root@localhost ~]# cat /etc/group | grep group group2:x:4000: group3:x:991:
linux用户及组案例
useradd主要用于新建用户,而用户创建完毕,可以使用usermod来修改用户及组的属性。
usermod参数:
-c, --comment 注释 GECOS 字段的新值 -e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE -g, --gid GROUP 强制使用 GROUP 为新主组 -G, --groups GROUPS 新的附加组列表 GROUPS -L, --lock 锁定用户帐号 -s, --shell SHELL 该用户帐号的新登录 shell -u, --uid UID 用户帐号的新 UID -U, --unlock 解锁用户帐号
案例:
userdel
主要是用来删除用户的
userdel lizhifeng:保留用户的家目录 userdel -r lizhifeng:删除用户及用户家目录,如果用户登陆系统则无法删除 userdel -rf lizhifeng:强制删除用户及该目录的家目录,无论是否登录
用户密码的管理(最常见的运维操作)
/etc/shadow 详解
[root@localhost ~]# cat /etc/shadow root:$6$78f36qtpVNN.SM6n$Se8FiSLr3VL.QmPMOhvu9dFow1TRJnwlbzpCZDY9JmpFpG8AHlBmiXTuaCayNbE8tEu6U78QnpHAG406r4T2X0::0:99999:7::: bin:*:17834:0:99999:7::: daemon:*:17834:0:99999:7::: adm:*:17834:0:99999:7::: lp:*:17834:0:99999:7::: sync:*:17834:0:99999:7::: shutdown:*:17834:0:99999:7::: halt:*:17834:0:99999:7::: mail:*:17834:0:99999:7::: operator:*:17834:0:99999:7::: games:*:17834:0:99999:7::: ftp:*:17834:0:99999:7::: nobody:*:17834:0:99999:7:::
使⽤passwd命令控制⽤户的密码信息
-k, --keep-tokens 保持身份验证令牌不过期 -d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作) -l, --lock 锁定指名帐户的密码(仅限 root 用户) 等于usermod -l -u, --unlock 解锁指名账户的密码(仅限 root 用户),等于usermod -U -e, --expire 终止指名帐户的密码(仅限 root 用户) -f, --force 强制执行操作 -x, --maximum=DAYS 密码的最长有效时限(只有根用户才能进行此操作) -n, --minimum=DAYS 密码的最短有效时限(只有根用户才能进行此操作) -w, --warning=DAYS 在密码过期前多少天开始提醒用户(只有根用户才能进行此操作) -i, --inactive=DAYS 当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作) -S, --status 报告已命名帐号的密码状态(只有根用户才能进行此操作) --stdin 从标准输入读取令牌(只有根用户才能进行此操作)
修改用户密码的几种方式:
passwd + username
[root@localhost ~]# passwd lizhifeng 更改用户 lizhifeng 的密码 。 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。
echo “PASSWD” | passwd --stdin USERNAME
[root@localhost ~]# echo "12345678" | passwd --stdin lizhifeng 更改用户 lizhifeng 的密码 。 passwd:所有的身份验证令牌已经成功更新。
echo testuser:Newpasswd|chpasswd
[root@localhost ~]# echo root:12345|chpasswd
使用chage命令管理用户密码信息
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期” -E, --expiredate 过期日期 将帐户过期时间设为“过期日期” -h, --help 显示此帮助信息并推出 -I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态 -l, --list 显示帐户年龄信息 -m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数” -M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数” -R, --root CHROOT_DIR chroot 到的目录 -W, --warndays 警告天数 将过期警告天数设为“警告天数”
权限管理
linux权限是操作系统用来限制对方访问资源的机制,权限一般分为读,写,执行,系统中每一个文件都拥有特定的权限,所属用户和所属组,通过这样的机制来限制哪些用户或组可以对特定文件进行相应的操作
linux每个进程都是以某个用户身份运行,进程的权限与该用户的权限一样,用户的权限越大,则进程拥有的权限越大
权限 | 对文件的影响 | 对目录的影响 |
r(读)4 | 可读取文件内容 | 可列出目录内容 |
w(写)2 | 可修改文件内容 | 不能查看目录内容,不在目录中创建文件,不能cd到目录中 |
x(执行)1 | 可作为命令执行 | 可以进入到目录,但是不能查看也不能创建删除 |
[root@localhost ~]# ls -l /etc/ 总用量 1128 -rw-r--r--. 1 root root 16 1月 27 2021 adjtime -rw-r--r--. 1 root root 1518 6月 7 2013 aliases -rw-r--r--. 1 root root 12288 1月 27 2021 aliases.db drwxr-xr-x. 2 root root 280 2月 1 2021 alternatives -rw-------. 1 root root 541 4月 11 2018 anacrontab drwxr-xr-x. 3 root root 51 1月 29 2021 ansible -rw-r--r--. 1 root root 55 10月 30 2018 asound.conf drwxr-x---. 3 root root 43 2月 1 2021 audisp drwxr-x---. 3 root root 83 2月 1 2021 audit drwxr-xr-x. 2 root root 38 2月 1 2021 bash_completion.d -rw-r--r--. 1 root root 2853 10月 31 2018 bashrc drwxr-xr-x. 2 root root 6 10月 31 2018 binfmt.d -rw-r--r--. 1 root root 38 11月 23 2018 centos-release -rw-r--r--. 1 root root 51 11月 23 2018 centos-release-upstream drwxr-xr-x. 2 root root 6 8月 4 2017 chkconfig.d -rw-r--r--. 1 root root 1108 4月 13 2018 chrony.conf -rw-r-----. 1 root chrony 481 9月 15 2017 chrony.keys drwxr-xr-x. 2 root root 21 1月 27 2021 cron.d drwxr-xr-x. 2 root root 42 1月 27 2021 cron.daily -rw-------. 1 root root 0 4月 11 2018 cron.deny drwxr-xr-x. 2 root root 22 6月 10 2014 cron.hourly drwxr-xr-x. 2 root root 6 6月 10 2014 cron.monthly -rw-r--r--. 1 root root 451 6月 10 2014 crontab
如何针对一个文件修改权限
chmod命令
u代表用户user
g代表组group
o代表其他other
r代表4
w代表2
x代表1
当给一个用户赋予权限时可以用字母,也可以用数字来操作
[root@localhost ~]# touch check.sh [root@localhost ~]# ls -l check.sh -rw-r--r--. 1 root root 0 8月 11 22:14 check.sh [root@localhost ~]# chmod 777 check.sh [root@localhost ~]# ls -l check.sh -rwxrwxrwx. 1 root root 0 8月 11 22:14 check.sh
#给check.sh赋予所有人读写执行的权限
[root@localhost ~]# chmod u=rwx,g=rw,o=r check.sh
[root@localhost ~]# ls -l check.sh
-rwxrw-r--. 1 root root 0 8月 11 22:14 check.sh
#给check.sh赋予拥有者读写执行,所属组读写,其他人读的权限
chown命令
chown命令主要用于修改文件或目录所属主和所属组
[root@localhost ~]# ls -l check.sh -rwxrw-r--. 1 root root 0 8月 11 22:14 check.sh [root@localhost ~]# chown lizhifeng check.sh [root@localhost ~]# ls -l check.sh -rwxrw-r--. 1 lizhifeng root 0 8月 11 22:14 check.sh
#修改文件的属主为lizhifeng用户,也就输说lizhifeng这个用户对check.sh有rwx的权限,属于root组的用户对这个文件有rw的权限,其他用户对这个文件有r的权限
[root@localhost ~]# chgrp maint2 check.sh [root@localhost ~]# ls -l check.sh -rwxrw-r--. 1 lizhifeng maint2 0 8月 11 22:14 check.sh
#修改文件的数组为maint2,相对于上面来说,只有属于maint2这个组的用户才能对这个文件有rw权限
Linux的三种特殊权限
1. set UID
[lizf@BJ_Ansible_01 ~]$ ll /bin/passwd -rwsr-xr-x. 1 root root 27832 6月 10 2014 /bin/passwd
当文件的权限拥有者位置出现s或者是S的时候,说明该文件有特殊权限,被设置了set UID 当用普通用户执行的时候会临时赋予root的用户权限。
2. set GID
set GID特殊权限应用于目录文件,当一个目录设置set GID特殊权限时, 任何用户在该目录下创建文件时,文件的所属组都会变成被设置set GID的那个目录的所属组。
在文件的所属组的权限列的执行权限位置,如果该位置执行位置变为s或者时S时,表示该文件目录被设置了set GID的特殊权限。
chmod g+s FILE
3.Sticky(粘位置)
针对于有写权限的目录文件,当一个有写权限的目录文件被设置了sticky特殊权限时,那么任何人在该目录下创建的文件只有目录的所有者和root可以删除。该特殊权限位,限制了目录的写权限。
如果其他人的权限列执行位置被设置成t或T,表示改目录文件被设置了Sticky特殊权限。
系统缺省权限设置umask
[root@localhost ~]# umask 0022
一般来说umask只看后3位
创建目录的缺省权限是777
创建普通文件的权限是666
正常来说任何用户创建目录后,该目录的权限是rwxrwxrwx
任何用户创建普通文本文件,该文件的权限是rw-rw-rw-
普通文件如果带上执行权限,是不安全的. umask能帮助用户修改创建文件的默认权限。
创建目录的最终权限,就是目录777减去umask的后3位,root创建的目录权限应该是777-022=755
创建普通文件的最终权限,就是666减去umask的后3位,root创建的普通文件权限应该是666-022=644
普通用户创建的目录权限应该是777-002=775 普通用户创建的文件权限应该是666-002=664
umask可以修改的
[root@localhost ~]# umask 0027 [root@localhost ~]# umask 0027
不过这只是临时修改,想要永久修改就要写入配置文件login.defs