Linux账号和权限管理
一、用户和用户组
1.1 用户账号类型
超级管理员:最高权限拥有者;uid和gid都为0
普通用户:有一定权限的用户,但是权限受限制。一般是由具备系统管理员root的权限的运维人员添加。centos 7中,uid范围:1000+
程序用户:安装系统后默认就会存在,且默认情况不能登录系统。centos 7中,uid范围:1~999
uid和gid是唯一的
1.2 用户组介绍
- 基本组:在用户所属组中的第一个组称为基本组,基本组有且唯一
- 附加组:在用户所属组中,除了第一个组(基本组)以外的其他组就是附加组,附加组可有多个
二、用户账号管理
2.1 用户信息储存文件
2.1.1 /etc/passwd
保存用户名称、宿主目录、登录shell等基本信息。
[root@localhost /]# cat /etc/passwd //查看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:997:User for polkitd:/:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin qemu:x:107:107:qemu user:/:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin radvd:x:75:75:radvd user:/:/sbin/nologin chrony:x:994:990::/var/lib/chrony:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin sssd:x:992:987:User for sssd:/:/sbin/nologin gdm:x:42:42::/var/lib/gdm:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin xiongchen:x:1000:1000:xiongchen:/home/xiongchen:/bin/bash apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
每一行对应一个用户的账号记录
以(:)作为分隔符,将每行分为了7段。
以为例 root:x:0:0:root:/root:/bin/bash 解释每段的含义
- 用户账号的名称
- 用户密码占位符“x”
- 用户账号的uid
- 用户账号的gid
- 用户全名
- 家目录
- 登录shell信息
2.1.2 /etc/shadow
只有root可以读取内容,且不能直接编辑该文件的内容
[root@localhost /]# cat /etc/shadow root:$6$rKhTH45goXKegFc8$YEMJyhV2AurKqWkoL6RtCfGFu7dPUUdFNr1mcJjt.CB6dGKS11IgTpQt..KwMNlCjIfEt8b2USH/CMyEpHYO61::0:99999:7::: bin:*:17110:0:99999:7::: daemon:*:17110:0:99999:7::: adm:*:17110:0:99999:7::: lp:*:17110:0:99999:7::: sync:*:17110:0:99999:7::: shutdown:*:17110:0:99999:7::: halt:*:17110:0:99999:7::: mail:*:17110:0:99999:7::: operator:*:17110:0:99999:7::: games:*:17110:0:99999:7::: ftp:*:17110:0:99999:7::: nobody:*:17110:0:99999:7::: systemd-network:!!:19472:::::: dbus:!!:19472:::::: polkitd:!!:19472:::::: abrt:!!:19472:::::: libstoragemgmt:!!:19472:::::: rpc:!!:19472:0:99999:7::: colord:!!:19472:::::: saslauth:!!:19472:::::: setroubleshoot:!!:19472:::::: rtkit:!!:19472:::::: pulse:!!:19472:::::: qemu:!!:19472:::::: ntp:!!:19472:::::: radvd:!!:19472:::::: chrony:!!:19472:::::: tss:!!:19472:::::: usbmuxd:!!:19472:::::: geoclue:!!:19472:::::: sssd:!!:19472:::::: gdm:!!:19472:::::: rpcuser:!!:19472:::::: nfsnobody:!!:19472:::::: gnome-initial-setup:!!:19472:::::: avahi:!!:19472:::::: postfix:!!:19472:::::: sshd:!!:19472:::::: tcpdump:!!:19472:::::: xiongchen:$6$nDr1q0tYSK0CPpJJ$wTLDUCaD//DGN5Yb9V0nw4DtVnoIYCWdJL.r9n0gAb3HZe7aQrHT1ggbWPUCGSRss6eqKHMORofTIhk/S1O9B/::0:99999:7::: apache:!!:19476::::::
/etc/shadow文件也是以(:)作为分隔符,将每行分成了9段
每段含义:
用户账号名称
使用MD5加密的密码子串信息,为“*”或者“!!”时表示此用户不能登录到系统。若该字段为空,则该用户无需密码,可直接登录
上次修改密码的时间,表示从1970.1.1算起到最近一次修改密码间隔的天数
密码的最短有效天数,即两次修改密码之间所需的最小天数。若不设置,默认为0,表示不进行限制
- 密码有效期,若为99999,表示永久有效
- 提前多少天警告用户密码将过期,默认值为7,空字段或者 0 表示没有密码警告期
- 密码过期后多少天禁用此用户
- 账号失效时间
- 保留字段。此字段保留作将来使用。
2.2 添加用户账号
useradd [选项] 用户名 -u:指定用户uid -d:指定用户家目录 -g:指定用户gid,对应的组名必须已存在 -G:指定用户附加组,对应的组名必须已存在 -M:不建立用户家目录 -s:指定用户的登录shell -e:指定用户账号的失效时间,可使用YYYY-MM-DD的日期格式
举例:
[root@localhost /]# useradd yun //创建yun用户 [root@localhost /]# cat /etc/passwd | grep yun //查找/etc/passwd文件中有yun的行 yun:x:1001:1001::/home/yun:/bin/bash [root@localhost /]# cat /etc/shadow | grep yun //查找/etc/shadow文件中有yun的行 yun:!!:19482:0:99999:7:::
2.3 切换用户
su 用户名(不完全切换) su - 用户名(完全切换,最好用这个)
在管理员下使用su相当于刷新
在普通用户下su会切换到管理员
普通用户之间切换时,需要事先设置账户密码,否则切换用户失败
管理员切换到普通用户无需密码,直接切换
[root@localhost /]# useradd yun //创建yun用户 [root@localhost ~]# useradd ji //创建ji用户 [root@localhost ~]# su - yun //root用户切换到yun用户 上一次登录:五 5月 5 18:46:15 CST 2023pts/2 上 [yun@localhost ~]$ su - ji //yun用户切换到ji用户 密码: su: 鉴定故障
2.4 设置账户密码
passwd [选项] 用户名 -d:清空指定用户的密码,清空后可通过用户名直接登录,不用输入密码 -l:锁定用户账号,锁定后无法登录 -S(大写):查看用户状态(是否被锁定) -u:解锁用户账号
举例:
[root@localhost ~]# passwd yun //设置yun用户的密码 更改用户 yun 的密码 。 新的 密码: //设置的密码不显示 无效的密码: 密码少于 8 个字符 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# passwd -d yun //删除yun用户的密码 清除用户的密码 yun。 passwd: 操作成功 [root@localhost ~]# su - yun //此时切换用户无需输入密码 上一次登录:五 5月 5 18:58:57 CST 2023pts/2 上
[root@localhost ~]# passwd -l yun //锁定yun用户的密码 锁定用户 yun 的密码 。 passwd: 操作成功 [root@localhost ~]# su - ji //切换到ji用户 密码: 上一次登录:五 5月 5 18:58:50 CST 2023pts/2 上 [ji@localhost ~]$ su - yun //切换到yun用户 密码: su: 鉴定故障 //切换失败
[root@localhost ~]# passwd -S yun yun LK 2023-05-05 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -u yun //解锁yun用户的密码 解锁用户 yun 的密码。 passwd: 警告:未锁定的密码将是空的。 passwd: 不安全的操作(使用 -f 参数强制进行该操作) [root@localhost ~]# passwd -uf yun //yun用户的密码之前被删,需要强制执行 解锁用户 yun 的密码。 passwd: 操作成功 [root@localhost ~]# su - ji //切换到ji用户 上一次登录:五 5月 5 19:04:33 CST 2023pts/2 上 [ji@localhost ~]$ su - yun //切换到yun用户 上一次登录:五 5月 5 19:04:27 CST 2023pts/2 上 [yun@localhost ~]$ //切换成功
第二种设置密码的方法:
echo 密码 | passwd --stdin 用户名 [root@localhost ~]# echo 123 | passwd --stdin yun 更改用户 yun 的密码 。 passwd:所有的身份验证令牌已经成功更新。
2.5 修改用户账号信息
usermod [选项] 用户名 -u:修改uid(注意uid要未使用) -d:修改用户家目录 -e:修改用户的账户失效时间,可使用YYYY–MM-DD的日期格式 -g:修改用户的基本组名 -G:修改用户的附加组名 -s:指定用户的登录Shell -L: 锁定用户账户 -U:解锁用户账户
示例:
[root@localhost ~]# usermod -u 1200 yun //修改yun用户的uid [root@localhost ~]# cat /etc/passwd | grep yun //查看/etc/passwd中有yun的行 yun:x:1200:1001::/home/yun:/bin/bash
[root@localhost ~]# mkdir /opt/yun //在opt目录先创建yun目录 [root@localhost opt]# usermod -d /opt/yun yun //修改yun用户的家目录 [root@localhost opt]# cat /etc/passwd | grep yun //查找/etc/passwd文件中有yun的行 yun:x:1200:1001::/opt/yun:/bin/bash [root@localhost /]# su - yun 上一次登录:五 5月 5 19:14:28 CST 2023pts/2 上 -bash-4.2$ //无法登陆
[root@localhost /]# usermod -L yun //锁定yun用户账号 [root@localhost /]# su - ji 上一次登录:五 5月 5 22:44:36 CST 2023pts/2 上 [ji@localhost ~]$ su - yun 密码: su: 鉴定故障 //切换yun用户账号失败 [ji@localhost ~]$
[root@localhost ~]# usermod -U yun //解锁用户账号 [root@localhost ~]# su - ji 上一次登录:五 5月 5 22:45:40 CST 2023pts/2 上 [ji@localhost ~]$ su - yun 密码: 上一次登录:五 5月 5 22:44:30 CST 2023pts/2 上 最后一次失败的登录:五 5月 5 22:45:59 CST 2023pts/2 上 最有一次成功登录后有 1 次失败的登录尝试。 [yun@localhost ~]$ //切换成功
面试题:锁定用户的两种方式
passwd -l usermod -L
2.6 删除用户
userdel -r 用户名
示例:
[root@localhost ~]# userdel -r ji //删除用户ji [root@localhost ~]# tail -5 /etc/passwd //查看/etc/passwd文件的最后5行 postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin xiongchen:x:1000:1000:xiongchen:/home/xiongchen:/bin/bash yun:x:1001:1001::/home/yun:/bin/bash
2.7 用户账号的配置文件
2.7.1 修改配置文件后使其生效的方法
重启虚拟机
命令:source 更改的配置文件
2.7.2 主要的用户配置文件
- /etc/profile:系统的全局配置文件,对所有用户生效
- ~/.bash_profile:用户登录是被执行的脚本,对自己有效
- ~/.bashrc:是在每个新的bash shell打开时被执行的脚本
- ~/.bash_logout:是用户退出bash shell是被执行的脚本
2.7.3 配置文件的执行顺序
通常在登录系统时,系统会首先执行 /etc/profile 文件,然后 /.bash_profile 文件会被执行,
然后执行 /.bashrc 文件
而在退出bash shell时,~/.bash_logout 会被执行
三、组管理
3.1 组账号文件
/etc/group:保存组账号基本信息。
/etc/gshadow:保存组账号的密码信息。
3.2 添加组账号
groupadd [-g GID] 组账号名
示例:
[root@localhost ~]# groupadd test //创建组账号 [root@localhost ~]# tail -f /etc/group gnome-initial-setup:x:986: avahi:x:70: slocate:x:21: postdrop:x:90: postfix:x:89: sshd:x:74: tcpdump:x:72: xiongchen:x:1000:xiongchen yun:x:1001: test:x:1002: [root@localhost ~]# groupadd -g 78 test1 //创建指定GID的组账号 [root@localhost ~]# tail -f /etc/group avahi:x:70: slocate:x:21: postdrop:x:90: postfix:x:89: sshd:x:74: tcpdump:x:72: xiongchen:x:1000:xiongchen yun:x:1001: test:x:1002: test1:x:78:
3.3 添加删除组成员
gpasswd [选项] 用户名 -a:向组内添加一个用户 -d:从组内删除一个用户 -M:定义组成员列表,以逗号(,)分隔
示例:
[root@localhost ~]# gpasswd -a yun test //将用户yun添加到test组中 正在将用户“yun”加入到“test”组中 [root@localhost ~]# tail -f /etc/group //查看/etc/group最后10行 avahi:x:70: slocate:x:21: postdrop:x:90: postfix:x:89: sshd:x:74: tcpdump:x:72: xiongchen:x:1000:xiongchen yun:x:1001: test:x:1002:yun test1:x:78:
[root@localhost ~]# gpasswd -d yun test //将用户yun从test组中删除 正在将用户“yun”从“test”组中删除 [root@localhost ~]# tail -f /etc/group avahi:x:70: slocate:x:21: postdrop:x:90: postfix:x:89: sshd:x:74: tcpdump:x:72: xiongchen:x:1000:xiongchen yun:x:1001: test:x:1002: test1:x:78:
[root@localhost ~]# gpasswd -M xiongchen,yun test //将用户xiongchen和yun添加到text组中 [root@localhost ~]# tail -f /etc/group avahi:x:70: slocate:x:21: postdrop:x:90: postfix:x:89: sshd:x:74: tcpdump:x:72: xiongchen:x:1000:xiongchen yun:x:1001: test:x:1002:xiongchen,yun test1:x:78:
3.4 删除组账号
groupdel 组账号名
示例:
[root@localhost ~]# groupdel test1 //删除test1 [root@localhost ~]# tail -f /etc/group gnome-initial-setup:x:986: avahi:x:70: slocate:x:21: postdrop:x:90: postfix:x:89: sshd:x:74: tcpdump:x:72: xiongchen:x:1000:xiongchen yun:x:1001: test:x:1002:yun
注意:
- 当前组有附加组时,无法删除
- 基于用户创建(useradd)所得的组无法用 groupdel 删除
- groupdel 只能删除没有附加组且由 groupadd 创建的组
四、查询账号信息
4.1 查询用户所属组
[root@localhost ~]# groups yun yun : yun test
4.2 查询用户身份标识
[root@localhost ~]# id yun uid=1001(yun) gid=1001(yun) 组=1001(yun),1002(test)
4.3 用户账号登录属性
[root@localhost /]# finger yun //finger需要先安装 Login: yun Name: Directory: /home/yun Shell: /bin/bash Last login 五 5月 5 22:47 (CST) on pts/2 No mail. No Plan.
4.4 查询已登录到的主机的用户信息
[root@localhost /]# w 01:20:25 up 7:51, 3 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root :0 :0 264月23 ?xdm? 1:56 0.11s /usr/libexec/gnome-session-binary --session gnome-classic root pts/0 :0 264月23 9days 0.02s 0.02s bash root pts/2 192.168.147.1 23:31 1.00s 0.21s 0.01s w [root@localhost /]# who root :0 2023-04-26 00:53 (:0) root pts/0 2023-04-26 13:49 (:0) root pts/2 2023-05-05 23:31 (192.168.147.1) [root@localhost /]# users root root root
五、文件/目录的权限和归属
5.1 文件/目录权限管理
r:允许查看文件内容,显示文件列表
w:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
x:允许运行进程,切换目录
权限项 | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
字符表示 | r | w | x | r | w | x | r | w | x |
数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
权限分配 | 文件 | 所有 | 者 | 文件 | 所属 | 组 | 其他 | 用 | 户 |
chmod _ _ _(三位八进制数) 文件或目录 chmod [u,g,o,a] [+,-,=] [r,w,x] 文件或目录 u:文件拥有者 +:增加 r:读 g:文件所属组 -:去除 w:写 o:其他用户 =:设置权限 x:执行 a:所有用户
示例:
[root@localhost opt]# chmod 777 a [root@localhost opt]# ll 总用量 0 -rwxrwxrwx. 1 root root 0 5月 6 02:02 a -rw-r--r--. 1 root root 0 5月 6 02:02 b [root@localhost opt]# chmod g-w+x b [root@localhost opt]# ll 总用量 0 -rwxrwxrwx. 1 root root 0 5月 6 02:02 a -rwxr-xr--. 1 root root 0 5月 6 02:02 b
chmod -R 要修改为的权限 修改对象 递归修改当前目录下所有文件,包括目录自己的权限
示例:
[root@localhost opt]# mkdir ww [root@localhost opt]# cd ww [root@localhost ww]# touch x y z [root@localhost ww]# ll 总用量 0 -rw-r--r--. 1 root root 0 5月 6 02:13 x -rw-r--r--. 1 root root 0 5月 6 02:13 y -rw-r--r--. 1 root root 0 5月 6 02:13 z [root@localhost ww]# cd .. [root@localhost opt]# ll 总用量 0 -rwxrwxrwx. 1 root root 0 5月 6 02:02 a -rwxr-xr--. 1 root root 0 5月 6 02:02 b drwxr-xr-x. 2 root root 33 5月 6 02:13 ww [root@localhost opt]# chmod -R 763 ww [root@localhost opt]# ll 总用量 0 -rwxrwxrwx. 1 root root 0 5月 6 02:02 a -rwxr-xr--. 1 root root 0 5月 6 02:02 b drwxrw--wx. 2 root root 33 5月 6 02:10 ww [root@localhost opt]# cd ww [root@localhost ww]# ll 总用量 0 -rwxrw--wx. 1 root root 0 5月 6 02:10 x -rwxrw--wx. 1 root root 0 5月 6 02:10 y -rwxrw--wx. 1 root root 0 5月 6 02:10 z
注意:chmod -R 在对多个递归目录使用时,只会对最后一个目录和文件生效
5.2 改变文件的属主和属组
chown 要改成的属主:要改成的属组 文件或目录名 chown 要改成的属主.要改成的属组 文件或目录名 以上都表示既改所有者,也改所属组 chown 要改成的属主 文件或目录名 //只改所有者 chown :要改成的属组 文件或目录名 //只改所属组
示例:
[root@localhost opt]# ll 总用量 0 drwxr-xr-x. 3 root root 24 5月 6 02:18 1 -rwxrwxrwx. 1 root root 0 5月 6 02:02 a -rwxr-xr--. 1 root root 0 5月 6 02:02 b drwxr-xr-x. 2 root root 33 5月 6 02:13 ww [root@localhost opt]# chown yun:yun a [root@localhost opt]# ll 总用量 0 drwxr-xr-x. 3 root root 24 5月 6 02:18 1 -rwxrwxrwx. 1 yun yun 0 5月 6 02:02 a -rwxr-xr--. 1 root root 0 5月 6 02:02 b drwxr-xr-x. 2 root root 33 5月 6 02:13 ww
面试题:cp /etc/passwd /opt/wujian
cp所需的最低权限:x
passwd所需的最低权限:r
wujian所需的最低权限:w
5.3 设置文件和目录的默认权限
控制新建的文件或目录的权限
新建的文件或目录的权限 = 默认权限 - umask权限
文件默认权限为666
目录默认权限为777
tips:
新建的文件不可能有执行权限(x),只能用chmod修改
新建的目录一定有执行权限(x)
六、修改主机名的方法
- hostname 主机名 这是临时修改,重启服务器后失效,使用su命令生效
- vim /etc/hostname 修改配置文件(只能重启服务器生效)
- hostnamectl set-hostname 主机名