4.Linux用户组和权限管理
4. Linux用户组和权限管理
4.1 Linux用户和组介绍
4.1.1 用户和组的关系
-
查看用户所属组
$ id snowing # uid:用户 gid:用户主组 groups:用户主组及其附属组 uid=1000(snowing) gid=1000(snowing) groups=1000(snowing),4(adm),24(cdrom),27(sudo) #一个用户必须有一个主组,且只能有一个 $ id -g snowing 1000 $ id -gn snowing snowing #一个用户可以有多个附属组,也可以没有附属组 $ id -G snowing 1000 4 24 27 30 46 122 135 136 $ groups snowing snowing : snowing adm cdrom sudo dip plugdev lpadmin lxd sambashare
4.1.2 用户和组相关配置文件
-
查看配置文件帮助文档
# (报错:No manual entry for group) 安装man-pages包 $ yum install -y man-pages # (报错:nothing appropriate) 刷新man缓存 $ mandb # whatis FILENAME : 查询FILE的man章节序号 passwd (1) - change user password passwd (5) - the password file # /etc/passwd $ man 5 passwd # /etc/shadow $ man 5 shadow # /etc/group $ man 5 group # /etc/gshadow $ man 5 gshadow
-
/etc/passwd
用户文件# name:password:UID:GID:comment:directory:shell $ getent passwd sara sara:x:1002:1002:saraName:/home/sara:/bin/bash $ cat /etc/passwd demo:x:1001:1001::/home/demo:/bin/bash
-
/etc/shadow
密码管理文件# login name : encrypted password : date of last password change : minimum password age : maximum password age: # password warning period : password inactivity period : account expiration date : reserved field $ getent shadow sara sara:!!:19583:0:99999:7::: # 用户名:密码:上次改口令时间:最小改口令间隔:最大改口令间隔:口令到期前几天预警:口令到期后几天禁用:口令到期日期 # cat /etc/shadow demo:$6$rN.m2Oca$UwSheU52AhJxbed6VeVKjTP.5H4DGXxWTovGb6.dJJ4TNqLUIV5defcW5/y6SEldSN7NgJaTy.xpHCVkK54D40:19549:0:99999:7:::
-
/etc/group
组文件# group_name : password : GID : user_list $ getent group Sara Sara:x:1002: # 组名:密码占位符:组ID:组成员 $ cat /etc/group demo:x:1001:demo,sara
-
/etc/gshadow
组密码管理文件# group name : encrypted password : administrators : members $ getent gshadow Sara Sara:!:: # 组名:组密码占位符:组管理员:组成员 $ cat /etc/gshadow demo:!::demo,sara
4.1.4 默认配置文件模板
-
执行
useradd LOGIN
命令所参考的模板配置文件# useradd defaults file $ cat /etc/default/useradd GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes # home directory 默认包含文件来源 $ ls -a /etc/skel . .. .bash_logout .bash_profile .bashrc
-
/etc/shadow
文件模板# shadow password suite configuration # 用户shadow配置文件模板 cat /etc/login.defs
4.2 Linux用户和组管理
4.2.1 Linux组管理
-
groupadd
新增组# 命令格式 groupadd [options] GROUP # -g, --gid GID 新增时指定gid $ groupadd -g 1001 sara # -r, --system 创建系统账户 $ groupadd -r groupName
-
groupmod
修改组# 命令格式 groupmod [options] GROUP # -g, --gid GID 修改组id $ groupmod -g 2000 groupName # -n, --new-name NEW_GROUP 修改组名 $ groupmod -n NewGroupName groupName # 查看 $ getent group NewGroupName NewGroupName:x:2000:
-
groupdel
删除组# 命令格式 groupdel [options] GROUP # 默认删除,如果是用户主组则无法删除 $ groupdel NewGroupName groupdel: cannot remove the primary group of user 'test' # -f, --force 强制删除,即使时用户主组也可以删除(centos7没有该选项) $ groupdel -f NewGroupName
4.2.2 Linux用户管理
-
useradd
新增用户# 命令格式 useradd [options] LOGIN # 常用选项 -r, --system create a system account -u, --uid UID user ID of the new account -g, --gid GROUP name or ID of the primary group of the new account -G, --groups GROUPS list of supplementary groups of the new account -c, --comment COMMENT GECOS field of the new account -d, --home-dir HOME_DIR home directory of the new account -s, --shell SHELL login shell of the new account # 创建非系统用户 $ useradd -u 1002 -g Sara -G demo -c "saraName" -d /home/sara -s /bin/bash sara # 创建系统用户 useradd -r -u 48 -g apache -c "Apache" -d /var/www -s /sbin/nologin apache
-
usermod
修改用户# 命令格式 usermod [options] LOGIN # 常用选项,参考useradd的选项(没有-r选项) usermod -u -g -G -c -d -s userName # 修改uid $ usermod -u 1007 userName
-
userdel
删除用户# 命令格式 $ userdel [options] LOGIN # 默认删除,保留家目录和邮箱 $ userdel userName # -f, --force 强制删除,正在登录的用户也可以删除 $ userdel -f loginUser # -r, --remove 同时删除家目录和邮箱 $ userdel -r userName
4.2.3 Linux密码管理
-
passwd
修改密码# 命令格式 passwd [options] [LOGIN] # 默认交互式修改 $ passwd userName # 非交互式修改(centos7) $ echo "123456" | passwd --stdin userName $ echo "userName:123456" | chpasswd # 非交互式更改(ubuntu,密码不能太简单) $ sudo su - root $ echo "userName:12345678" | chpasswd
-
chage
命令修改/etc/shadow文件(密码策略文件)# 命令格式 chage [options] LOGIN # 默认交互式修改 [root@localhost ~]# chage userName Minimum Password Age [0]: 7 Maximum Password Age [99999]: 500 Last Password Change (YYYY-MM-DD) [2023-08-14]: 2023-08-21 Password Expiration Warning [7]: 3 Password Inactive [-1]: 5 Account Expiration Date (YYYY-MM-DD) [-1]: 2024-08-01 # 查看修改结果 $ getent shadow userName userName:!!:19590:7:500:3:5:19936: # 使用选项修改 $ chage -m 0 -M 99999 -w 7 -I -1 -E -1 userName # 查看修改结果 $ getent shadow userName userName:!!:19590:0:99999:7::: # 强制下次登录时修改密码 $ chage -d 0 userName
-
su
切换用户# 命令格式 su [options] [-] LOGIN # Change UID and GID to userName (不切换工作环境) $ su userName # -, -l, --login make the shell a login shell (切换工作环境) $ su - userName $ su -l userName # -c `CMD` 以指定用户指定单条命令 $ su - root -c `cat /etc/sudoers`
4.2.4 Linux用户查看
-
id
查看用户信息# 命令格式 id [OPTION] LOGIN # 默认显示uid gid groups $ id demo uid=1000(demo) gid=1001(zookeeper) groups=1001(zookeeper),1002(docker) $ id -u demo 1000 $ id -g demo 1001 $ id -G demo 1001 1002 # -n,显示名称,需要和其他选项组合使用,-un,-gn,-Gn $ id -un demo demo $ id -gn demo zookeeper $ id -Gn demo zookeeper docker
4.2.5 sudo权限
-
sudo权限管理
# 修改配置文件方式 $ vim /etc/sudoers # visudo命令方式 $ visudo ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL demo ALL=(ALL) NOPASSWD: ALL
4.3 Linux权限管理
4.3.1 Linux文件权限介绍
-
[ugoa...]
说明u : the user who owns it g : other users in the file's group o : other users not in the file's group a : all users
-
[rwxXst...]
说明r : read, ( w : write ) , ( x : execute or search for directories ) X : execute/search only if the file is a directory or already has execute permission for some user s : set user or group ID on execution t : restricted deletion flag or sticky bit # 对于文件夹而言 r : ls w : touch , rm , mkdir , rmdir x : cd
-
OCTAL-MODE
说明# OCTAL-MODE 通常由3个8进制数字组成(实际有4个) the first digit :the user who owns the file the second digit:users in the file's group the third digit :other users not in the file's group # 每个8进制是由3位2进制组成,每位依次代表rwx read (4), write (2), and execute (1) # 此处的[111][101][100] 不妨用 [421][401][400]表示,便于理解 754 <---> [421][401][400] <---> [rwx][r-x][r--] ugo <---> uuu ggg ooo <---> uuu ggg ooo
4.3.2 符号模式 (a symbolic mode)
-
chmod
符号模式管理权限# 命令格式 chmod [OPTION]... MODE[,MODE]... FILE... ######### 模式:[ugoa...][[-+=][rwxXst...]...] chmod [ugoa][-+=][rwxXst] FILE $ chmod g+wx fileNAME # [ugoa...],对谁赋权 a single letter from the set ugoa # [rwxXst...],赋什么权 either zero or more letters from the set rwxXst ########## 参数 ################ # -R, --recursive 递归添加,为所有用户(a)只对文件夹添加执行权限(X) $ chmod -R a+X dirName
4.3.3 八进制数字模式 (an octal number)
-
chmod
数字模式管理权限# 命令格式 chmod [OPTION]... OCTAL-MODE FILE... ############ 模式 : OCTAL-MODE #################### chmod OCTAL-MODE fileName # 赋权 754 $ chmod 754 fileName # 赋权 754 含义分析 chmod [421][401][400] fileName chmod [rwx][r-x][r--] fileName ############ 参数 #################### # -R, --recursive 递归添加 $ chmod -R 754 dirName
4.3.3 修改文件所属用户及组
-
chown
修改文件所属用户和组# 命令格式 chown [OPTION]... [OWNER][:[GROUP]] FILE... # 只修改用户 chown sara fileName # 修改用户和组 chown sara:SaraGroup fileName # -R, --recursive 递归修改 chown -R sara:SaraGroup dirName
-
chgrp
只修改文件所属组# 命令格式 chgrp [OPTION]... GROUP FILE... # -R, --recursive 递归修改 chgrp SaraGroup dirName
4.4 Linux默认文件权限和特殊文件权限
4.4.1 Linux文件默认权限
-
umask
命令与文件默认权限的计算################## 新建文件默认权限:666-umask[奇数位加1] ################## # umask=022,666-022=644 [root@localhost ~]# umask 022 # 666-umask=644,没有奇数位,ugo=644 [root@localhost ~]# touch a.txt [root@localhost ~]# ll -rw-r--r-- 1 root root 0 Aug 22 21:34 a.txt # umask=035,666-035=631 [root@localhost ~]# umask 035 # 666-umask=631,存在奇数位,ugo=631(奇数位+1)=642 [root@localhost ~]# touch b.txt [root@localhost ~]# ll -rw-r---w- 1 root root 0 Aug 22 22:00 b.txt ################## 新建文件夹默认权限:777-umask ######################### # umask=022,777-022=755 [root@localhost ~]# umask 022 # 777-umask=755,所以 ugo=755 [root@localhost ~]# mkdir dirName [root@localhost ~]# ll drwxr-xr-x 2 root root 4096 Aug 22 22:09 dirName
-
umask
设置与查看权限# 命令格式 umask [-p] [-S] [mode] # 查看umask权限 (默认root为022,普通用户为002) [root@localhost ~]# umask 0022 # 临时设置umask权限,当前shell有效 $ umask 022 # 永久设置umask权限,修改.bashrc文件,添加umask 022 echo "umask 022" >> .bashrc
4.4.2 Linux特殊文件权限
-
suid
权限# suid 权限说明 set user ID (4) : 用户LOGIN临时以文件所有者身份(UID)执行该二进制文件(可执行文件) # LOGIN用户执行passwd时,临时以passwd文件所属用户root的身份执行 [root@localhost ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd # 新增suid权限,两种方式 chmod u+s binFileName chmod 4xxx binFileName # 删除suid权限,三种方式 chmod u-s binFileName chmod 0xxx binFileName
-
sgid
权限# sgid 权限说明,作用在可执行文件上 set group ID (2) : 用户LOGIN临时以文件所属组的身份(GID)执行该二进制文件(可执行文件) # sgid 权限说明,作用在目录上 set group ID (2) : 在该目录下新建文件的所属组,为该文件夹的所属组(GID)相同,而不是与LOGIN相同 # 新增suid权限,两种方式 chmod g+s binFileName chmod 2xxx binFileName # 删除suid权限,三种方式 chmod g-s binFileName chmod 0xxx binFileName
-
sticky
权限# sticky权限说明,作用于目录上 sticky (1):restricted deletion,有限制的删除 # 有限制的删除,只能删除各自所属的文件 [root@localhost ~]# ll -d /tmp drwxrwxrwt. 7 root root 4096 Aug 22 21:19 /tmp # 新增suid权限,两种方式 chmod o+t dirName chmod 1xxx dirName # 删除suid权限,三种方式 chmod o-t dirName chmod 0xxx dirName
4.4.3 Linux文件特殊属性
-
lsattr
查看特殊属性# 查看文件夹特殊属性 [root@localhost ~]# lsattr fileName -----a-------e-- fileName # 查看文件特殊属性 [root@localhost ~]# lsattr -d dirName ----i--------e-- dirName
-
chattr
新增和删除特殊权限# 查看特殊属性 lsattr fileName # i,immutable 不可变属性(不能删除,重命名,修改) # 新增与删除该属性 $ chattr +i fileName $ chattr -i fileName # a,append only 只能追加 属性 # 新增与删除该属性 $ chattr +a fileName $ chattr -a fileName