Linux 用户与组
2022/1/4 7:09:05
本文主要是介绍Linux 用户与组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
为什么引入用户和组?
安全性
—权限管理(哪些文件某个用户可以读写、哪些进程某个用户可以启动)
—资源管理(存储资源、IO、CPU资源)
[root@localhost ~]# id root uid=0(root) gid=0(root) 组=0(root) 每个用户有唯一uid和gid 一个用户可以有不同的组 一个组可以有不同的用户
useradd增 userdel 删 usermod改 users查(查看当前登录用户)
创建一个用户会牵扯到哪些文件?
默认情况下,创建用户会添加一个和用户同名的组,默认将这个用户加入这个组
1、和账户相关文件
/etc/passwd
保存用户账号的基本信息
[root@hahah ~]# cat /etc/passwd ... hejin13:x:1022:1022::/home/hejin13:/bin/bash sc:x:1023:1023::/home/sc:/bin/bash
- 字段1: 用户名
- 字段2: 密码占位符,通常为x或者*。
因为文件任何人都可以访问,密码不安全;
真正测密码放在/etc/shadow里面 - 字段3: 用户id
- 字段4: 所属基本组的id
- 字段5: 用户描述信息
- 字段6: 家目录位置
- 字段7: 登录的shell信息
练习
查找出linux系统里的用户uid大于2000的用户,显示出它的名字、uid、shell、家目录
[root@192 nginx]# cat /etc/passwd|awk -F : '$3>2000 {print $1,$3,$7,$6}' nobody 65534 /sbin/nologin /
/etc/shadow
[root@192 ~]# cat /etc/shadow bin:*:18397:0:99999:7::: daemon:*:18397:0:99999:7::: ... hejin13:!!:18941:0:99999:7::: sc:$6$wvTLEqS7sUZR.LcN$0EOiWoJy.QYcOGwepuQuqIIDvdeMf0ygmDJAPNxSZkapp9V9fLWN3/HKDVYs/jJi062YYNXDGbER1dfjwtkaE.:18946:0:99999:7:::
第2个字段:密码字段
*操作系统自带的,没有密码的
!!用户建的,没有密码的
提示: 密码字段为空说明密码被清除。
查看没有设置密码的用户
cat /etc/shadow|awk -F: 'BEGIN{i=0}length($2)<=2{print $1,"没有设置密码";i++}END{print "一共有"i"个用户"}'
[root@localhost ~]# diff /etc/passwd /etc/passwd- 47d46 < sc:x:1023:1023::/home/sc:/bin/bash
/etc/passwd- 和 /etc/shadow- 是/etc/passwd和/etc/shadow的备份文件,总比原文件少一次操作
2、组信息相关文件
/etc/group
[root@192 ~]# cat /etc/group hejin13: x :1022: sc : x: 1023:
/etc/gshadow
hejin13:!:: sc:!::
3、家目录信息相关文件
创建用户 默认在/home 创建同名的文件夹
/etc/skel/
用户环境默认设置文件
将 /etc/skel/ 下的文件拷贝到用户的家目录
[root@localhost skel]# ll -a 总用量 24 drwxr-xr-x. 2 root root 76 11月 15 11:31 . drwxr-xr-x. 80 root root 8192 11月 15 11:31 .. -rw-r--r--. 1 root root 0 11月 15 11:31 aa.txt -rw-r--r--. 1 root root 18 7月 21 2020 .bash_logout -rw-r--r--. 1 root root 141 7月 21 2020 .bash_profile -rw-r--r--. 1 root root 376 7月 21 2020 .bashrc
/etc/login.defs
用户环境默认属性设置文件
–规定了uid从多少开始、密码过期的天数、密码的加密算法
- 0 root 超级用户
- 1~201 系统安装好就有的用户(系统用户、程序用户) :作用就是用来启动或登录某个程序
- 201~999 自己新建的系统用户 没有家目录,是管理系统的,不需要登录
- 1000~60000 自己新建的用户
超级用户root的UID为0
程序用户的UID1-999
普通用户的UID大于等于1000
/var/spool/mail
邮件目录
/var/spool/mail下面创建一个同名的文件
练习1:找uid大于1000的用户
找出系统中uid大于1000的用户 显示出名字、uid、家目录、shell信息
[root@localhost /]# awk -F: '$3>=1000{print $1,$3,$6,$7}' /etc/passwd hejin12 1021 /home/hejin12 /bin/bash hejin13 1022 /home/hejin13 /bin/bash sc 1023 /home/sc /bin/bash sc2 1024 /home/sc2 /bin/bash
>>> import os >>> os.geteuid() 有效用户root用户有效的uid 为0 0 >>> os.getegid() 0 >>> os.getpid() 2264 >>> help(os.walk) # 输出在文件夹中的文件名通过在树中游走,向上或者向下。 >>> list(os.walk(".")) [('.', [], ['passwd', 'access.log', 'config', 'ifcfg-ens33', 'hosts', 'test2.txt', 'path.txt', 'selinux', 'sshd_config', 't.txtr', 't.txt', '.test.txt.swp', 'test.txt'])]
练习2:验证用户是否存在
用python脚本验证用户是否存在,会用到sys模块和os模块
os.system(cmd)的返回值是脚本的退出状态码,只会有0(成功),1,2
os.popen(cmd)返回脚本执行的输出内容作为返回值
方式1
import sys import os username = sys.argv[1] result = os.system(f"id {username}") print(result) if result == 0: # if not result: print("用户存在") else: print("用户不存在")
方式2
import sys user1 = sys.argv[1] with open("/etc/passwd") as f: userList = [] for data in f: data = data.strip() lst = data.split(':') userList.append(lst[0]) if user1 in userList: print("用户存在") else: print("用户不存在")
4、ftp协议(文件传输协议)
ftp是一个文件传输服务,主要用于上传和下载文件,实现共享文件。
vsftpd是“very secure TTP daemon”的缩写,是一个完全免费的、开放源代码的ftp服务器软件。
- 1、安装vsftp服务
yum install vsftpd -y
检查是否安装了vsftpd
rpm -qa|grep vsftpd - 2、安装客户端软件
yum install lftp ftp -y
lftp、ftp这两个都是ftp的客户端 - 3、启动服务
使用yum安装的服务基本上都可以使用systemctl启动;
systemctl start vsftpd
查看是否启动成功
ps aux|grep vsftpd - 4、编辑配置文件
vim /etc/vsftpd/vsftpd.conf
第12行,默认是NO,不允许匿名用户登录
centos8里vsftpd服务默认不允许匿名用户登录
anonymous_enable=NO 修改为YES
要重新加载配置文件,或者重启服务
systemctl restart vsftpd - 5、使用
[root@sanchuang-linux ~]# cat /etc/passwd ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin # 注:vsftpd的匿名用户,公共用户 #注:/var/ftp ftp这个用户的家目录文件
[root@sanchuang-linux ~]# lftp ftp@192.168.0.27 # 注:以ftp用户取登录程序 密码: 注:ftp是默认用户 [root@kafka01 ~]# ftp 192.168.149.132 Connected to 192.168.149.132 (192.168.149.132). 220 (vsFTPd 3.0.3) Name (192.168.149.132:root): ftp #系统中的程序用户ftp, 使用ftp匿名用户登陆 331 Please specify the password. Password: #密码输入直接敲回车 一般是不会设置的 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
5、useradd 命令
格式:useradd [选项]… 用户名
常用选项
-u:指定 UID 标记号
-d:指定宿主目录,缺省为 /home/用户名
-e:指定帐号失效时间
-g:指定用户的基本组名(或GID号)
-G:指定用户的附加组名(或GID号)
-M:不为用户建立并初始化宿主目录
-s:指定用户的登录Shell
-c:用户注释描述信息 ,可以告诉别人创建改用户的目的
-r: 新建系统用户,不会有新建家目录
adduser username 默认不会创建家目录
统计当前/etc/passwd 中有几种shell信息
即用户一登上来执行什么操作
[root@localhost etc]# cat passwd | awk -F: '{print $7}'|sort -n|uniq -c 27 /bin/bash 1 /bin/sync 1 /sbin/halt 19 /sbin/nologin #ssh远程登录、su本地登录都不行 1 /sbin/shutdown [root@localhost etc]# awk -F: '{print $7}' /etc/passwd |sort|uniq /bin/bash #系统默认用户的shell信息 /bin/sync #将内存的缓存刷到磁盘 /sbin/halt #登录就关机 /sbin/nologin #用户不能登录系统 /sbin/shutdown #关机
useradd -s /sbin/nologin sc01 无论是ssh还是su都不能登录
useradd -s /sbin/halt sc02 登录即关机
找出系统中uid大于1000 并且shell信息为/bin/bash,用户名包含sanchuang的用户信息(用户名,用户id,家目录)
[root@localhost ~]# cat /etc/passwd | awk -F: '$3>1000{print $1,$3,$6,$7}'|grep /bin/bash|grep sangchuang sangchuang03 1028 /home/sangchuang03 /bin/bash sangchuang04 1029 /home/sangchuang04 /bin/bash [root@localhost ~]# grep "sangchuang" /etc/passwd |grep /bin/bash |awk -F: '$3>1000{print $1,$3,$6}' sangchuang03 1028 /home/sangchuang03 sangchuang04 1029 /home/sangchuang04 [root@localhost ~]# awk -F: '$3>1000 && $1~/sangchuang/ && $7=="/bin/bash" {print $1,$3,$6}' /etc/passwd sangchuang03 1028 /home/sangchuang03 sangchuang04 1029 /home/sangchuang04
#指定家目录,但是受安全机制selinux限制 #selinux 一个linux内核的安全子系统,由于安全规则太繁琐,一般会将其关闭 [root@localhost ~]# useradd -d /tmp/sangchuang05 sangchuang05 useradd: cannot set SELinux context for home directory /tmp/sangchuang05 # 修改安全机制,重启系统生效配置 [root@localhost ~]# vim /etc/selinux/config SELINUX=enforcing ——》SELINUX=disabled # getenforce 查看是否生效
#指定组名 [root@localhost ~]# useradd -g sanchuang01 -G sangchuang04,sangchuang05 sangchuang07 [root@localhost ~]# id sangchuang07 uid=1031(sangchuang07) gid=1026(sanchuang01) 组=1026(sanchuang01),1029(sangchuang04),1030(sangchuang05)
6、userdel 命令
格式:userdel [-r] 用户名
添加 -r 选项时,表示连用户的宿主目录一并删除
添加 -f 选项时,表示强制删除
[root@localhost ~]# userdel sangchuang04 #删除用户帐号,而不删除相关文件。 userdel:组“sangchuang04”没有移除,因为它包含其它成员。
7、usermod 命令
格式:usermod [选项]… 用户名
常用选项
-u: 修改 UID
-d:指定宿主目录,缺省为 /home/用户名
-e:指定帐号失效时间
-g:指定用户的基本组名(或GID号)
-G:指定用户的附加组名(或GID号)
-s:指定用户的登录Shell
-l:更改用户帐号的登录名称
-L: 锁定用户账户
-U:解锁用户账户
[root@localhost ~]# usermod -u 1200 sc2 #修改UID [root@localhost ~]# id sc2 uid=1200(sc2) gid=1024(sc2) 组=1024(sc2) [root@localhost ~]# usermod -d /temp/ooo ooo #修改家目录 [root@localhost ~]# tail /etc/passwd sc2:x:1200:1024::/home/sc2:/bin/bash ooo:x:1025:1025::/temp/ooo:/bin/bash [root@localhost ~]# usermod -g 1026 ooo #修改gid [root@localhost ~]# id ooo uid=1025(ooo) gid=1026(sanchuang01) 组=1026(sanchuang01) [root@localhost ~]# usermod -G 1027 ooo #修改组id [root@localhost ~]# id ooo uid=1025(ooo) gid=1026(sanchuang01) 组=1026(sanchuang01),1027(snagchuang02) [root@localhost ~]# usermod -c "修改注释" sanchuang11 #修改注释 [root@localhost ~]# tail /etc/passwd ... sanchuang11:x:1033:1033:修改注释:/tmp/sanchuang11:/bin/bash sanchuang12:x:1034:1034:描述信息:/home/sanchuang12:/bin/bash
账户锁定就是修改系统存储的密码字段,验证密码失败,达到账户锁定的目的
锁住的状态,其实就是在密码字段前面加一个!
[root@localhost ~]# usermod -L sangchuang07 锁定 [root@localhost ~]# usermod -U sangchuang07 解锁
8、passwd 命令
格式:passwd [选项]… 用户名
常用选项:
-d:清空用户的密码,使之无需密码即可登录
- l:锁定用户帐号
-u:解锁用户帐号
-S:查看用户帐号的状态(是否被锁定)
–stdin:接收别的命令stdout做为stdin标准输入设置 密码
root用户可以修改所有用户密码,不要求复杂性
普通用户只能修改自己的密码,有密码复杂度的要求
#使用标准输入来设置密码 [root@kafka01 lianxi]# echo 12345678 |passwd sanchuang13 --stdin
练习1
创建20个用户,用户名以beautwen开头,指定家目录在/tmp/lianxi/beautiwen01…20
登录shell 都指定为/usr/bin/sh
给出提示:创建之前判断,如果用户存在,就删除当前用户
练习2
9、groupadd
添加组
[root@localhost lianxi]# groupadd -g 5000 sanle [root@localhost lianxi]# less /etc/group sanle:x:5000:
10、 groupmems
对组成员进行修改,可以添加删除
groupmems -g 组名 -a 用户名 往这个组里面添加用户
groupmems -g 组名 -l 查看组里的用户
11、groupdel
[root@kafka01 lianxi]# groupdel sanle #删除sanle这个组 groupdel: cannot remove the primary group of user 'sanle1'#组里面有sanle1这个成员 所以删除不来 [root@kafka01 lianxi]# userdel -r sanle1 #先删除成员 [root@kafka01 lianxi]# groupdel sanle #再删除组
12、groupmod
[root@localhost lianxi]# groupadd -g 6000 sanchuang #添加用户指定GID [root@localhost lianxi]# groupmod -g 4000 sanchuang #修改GID [root@localhost lianxi]# groupmod -n sanchuang2 sanchuang #修改组名 [root@localhost lianxi]# tail -n 1 /etc/group sanchuang2:x:4000:
13、newgrp修改有效组
用户必须是组成员才能改变有效组
有效组: 新建文件夹或文件的时候,属组是谁,谁就是有效组
[root@localhost lianxi]# id usersanle uid=1329(usersanle) gid=1329(usersanle) 组=1329(usersanle),5000(sanle) [usersanle@localhost ~]$ touch bb [usersanle@localhost ~]$ ls -al ... -rw-rw-r-- 1 usersanle usersanle 0 11月 17 10:51 bb [usersanle@localhost ~]$ newgrp sanle [usersanle@localhost ~]$ touch cc [usersanle@localhost ~]$ ll ... -rw-rw-r-- 1 usersanle usersanle 0 11月 17 10:51 bb -rw-r--r-- 1 usersanle sanle 0 11月 17 10:55 cc 属主 属组
14、/etc/skel 文件
新建用户账号的时候,会复制到宿主目录
主要控制用户初始化环境配置
.bash_profile 用户每次登录时执行
.bashrc 用户退出登录的时候执行的
.bash_logout 用户每次进入新的bash环境执行
.bash_history 用户的历史命令。退出时会将历史命令写入这个文件
/etc/bashrc 在每个新的bash开启的时候执行
/etc/profile 在系统开启的时候执行
su - sanle:.bash_profile 和 .bashrc 都会被执行
su sanle :.bashrc 只会执行这个文件
#登陆的时候 .bash_profile --> ~/.bashrc --> /etc/bashrc #进入新bash的时候 .bashrc --> /etc/bashrc
15、su命令
[root@localhost lianxi]# su - usersanle #连同环境一起切到usersanle,家目录下的.bashrc .bash_profile都会执行 [root@localhost lianxi]# su usersanle #只是切换了用户,环境变量没有切换,只会执行.bashrc
16、who/w命令
查看已经登录到主机的用户信息
[root@kafka01 ~]# w #显示的比who多俩行 14:43:32 up 1:19, 3 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.149.1 11:10 2:35m 0.19s 0.19s -bash root pts/1 192.168.149.1 11:16 3:27m 0.01s 0.01s -bash root pts/2 192.168.149.1 14:42 1.00s 0.02s 0.01s w
USER | TTY | FROM | LOGIN@ | IDLE | JCPU | PCPU | WHAT |
---|---|---|---|---|---|---|---|
使用者 ID | 使用的终端机 | 从哪边连上来的 | 上线时间 | 呆滞时间 | CPU 使用量 | 动作 |
17、last/lastlog命令
last 显示用户最近登录信息
lastlog 查看所有用户上一次登录情况
18、audit 安全审计
系统安全
记录某个用户某些操作
记录某个程序某些操作
audit详解
回顾:
-
如何知道一个用户是否在linux系统里存在?
1、id 用户名 查看
2、查看/etc/passwd -
如何禁用一个用户登录linux系统?
1、passwd -l 用户名 锁定
2、usermod -L 用户名 锁定
3、useradd -s /sbin/nologin {username} 修改登录的shell -
如何知道一个用户属于哪些组?
1、groups uname
2、结合/etc/passwd和/etc/group查看
3、id uname -
如何知道哪些用户现在已经登录在linux里?
w、who -
哪些用户曾经 登录过linux系统?
last 显示用户最近登录信息
lastlog 查看所有用户上一次登录情况 -
如何给用户重新设置密码?
echo 密码|passwd sanchuang13 --stdin -
linux的root密码忘记了,怎么办?
进入单用户模式,修改root密码 -
如何将已经登录在系统里的用户踢出系统?
pkill -KILL -t pts/0 (pts/0为w指令看到的用户终端号)
ps aux | grep sshd 查看sshd进程PID
kill -9 10482 杀掉test登录的sshd进程PID -
并且防止它再次登录系统?
1.踢出可疑的root登录用户,马上修改密码
2.sshd—》/etc/hosts.deny hosts.allow —》ip
3./etc/ssh/sshd_config -->DenyUsers -->用户
4.把/bin/bash修改成/sbin/nologin
这篇关于Linux 用户与组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法