用户、组
多用户多任务的
linux管理模式私有模式:每一个用户对应一个和用户 同名的组
公有模式:
用户类别(65535个用户):
管理员(只允许一个管理员): root UID=0
普通用户 :rehat 1-65535
系统用户:系统安装自动创建 1-200
一般用户:手动添加
1.1创建用户
useradd 用户名 /usr/sbin/useradd(每次只能添加一个,且只有管理员可执行)
/usr/sbin/useradd
-l 指定新的登录名 #ysermod -l newuser user
-u 指定用UID #usermod -u 1111 newuser
-g 指定GID,修改用户的基本组 #usermod -g 1000 newuser
-G 指定附加组 #usermod -G g1 newuser
-c 注释 #usermod -c woshiuser newuser
-d 家目录 #usermod -d 家目录 newuser
-s 设置shell #usermod -s
1.2查看用户
cat /etc/passwd 用户配置文件
grep '^用户名' /etc/passwd
id 用户名
root:x:0:0:root:/root:/bin/bash
用户名:密码占位符:UID:GID:描述信息,注释字段:家目录:SHELL(登陆式shell,非登录式shell)
name:password:UID:GID:GECOS:directory:shell
1.3修改用户
useerdel -r 用户 [option...] [选项参数] 用户名
#useradd user
#groupadd g1
-l 指定新的登录名 #ysermod -l newuser user
-u 指定用UID #usermod -u 1111 newuser
-g 指定GID,修改用户的基本组 #usermod -g 1000 newuser
-G 指定附加组 #usermod -G g1 newuser
-c 注释 #usermod -c woshiuser newuser
-d 家目录 #usermod -d 家目录 newuser
-s 设置shell #usermod -s /sbin/nologin newuser
-L 锁定用户密码
—U 解锁用户密码
#usermod -l new1 -u 1234 -g 1000 -c newuser newuser
1.4删除用户
userdel -r 用户 删除用户以及创建用户相关的所有文件
注:默认也会删除用户的基本组,但是如果基本组中有其他用户,删除用户不会删除基本组
[root@www ~]# useradd haha
[root@www ~]# tail -1 /etc/group
haha:x:1002:
[root@www ~]# userdel -r haha
[root@www ~]# tail -1 /etc/group
user:x:1001:
[root@www ~]# useradd xixi
[root@www ~]# usermod -G xixi user
[root@www ~]# tail -1 /etc/group
xixi:x:1002:user
[root@www ~]# userdel -r xixi ---xixi基本组中存在其他用户,删除用户不会删除基本组
userdel: group xixi not removed because it has other members.
[root@www ~]# tail -1 /etc/group
xixi:x:1002:user
1.5用户设置/修改密码
passwd [用户名]
-d 删除用户密码
-l 锁定用户密码
-u 解锁用户密码
管理员:可以指定用户名更改系统任意用户的密码,不需要输入之前的密码,不严格匹配密码等级设置
普通用户:不可以指定用户名,只能更改自己的密码,需要输入之前的密码,严格匹配密码等级设置
1.6破解密码
关机-->开机-->鼠标进入启动界面-->第一个引导菜单-->e(进入)-->找到linux这一行在行尾添加rd.break-->ctrl-x-->mount -o remount,rw /sysroot --_chroot /sysroot -->passwd root-->设置密码--确定密码--->touch /.autorelabel -->exit --exit(等待)
更改密码其它路径
echo mima | passwd --stdin 用户名
chpasswd
[root@www ~]# cat users
redhat:1234
root:1234
xiao1:1234
[root@www ~]# cat users |chpasswd
[root@www ~]# echo redhat:123456 |chpasswd
组类别
管理组:root
普通组:系统组
一般组
主组,私有组,用户的默认组
附加组,额外组 用户默认组之外的组
2.1组添加
groupadd 组名 (每次只能添加一个,且只有管理员可执行)
2.2查看组
cat /etc/group 组配置文件
grep '^组名' /etc/group (判断组信息是否存在)
#man 5 group
redhat:x:1000
组名:组密码占位符:GID组id:组中的用户名
2.3修改组信息
groupmod [option...] [选项参数] 组名
#groupadd grp2
-n 指定新组名 #groupmod -n g2 grp2
-g 指定GID #groupmod -g 2222 g2
2.4删除组
groupdel 组名 删除组文件
注:是能删除一个附加组,哪怕附加组中由用户也可以删除,但是不能删除一个用户组
2.5设置,修改密码
gpasswd 组名
-a 将用户加入指定组 #gpasswd -a redhat g2
-d 将指定用户从组移除 #gpasswd -d redhat g2
-M 指定组成员列表 #gpasswd -M user1,user2 g2 #gpasswd -M haha,xixi g2
-------------------------------------
-A 指定组长 #gpasswd -A haha g2
-R 锁定组密码 #gpasswd #gpasswd -R g2
2.6登录新组
newgrp 组名 切换组身份
扩展
useradd haha /etc/passwd
/etc/group
/etc/shadow 密码文件
/etc/gshadow
/home/USERNAME (d)
/var/spool/mail/USERNAME (-)
groupadd /etc/group /etc/gshadow
/etc/shadow 用户密码文件
用户名:加密密码:最后一修改密码的天数(1970/1/1):密码生效最短时间:最长时间:警告时间:延长时间:精确过期时间(1970/1/1):保留字段
#passwd
-x, --maximum=DAYS maximum password lifetime (root only)
-n, --minimum=DAYS minimum password lifetime (root only)
-w, --warning=DAYS number of days warning users receive
/etc/gshadow 组密码信息 7 5
组名:组密码:组长:组成成员
/etc/default/useradd 用户创建默认加载的配置文件
参数 | 含义 |
---|---|
GR0UP=100 | 这个选项用于建立用户的默认组,也就是说,在添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。但 CentOS 并不是这样的,而是在添加用户时会自动建立和用户名相同的组作为此用户的初始组。也就是说这个选项并不会生效。 Linux 中默认用户组有两种机制:一种是私有用户组机制,系统会创建一个和用户名相同的用户组作为用户的初始组;另一种是公共用户组机制,系统用 GID 是 100 的用户组作为所有新建用户的初始组。目前我们采用的是私有用户组机制。 |
HOME=/home | 指的是用户主目录的默认位置,所有新建用户的主目录默认都在 /home/下。 |
INACTIVE=-1 | 指的是密码过期后的宽限天数,也就是 /etc/shadow 文件的第七个字段。这里默认值是 -1,代表所有新建立的用户密码永远不会失效。 |
EXPIRE= | 表示账号过期时间,也就是 /etc/shadow 文件的第八个字段。默认值是空,代表所有新建用户没有失效时间,永久有效。 |
SHELL=/bin/bash | 表示所有新建立的用户默认 Shell 都是 /bin/bash。 |
SKEL=/etc/skel | 在创建一个新用户后,你会发现,该用户主目录并不是空目录,而是有 .bash_profile、.bashrc 等文件,这些文件都是从 /etc/skel 目录中自动复制过来的。因此,更改 /etc/skel 目录下的内容就可以改变新建用户默认主目录中的配置文件信息。 |
CREATE_MAIL_SPOOL=yes | 指的是给新建用户建立邮箱,默认是创建。也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同。 |
/etc/login.defs 登录用户默认匹配的配置文件
注:配置文件中的#表示注释
MAIL_DIR /var/spool/mail \#创建用户时,要在目录/var/spool/mail中创建一个用户mail文件
PASS_MAX_DAYS 99999 \#密码最大有效期
PASS_MIN_DAYS 0 \#两次修改密码的最小间隔时间
PASS_MIN_LEN 5 \#密码最小长度,对于root无效
PASS_WARN_AGE 7 \#密码过期前多少天开始提示
#创建用户时不指定UID的话自动UID的范围
UID_MIN 500\#用户ID的最小值
UID_MAX 60000 \#用户ID的最大值
#自动组ID的范围
GID_MIN 500\#组ID的最小值
GID_MAX 60000 \#组ID的最大值
USERDEL_CMD /usr/sbin/userdel_local \#当删除用户的时候执行的脚本
CREATE_HOME yes \#使用useradd的时候是够创建用户目录
USERGROUPS_ENAB yes \#用MD5加密密码
权限
1.linux中权限在文件中标识
2.权限的描述形式
(1)字符形式 r read w write x excute
(2)数值形式 r=4 w=2 x=1
-rw-------. 1 root root 1456 Nov 19 12:19 anaconda-ks.cfg 600
drwxr-xr-x. 2 root root 6 Nov 19 14:12 Desktop 755
3.权限字符的含义
文本文件: r 查看文件的内容 cat tac more less head tail grep vim
w 编辑文件内容 vim echo 123 >a.txt cat << EOF > FILE
x 执行文件中内容(脚本)命令文件
目录文件: r 查看目录中的文件名 ls
w 创建文件 touch mkdir cp mv > rm
x 执行cd (r-x) (rwx)
4.权限的匹配规则
可执行文件(命令文件)进程的所属用户身份是用户发起者身份;
判断发起者身份是否是目标文件所属用户,是,只匹配目标文件所属用户位的权限
不是,判断发起者身份是否是目标文件所属组用户,是组用户,只匹配目标文件所属组的权限
不是,直接匹配目标文件其他用户位的权限。
5.修改权限
chmod 权限 FILE...
注:作为普通用户只能更改属于自己的文件的权限。
u所属用户位 g所属组 o其他用户 a 所有
chmod ugo=rwx file1 == chmod a=rwx file1 == chmod rwx file
chmod u=rw,g+r,o-r file1 == chmod -x file
------------------------------------------------------------------------
chmod 644 file2 rw-r--r--
chmod 006 file3
【chmod u=6 file4 ----错误的】
chown 更改文件的所属用户
chown 用户名 FILE
chown 用户名:组名 FILE
chown .组名 FILE
chgrp 更改文件的所属组
chgrp 组名 FILE
eg:
[root@www ~]# ll aaa
-------rw-. 1 root root 5 Dec 4 14:30 aaa
[root@www ~]# chown xixi:haha aaa
[root@www ~]# ll aaa
-------rw-. 1 xixi haha 5 Dec 4 14:30 aaa
[root@www ~]# chown redhat aaa
[root@www ~]# ll aaa
-------rw-. 1 redhat haha 5 Dec 4 14:30 aaa
[root@www ~]# chgrp xixi aaa
[root@www ~]# ll aaa
-------rw-. 1 redhat xixi 5 Dec 4 14:30 aaa
6.创建文件默认的权限值
文本文件最高的权限值:666
权限掩码(权限过滤值:022 #umask
文本文件默认的权限值:644
目录文件最高的权限值:777
权限掩码(权限过滤值:022 #umask
目录文件默认的权限值:755
rw- rw- rw- 6 6 6
--- -wx -wx 0 3 3
rw- r-- r-- 6 3 3-----x 644
7.特殊权限
u+s =4 suid 所属用户的禁锢位
仅对可执行文件(命令文件)设置有意义:
可执行文件(命令文件)设置u+s权限,可执行文件的进程所属用户是可执行文件自身的用户;
eg:
[root@www ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 33544 Dec 14 2019 /usr/bin/passwd
[root@www ~]# ll /etc/shadow
----------. 1 root root 1568 Dec 4 11:58 /etc/shadow (对所有用户没有任何权限)
[redhat@www ~]$ passwd (为什么普通用户可以修改密码/etc/shadow)
Changing password for user redhat.
Current password:
原因:通过普通用户执行passwd,passwd文件进程身份是root
设置情况:通过任意用户执行命令,通过root身份来执行就可以设置特殊权限u+s
g+s =2 sgid 所属组的禁锢位
(1)对可执行文件设置有意义:(很少用)
可执行文件(命令文件)设置g+s权限,可执行文件的进程所属组是可执行文件自身的所属组;
(2)对目录文件设置有意义:
任意用户在该目录下创建的文件,文件的所属组都是目录的所属组
eg:
[root@www ~]# mkdir /pub
[root@www ~]# chmod 777 /pub
[root@www ~]# ll /usr/bin/touch
-rwxr-xr-x. 1 root root 96144 Jul 10 2021 /usr/bin/touch
[user@www ~]$ touch /pub/u1
[user@www ~]$ ll /pub/u1
-rw-rw-r--. 1 user user 0 Dec 4 16:20 /pub/u1
----------------------目录g+s------------------------------------
[root@www ~]# chmod g+s /pub
[root@www ~]# ll /pub -d
drwxrwsrwx. 2 root root 16 Dec 4 16:20 /pub
[user@www ~]$ touch /pub/u2
[user@www ~]$ ll /pub/
total 0
-rw-rw-r--. 1 user user 0 Dec 4 16:20 u1
-rw-rw-r--. 1 user root 0 Dec 4 16:22 u2
o+t =1 sticky 冒险位
仅对目录文件设置有意义:
目录文件设置o+t权限后,普通用户只能删除自己的文件不能删除别人的文件
[root@www ~]# ll -d /test
drwxrwxrwx. 3 root root 102 Dec 4 15:18 /test
[root@www ~]# ll /test
total 0
-rw-r--r--. 1 root root 0 Dec 4 15:09 r2
-rw-r--r--. 1 root root 0 Dec 4 15:09 r3
-rw-r--r--. 1 redhat redhat 0 Dec 4 15:10 red1
-rw-r--r--. 1 redhat redhat 0 Dec 4 15:10 red2
-rw-r--r--. 1 redhat redhat 0 Dec 4 15:10 red3
-rw-r--r--. 1 user user 0 Dec 4 15:10 u1
-rw-r--r--. 1 user user 0 Dec 4 15:10 u2
-rw-r--r--. 1 user user 0 Dec 4 15:10 u3
[user@www test]$ rm -f r2 删除任意用户的文件
--------------------目录o+t----------------------------------
[root@www ~]# chmod o+t /test
[root@www ~]# ll -d /test
drwxrwxrwt. 3 root root 92 Dec 4 16:28 /test
[user@www test]$ rm -f r3
rm: cannot remove 'r3': Operation not permitted
[user@www test]$ rm -f u1
[user@www test]$ rm -f red1
rm: cannot remove 'red1': Operation not permitted
8.扩展权限
./+
getfacl 查看文件的权限列表
[root@www ~]# getfacl aaa
# file: aaa
# owner: redhat
# group: xixi
# flags: sst
user::rw-
group::r--
other::r--
setfacl 设置权限列表
-m 指定权限列表
setfacl -m u:用户名(UID):权限 file
setfacl -m g:组名(GID):权限 file
[root@www ~]# setfacl -m u:xixi:rwx aaa
[root@www ~]# getfacl aaa
# file: aaa
# owner: redhat
# group: xixi
# flags: sst
user::rw-
user:xixi:rwx
group::r--
mask::rwx
other::r--
x 删除扩展权限列表
-b 清空扩展权限(扩展权限的表示符)
[root@www ~]# setfacl -x u:xixi: aaa
[root@www ~]# ll aaa
-rwSr-Sr-T+ 1 redhat xixi 5 Dec 4 14:30 aaa
[root@www ~]# getfacl aaa
# file: aaa
# owner: redhat
# group: xixi
# flags: sst
user::rw-
group::r--
mask::r-- (扩展权限标识)
other::r--
[root@www ~]# setfacl -b aaa
[root@www ~]# ll aaa
-rwSr-Sr-T. 1 redhat xixi 5 Dec 4 14:30 aaa