Linux运维-用户,组和权限

1、用户和组的管理命令

  • 用户管理命令
    • useradd
    • usermod
    • userdel
  • 组账号维护命令
    • groupadd
    • groupmod
    • groupdel

1.1 用户创建 useradd

  • useradd 命令可以创建新的 Linux 用户
  • 格式:
useradd [options] LOGIN
  • 常见选项

-u    UID
-o    配合-u 选项,不检查UID的唯一性
-g    GID 致命用户所属基本组,可为组名,也可以是GID
-c    "COMMENT"    用户的注册信息
-d    HOME_DIE 以指定的路径(不存在)为家目录
-s    SHELL 致命用户的默认shell程序,可用列表在/etc/shells 文件中
-G    GROUP1[,GROUP2...] 为用户指明附加组,组必须事先存在
-N    不创建私用组做主组,使用users组做主组 
-r    创建系统用户,CentOS6 之前:ID<500,CentOS7 以后 ID<1000
-m    创建家目录,用于系统用户
-M    不创建家目录,用于非系统用户
-P    指定加密的密码

  • 范例:创建系统用户 apache ,UID为48、家目录为 /var/www/ 、基本组为 apache、添加用户注册信息Apache,不允许用户登录
useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache
  • useradd 命令默认值由 /etc/default/useradd 文件定义而来
# cat /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1		#对应/etc/shadow文件第7列,即用户密码过期后的账号锁定宽限期,-1表示不锁定
EXPIRE=			#对应/etc/shadow文件第8列,即用户账号的有效期
SHELL=/bin/bash
SKEL=/etc/skel	#用于生成新建用户家目录的模板文件
CREATE_MAIL_SPOOL=yes
  • 显示或更改默认设置
useradd -D
useradd -D -s SHELL
useradd -D -b BASE_DIR
useradd -D -g GROUP
  • 创建用户家目录环境变量模板
    • 新建用户家目录的文件模板保存在 /etc/skel/ 目录中
    • 如果想在新建用户的家目录中自动添加文件或环境变量,可以在该目录下手动添加
# ls /etc/skel/ -a
.  ..  .bash_logout  .bash_profile  .bashrc

1.2 删除用户

  • userdel 可以删除 Linux 用户
  • 格式:
userdel [OPTION]... Login
  • 常见选项:

-f,    --force        强制
-r,    --remove    删除用户家目录和邮箱

1.3 查看用户相关ID信息

  • id 命令可以查看用户 UID,GID等信息
  • 格式:
id [OPTION]...[USER]
  • 常见选项:

-u:显示UID
-g:显示GID
-G:显示用户所属的组ID
-n:显示名称,需配合ugG使用

1.4 用户属性修改 usermod

  • usermod 命令可以修改用户属性
  • 格式:
usermod [OPTION] login
  • 常见选项

-u    UID:    新UID
-g    GID:    新主组
-G    GROUP1[,GROUP2,...GROUPN]:新附加组,原来的附加组会被覆盖;若保留原有,则要同时使用 -a 选项
-s    SHELL:    新的默认SHELL
-c    'COMMENT': 新注释信息
-d    HOME:    新加目录不会自动创建,若要创建新家目录并移动原家目录数据,需同时使用 -m 选项
-l    login_name:    新的名字
-L:            锁定指定用户,在/etc/shadow 密码栏增加 !
-U:            解锁指定用户,将/etc/shadow 密码栏的 !去掉
-e    YYYY-MM-DD:    致命用户账号过期日期
-f    INACTIVE:    设定非活动期限,即宽限期

  • 范例:给用户添加附加组
# groupadd g1
# groupadd g2
# groupadd g3

# tail /etc/group
abrt:x:173:
sshd:x:74:
postdrop:x:90:
postfix:x:89:
tcpdump:x:72:
screen:x:84:
wentao:x:1000:
g1:x:1001:
g2:x:1002:
g3:x:1003:

# usermod -G g1,g2 wentao

# id wentao
uid=1000(wentao) gid=1000(wentao) groups=1000(wentao),1001(g1),1002(g2)

# groupmems -l -g g1
wentao 

# groupmems -l -g g2
wentao

1.5 切换用户 su

  • 切换用户命令 su 即 switch user, 该命令可以切换用户身份,并且制定用户身份执行命令
  • 格式:
su [OPTIONS] [-] [USER [ARGS...]]
  • 常见选项:

-l        --login        su -l [username]        相当于 su - username

-c       --comand   <command>              pass a single command to the shell with -c

  • 切换用户的方式:
    • su username:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
    • su - username:登录式切换,会读取目标用户的配置文件,切换至用户家目录即完全切换。
  • 注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要在用 su 切换至旧用户,否则会生成多的 bash 子进程,环境可能会换乱
  • 说明:root su 至其他用户无需尼玛;非 root 用户切换时需要密码
  • 用其他用户身份执行命令,而不切换到该用户:
su [-] username -c 'COMMAND'

1.6 设置密码 passwd

  • passwd 命令可以修改用户密码
  • 格式:
passwd [OPTIONS] username
  • 常用选项:

-d:        删除指定用户密码

-l:         锁定指定用户

-u:        解锁指定用户

-e:        强制用户下次登录修改密码

-f:         强制操作

-n:        mindays 指定最短使用期限

-x:        maxdays 最大使用期限

-w:       warndays 提前多少天开始警告

-i:         inactivedays 非活动期限

--stdin: 从标准输入接受用户密码(非交互式设置密码),Ubuntu 无此选项

  • 范例:非交互式修改用户密码 --stdin
  • --stdin 只适用于红帽系列的 Linux 版本
echo '123456' | passwd --stdin wentao
  • 而其他版本的 Linux 系统例如 Ubuntu 则只能使用 echo -e 进行非交互式修改密码
echo -e '123456\n123456' | passwd wentao

1.7 修改用户密码策略 chage

  • chage 可以修改用户密码策略
  • 格式:
chage [OPTION]... LOGIN
  • 常见选项:

-d        LAST_DAY                                #指定密码最后修改的日期

-m       --mindays MIN_DAYS               #修改密码的最小天数        

-M       --maxdays MAX_DAYS             #修改密码的最大天数

-W      --warndays WARN_DAYS          #密码过期,开始警告天数

-I        --inactive INACTIVE                   #密码过期后的宽限期

-E      --expiredate EXPIRE_DATE       #用户的有效期,0表示立即过期,-1表示永不过期

-l       显示密码策略          

  • 范例:1

  •  范例:2

 1.8 创建组

  • groupadd 实现创建组
  • 格式:
groupadd [OPTION]... group_name
  • 常见选项:

-g        GID        指明GID号:[GID_MIN, GID_MAX]

-r         创建系统组,CentOS6之前:ID<500, CentOS7以后:ID<1000

  • 范例:
groupadd -g 48 -r apache

1.9 修改组 groupmod

  • groupmod 组属性修改
  • 格式:
groupmod [OPTION]... group
  • 常见选项:

-n        group_name:新名字

-g        GID:新的GID

1.10 删除组

  • groupdel 可以删除组
  • 格式:
groupdel [OPTIONS] GROUP
  • 常见选项

-f        --force        强制删除,即使是用户的主组也可以强制删除,但会导致无主组的用户不可用并且无法登陆

1.11 更改组成员和密码 gpasswd

  • gpasswd 命令,可以更改组密码,也可以修改附加组的成员关系
  • 格式:
gpasswd [OPTION] GROUP
  • 常见选项

-a        user        将user添加至指定组中

-d        user        从指定附加组中移除用户user

-A        user1,user2,...        设置有管理权限的用户列表

  • 范例1:添加组成员
# groupadd admins

# gpasswd -a wentao admins
Adding user wentao to group admins

# id wentao
uid=1000(wentao) gid=1000(wentao) groups=1000(wentao),1001(g1),1002(g2),1004(admins)

# groups wentao
wentao : wentao g1 g2 admins

# getent group admins
admins:x:1004:wentao
  • 范例2:删除组成员
# gpasswd -d wentao admins
Removing user wentao from group admins

# groups wentao
wentao : wentao g1 g2

# id wentao
uid=1000(wentao) gid=1000(wentao) groups=1000(wentao),1001(g1),1002(g2)

# getent group admins
admins:x:1004:

1.12 更改和查看组成员 groupmems, groups

  • groupmems 命令可以管理附加组的成员关系
  • 格式:

groupmems [options] [action]

  • 常见选项

-g,--group grouname        #更改为指定组(只有root)

-a,--add username           #指定用户加入组

-d,--delete username       #从组中删除用户

-p,--purge                         #从组中清楚所有成员

-l,--list

  • groups 可查看用户组关系
  • 格式:

groups [OPTION] [USERNAME]

  • 范例:
# groupmems -a wentao -g admins

# groupmems -a Demi -g admins

# groupmems -a Jimmy -g admins

# groupmems -l -g admins
wentao  Demi  Jimmy 

# groupmems -d Jimmy -g admins

# groupmems -l -g admins
wentao  Demi 

# groupmems -p -g admins

# groupmems -l -g admins

2、文件权限管理

  • 程序访问文件时的权限,取决于此程序的发起者
    • 进程的发起者,同文件的属主:则应用文件属主权限
    • 进程的发起者,属于文件属组:则应用文件属组权限
    • 应用文件“其他权限”

 2.1 文件所有者和所属组属性操作

2.1.1 设置文件的所有者 chown

  • chown 命令可以修改文件的属主,也可以修改文件属组
  • 格式:
chown [OPTION]...[OWNER][:[GROUP]] FILE...
chown [OPTION]...--reference=RFILE FILE...
  • 用法说明:

OWNER                                #只修改所有者

OWNER:GROUP                  #同时修改所有者和属组

:GROUP                                #只修改属组,冒号也可用 "." 替换

--reference=RFILE                #参考指定的属性,来修改

-R                                          #递归

  • 范例
# 修改文件所有者
# chown wentao a.txt

# ll a.txt 
-rw-r--r-- 1 wentao root 0 Oct 26 14:47 a.txt

# 修改文件所属组
# chown .g1 a.txt

# ll a.txt 
-rw-r--r-- 1 wentao g1 0 Oct 26 14:47 a.txt

#递归
# touch data/{a,b}.txt

# ll data/
total 0
-rw-r--r-- 1 root root 0 Oct 26 15:21 a.txt
-rw-r--r-- 1 root root 0 Oct 26 15:21 b.txt

# chown -R wentao.bin data

# ll data/
total 0
-rw-r--r-- 1 wentao bin 0 Oct 26 15:21 a.txt
-rw-r--r-- 1 wentao bin 0 Oct 26 15:21 b.txt

# ll
total 0
drwxr-xr-x 2 wentao bin 32 Oct 26 15:21 data

2.1.2 设置文件的属组信息 chgrp

  • chgrp 命令可以只修改文件的属组
  • 格式:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
  • -R 递归

2.2 文件权限

2.2.1 文件权限说明

  • 文件权限主要针对三类对象进行定义
    • owner        属主,u
    • group         属组,g
    • other          其他,o
  • 注意:

用户最终权限,是从左向右进行顺序匹配。即:所有者,所属组,其他人。一旦匹配完成,权限立即生效。 

r 和 w 权限对 root 用户无效

只要 所有者,所属组 或 other 三者之一 有 x 权限,root 就可以执行      

  • 每个文件针对每类访问者都定义了三种常用权限
  • 每个文件针对每类访问者都定义了三种权限

r        readable        4

w       writable         2

x        excutable      1

  • 对文件的权限:

r                可使用文件查看类工具,比如:cat,可以获取其内容

w               可修改其内容,文件的是否被删除和文件的权限无关

x                可以把此类文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)

文件权限常见组合

---        0

r--        4

r-x       5

rw-       6

rwx      7

  • 对目录的权限

r        可以使用 ls 查看此目录中文件名列表,但无法看到文件的属性 meta 信息,包括inode号,不能查看文件的内容

w        可再次目录中创建文件,也可删除此目录中的文件,而和此被删除的文件权限无关

x         可以 cd 进入此目录,可以使用 ls -l file 或 stat file 查看此目录中指定文件的元数据

目录权限常见组合

---        不能访问目录

r-x        只读目录

rwx      可读也可写目录

  • 数学法的权限
权限项文件类型读       执行执行执行
字符表示(d|l|c|s|p)rwxrwxrwx
数字表示421421421
权限分配文件所有者文件所属组用户其他用户
  • 八进制数字

---  000  0

--x  001  1

-w-  010  2

-wx  011  3

r--   100  4

r-x   101  5

rw-  110  6

rwx  111  7

  • 例如:

rw-r-----        640

rwxr-xr-x      755  

2.2.2 修改文件权限 chmod

  • 格式:

chmod [OPTION]...MODE[,MODE]...FILE

chmod [OPTION]...OCTAL-MODE FILE...

#参考 RFILE 文件的权限,将 FILE 的修改为同 RFILE

chmod [OPTION]... --reference=RFILE FILE...

  • 说明:模式法格式

MODE:who opt permission

who:u,g,o,a

opt:+,-,=

permission:r,w,x

修改制定一类用户的所有权限

u=        g=         o=        ug=        a=        u=,g=

修改制定一类用户某个或某几个权限

u+        u-        g+        g-        o+        o-        a+        a-         + -

-R:递归修改权限

2.3 新建文件和目录的默认权限

  • umask 的值可以用来保留在创建文件权限
  • 查看 umask
umask
# 模式方式显示
umask -S
# 输出可被调用
umask -p
# umask
0022

# umask -S
u=rwx,g=rx,o=rx

# umask -p
umask 0022
  • 默认新建目录的权限是:755
  • 默认新建文件的权限是:644
  • 实现方式:
    • 新建文件的默认权限:666 - umask,如果所得结果某位存在执行(奇数)权限,则将权限+1,没有执行权限(偶数)则不变
    • 新建目录的默认权限:777 - umask
  • root 用户的 umask 是 022,那么:
    • root 用户 创建文件 就是 666 - 022 = 644 也就是:rw- r-- r--
    • root 用户 创建目录 就是 777 - 022 = 755 也就是:rwx r-x r-x
# mkdir dir

# touch f1.txt

# ll
total 0
drwxr-xr-x 2 root root 6 Oct 28 15:24 dir
-rw-r--r-- 1 root root 0 Oct 28 15:24 f1.txt
  • 修改 umask
umask #
  • 范例
# umask 123

# umask
0123

# mkdir dir1

# touch f2.txt

# ll
total 0
drw-r-xr-- 2 root root 6 Oct 28 17:27 dir1
-rw-r--r-- 1 root root 0 Oct 28 17:27 f2.txt
  • 以上范例将root 的umask权限修改成了123,那么
    • root创建目录就是 777-123=654 也就是 rw- r-x r--
    • root创建文件就是 666-123=543 也就应该是 r-x r-- -wx 结果却是 rw- r-- r-- 这是为什么呢?
  • 注:文件的执行是危险的!
    • 如果文件没有执行权限,root 也无法直接执行
    • 基于安全考虑,默认新建的文件不允许有执行权限
    • 所以 umask 规则规定,任何用户创建 文件只要出现执行权限(基数),就必须 +1
    • 所以 root 的umask 是123的情况下 666-123 最终的出来的结果是 644 也就是 rw- r-- r--
  • 持久保存 umask
    • 全局设置:/etc/bashrc
    • 用户设置:~/.bashrc

2.3.1 为什么root的umask值最大?

  • root 用户的 umask 是022
  • 普通用户的 umask 是002
  • 那么为什么 root 用户的 umask 值最大?
    • 因为用户的 umask 值越大,它创建的文件权限越小,相对来说文件的安全性就越高。
    • 相对于普通用户来说 root 的文件更重要,所以root创建的文件权限就要更小一些。

2.4 Linux文件系统上的特殊权限

  • 前面介绍了三种常见的权限:r,w,x 还有三种特殊权限: SUID,SGID,Sticky
  • 特殊权限
    • SUID 作用于二进制可执行文件上,用户将继承此程序所有者的权限
    • SGID 
      • 作用于二进制可执行文件上,用户将继承此程序所有组的权限
      • 作用于目录上,此目录中新建的文件所属组将自动从此目录继承
    • STICKY 粘滞位作用于目录上,此目录中的文件只能由所有者自己来删除

2.4.1 特殊权限SUID

前提:进程有属主和属组;文件有属主和属组。

  • 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
  • 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
  • 进程访问文件时的权限,取决于进程的发起者

二进制的可执行文件上SUID权限功能:

  • 任何一个可执行文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
  • 启动为进程之后,其进程的属主为原程序文件的属主
  • SUID 只对二进制可执行程序有效
  • SUID 设置在目录上无意义

SUID权限设定:

chmod u+s FILE...
chmod 4xxx FILE
chmod u-s FILE...

范例:

# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 33424 Apr 20  2022 /usr/bin/passwd

2.4.2 特殊权限SGID

二进制可执行文件上SGID权限功能:

  • 任何一个可执行文件能不能启动为进程:取决于发起者对程序文件是否有执行权
  • 启动为进程之后,其进程的属组为原程序文件的属组

SGID权限设定:

chmod g+s FILE...
chmod 2xxx FILE
chmod g-s FILE...

2.4.3 特殊权限 Sticky 位

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权在目录设置 Sticky 位,只有文件的所有者或 root 可以删除该文件

Sticky 设置在文件上无意义

Sticky 权限设定

chmod o+t DIR...
chmod 1xxx DIR
chmod o-t DIR...

2.5 设定文件特殊属性

设置文件的特殊属性,可以访问 root 用户误操作删除或修改文件

  • 不能删除、改名、修改
chattr +i [file_name]
  • 只能追加内容,不能删除,改名
chattr +a [file_name]
  • 显示特定属性
lsattr
  • 范例:
# chattr +i a.txt

# lsattr a.txt
----i----------- a.txt

# echo helloworld > a.txt
-bash: a.txt: Permission denied

# mv b.txt a.txt
mv: cannot stat ‘b.txt’: No such file or directory

# rm -f a.txt
rm: cannot remove ‘a.txt’: Operation not permitted

2.6 ACL访问控制

setfacl 可设置ACL权限

getfacl 可查看设置的ACL权限

  • 格式:
setfacl -m u:<user_name>:- FILE
  • 范例:
# setfacl -m u:Jimmy:- a.txt

# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:Jimmy:---
group::r--
mask::r--
other::r--

-rw-r--r--+ 1 root root 0 Nov  2 16:24 a.txt

# 有ACL权限控制的文件在数字权限表示末尾有有 + 表示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值