Linux 账号管理与文件权限

账号管理

每个登陆的用户至少都会取得两个ID ,一个是用户ID(User ID ,简称 UID)、一个是群组ID(Group ID ,简称 GID)。

用户账号

跟用户账号有关的两个重要文件:

  • /etc/passwd 管理用户UID/GID等信息,每一行表示一个账号,“:”冒号分割分别表示以下含义:
    1. 账号名称
    2. 密码:早期字段,已废弃,默认“x”,密码已存到/etc/shadow文件更安全
    3. UID:账号ID,0(系统管理员 root)、1~999(系统账号,保留给系统使用)、1000~60000(可登陆账号,给一般用户使用)
    4. GID:群组ID,也称为初始群组(一个用户可以有多个群组)
    5. 说明信息:无重要用途,备注而已
    6. 主文件夹:用户的家目录,root的家目录是/root,其他用户的家目录默认在/home下
    7. Shell:用户登录使用的shell,默认是/bin/bash,无法登录的用户是/sbin/nologin
  • /etc/shadow 管理账号密码
    1. 账号名称:与/etc/passwd保持一致
    2. 密码:密文
    3. 其他字段多数与日期有关

相关命令

  • useradd :新增用户。
  • passwd :设置密码。所有用户都可以为自己设置密码,root可以给所有用户设置密码。
  • usermod :修改用户。
  • userdel :删除用户。选项 -r 连同用户的家目录一起删除。慎重操作,一般如果某个账号暂时不启用,可以将/etc/shadow里账号失效日期(第八个字段)设置为0即可,这样此账号相关数据都会保留下来。
  • id :查询某人或自己的相关账号信息(此命令非root用户也可以使用)
  • chsh :切换自己的shell(非root用户也可以用),需要先查下当前有效shell(cat /etc/shells)

useradd 命令,新增用户,选项与参数:

  • -u :后接UID,指定账号的UID
  • -g :后接GID,指定账号的初始群组(需已存在)
  • -G :后接群组名称,为账号加入其他群组(多群组)
  • -M :强制!不为用户创建家目录(系统账号默认值)
  • -m :强制!为用户创建家目录(一般账号默认值)
  • -c :账号备注,对应第五个字段
  • -d :后接目录,指定账号的家目录为指定目录
  • -r :创建一个系统账号,此账号的UID会有限制
  • -s :后接shell,指定账号的shell,默认是 /bin/bash(如果创建无需登录的用户,使用 /sbin/nologin)

usermod 命令,修改用户,选项与参数:

  • -c :修改备注说明,第五个字段
  • -d :修改家目录,第六个字段
  • -g :修改初始群组,第四个字段
  • -G :修改次要群组,实际修改的/etc/group文件对应群组
  • -a :与 -G 合用,可增加次要群组的支持,而非设置更改!
  • -l :修改账号名称,第一个字段
  • -s :修改用户shell,如/bin/sh
  • -u :修改账号UID
  • -L :暂时冻结账号,使其无法登录。实际修改的/etc/shadow的密码
  • -U :解冻账号
# 新建用户,默认创建的一般账号
useradd testuser

# 新建系统账号,此账号UID会小于1000,且无家目录
useradd -r testsys

# 查看新建用户的默认参数,其中GROUP不遵守,默认用户会新建一个自己的群组
useradd -D

# 修改用户
usermod -c "test user" testuser

# 查询某个用户信息
id testuser

# 查询自己的用户信息
id

# 查看所有有效shell
cat /etc/shells

# 切换用户shell
chsh -s /bin/bash

# 查看当前用户shell并切换
chsh

用户群组

跟群组有关的两个重要文件:

  • /etc/group 记录GID、群组名称等信息,每一行表示一个群组,“:”冒号分隔分别含义:
    1. 群组名称
    2. 群组密码:已废弃,默认“x”,密码已存到/etc/gshadow
    3. GID:群组ID,对应账号/etc/passwd中第四个字段
    4. 此群组支持的账号:一个账号可以加入多个群组,这里不含有初始群组的用户
  • /etc/gshadow 群组密码,此设置与群组管理员有关

有效群组(effective group)与初始群组(initial group)

  • 初始群组:/etc/passwd中账号的第四个字段GID即是初始群组。用户登录时会主动取得,同时不记录在/etc/group的第四个字段中。
  • 有效群组:通过groups命令查看当前用户的所有群组,其中第一个就是有效群组。在创建新文件时,文件的群组即是当前用户的有效群组!使用newgrp切换有效群组

相关命令

  • groups :查看当前用户的群组。首个为有效群组。
  • newgrp :切换有效群组。参数 群组名称,会取得一个新shell,返回原群组或shell,使用exit命令。
  • groupadd :新增群组。选项 -g GID 指定某个GID,-r 创建系统群组(GID小于1000)。
  • groupmod :修改群组。选项 -g GID 修改GID(不要随意修改,会造成系统资源错乱),-n 修改群组名称。
  • groupdel :删除群组。如果群组有用户使用则无法删除,需要先修改用户群组。
# 查看群组
groups

# 切换有效群组
newgrp docker

# 退出切换群组
exit

# 新增群组
groupadd testgroup

# 修改群组
groupmod -n newgroup testgroup

用户身份切换

系统中需要身份切换的原因:

  • 平时使用一般账号操作:为了系统安全,一般管理员进来不要用root直接操作日常管理。因root权限过大,避免输错一些严重指令。
  • 用较低权限启动系统服务:有些系统账号是用来进行程序执行的
  • 软件限制:有些客户端不允许root登录等

相关命令

  • su :身份切换。需要输入要切换用户的密码。
  • sudo :切换其他用户身份(通常是root)执行指令。只需输入自己的密码,不需要输入切换用户的密码。

su 命令,切换身份,选项与参数:

  • – :单纯使用 – 后接用户(若留空表示切换root),输入切换用户的密码
  • -m :使用目前的环境设置,而不读取新用户的配置文件
  • -c :仅进行一次指令,后接具体指令

sudo 命令,使用其他身份执行命令,选项与参数:

  • -u :后接切换的用户,若无此项表示root
  • -i :切换登录用户,不仅仅是执行一行命令
# 切换登录到root,需输入root密码
su -

# 切换登录到其他用户
su - testuser

# 使用root权限执行某项命令
sudo service nginx restart

# 切换登录到root,仅输入自己的密码
sudo -i

visudo 与 /etc/sudoers
当前用户是否使用sudo命令,跟/etc/sudoers配置文件有关。只有增加了某个用户的sudo权限,才可以使用sudo。使用visudo命令修改此文件。
配置参数含义:

  • 用户或群组:第一个字段,带”%“表示群组,否则用户
  • 登陆这来源主机名称:可以指定主机来源,ALL是全部,第二个字段的第一个ALL
  • 可切换的身份:可以切换什么身份,第二个字段的第二个ALL
  • 可下达的指令:能执行的命令,ALL是全部,第三个字段。若增加NOPASSWD:前缀表示sudo不需要输入密码
# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

其他相关命令

  • whoami :查看当前用户
  • w :查看目前已登录系统的用户
  • who :与w一样
  • last 或 lastlog :最近用户登录情况

文件权限

文件基础权限

file

  • r :读,数值 4
  • w :写,数值 2
  • x :执行,数值 1

目录与文件之权限意义
权限对文件的重要性

  • r(read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
  • w(write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
  • x(execute):该文件具有可以被系统执行的权限。

权限对目录的重要性

  • r(read contents in directory):表示具有读取目录结构清单的权限,可以查询该目录下的文件名数据;
  • w(modify contents of directory):创建新的文件与目录,删除已经存在的文件与目录,将已存在的文件或目录进行更名,搬移该目录内的文件、目录位置;
  • x(access directory):cd进入该目录的权限,使用者能否进入该目录成为工作目录的用途。

注意:

  • 要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给;
  • 能否读取到某个文件内容,跟该文件所在的目录权限也有关系 (目录至少需要有 x 的权限)。
  • Linux文件名的限制为:单一文件或目录的最大容许文件名为 255 个英文字符或 128 个中文字符。

相关命令

  • chgrp :改变文件所属群组。选项 -R 递归。
  • chown :改变文件拥有者。选项 -R 递归。
  • chmod :改变文件的权限, SUID, SGID, SBIT等等的特性。选项 -R 递归。
# 修改文件群组
chgrp -R users ./test

# 修改文件所有者
chown -R hoopan:users ./test

# 数字类型改变文件权限
chmod 777 .bashrc

# 符号类型改变文件权限
# | chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录 |
chmod u=rwx,go=rx .bashrc

默认权限与隐藏权限

默认权限
使用 umask 命令可以查看系统的默认权限。其作用主要是在于在新建文件或目录时给与固定权限。

  • 若使用者创建为“文件”则默认“没有可执行( x )权限”,亦即只有 rw 这两个项目,也就是最大为 666 分,默认权限如下: -rw-rw-rw-
  • 若使用者创建为“目录”,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分,默认权限如下: drwxrwxrwx

umask 是从默认值中扣减的分值,如 umask的默认设置为 0022,新建文件或目录时得到权限如下:

  • 创建文件时:(-rw-rw-rw-) – (—–w–w-) ==> -rw-r–r–
  • 创建目录时:(drwxrwxrwx) – (d—-w–w-) ==> drwxr-xr-x

文件隐藏属性
文件隐藏属性可以实现一些特殊功能,主要命令如下
chattr :设置文件隐藏属性。chattr [+-=][ASacdistu] 文件或目录名称

  • 常用选项:
    • + :增加某一个特殊参数,其他原本存在参数则不动。
    • – :移除某一个特殊参数,其他原本存在参数则不动。
    • \= :设置一定,且仅有后面接的参数
  • 常用的属性标记:
    • a :只允许在文件末尾追加数据,不允许覆盖文件内容。只有root 才能设置这属性
    • i :设置文件为不可变的,即不能被删除、修改或重命名。只有 root 能设置此属性
    • s :删除文件时安全删除其数据,防止恶意恢复数据。

lsattr :显示文件隐藏属性。选项如下:

  • a :显示隐藏文
  • d :接目录 仅列出目录本身属性
  • R :连同子目录的数据一并列出。

SUID, SGID, SBIT

文件除了上面的rwx权限,还有 st 特殊权限,实现特殊的功能。

SUID: 在文件拥有者的x权限上出现 s 标志,表示此文件有SUID权限,作用如下:

  • SUID 权限仅对二进制程序(binary program)有效;
  • 执行者对于该程序需要具有 x 的可执行权限;
  • 本权限仅在执行该程序的过程中有效 (run-time);
  • 执行者将具有该程序拥有者 (owner) 的权限。
    如 /bin/passwd 执行文件具有SUID,可以让用户设置自己的密码
    file

SGID: 当文件或目录的群组x权限有 s 标志,表示此文件或目录具有SGID权限,作用分别如下:

  • 文件的SGID权限作用
    • SGID 对二进制程序有用;
    • 程序执行者对于该程序来说,需具备 x 的权限;
    • 执行者在执行的过程中将会获得该程序群组的支持!
  • 目录的SGID权限作用
    • 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
    • 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
    • 用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。

SBIT: 当目录的其他人x权限有 t 标志,表示此目录有SBIT权限,仅针对目录有效!作用如下:

  • 当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;
  • 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件。
    /tmp 目录就具有SBIT权限。

权限设置:在原有权限的三位数字前,增加一位设置此权限

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT
# 文件增加SUID权限
chmod 4755 test

# 文件增加SUID/SGID/SBIT权限
chmod 7755 test

# 若原文件无x可执行权限,会出现大写S T空权限(无效果)
chmod 7666 test

# 使用符号设置
chmod u=rwxs,go=x test
chmod g+s,o+t test

ACL 权限

ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的read,write,execute 权限之外的细部权限设置。针对几个项目:

  • 使用者 (user):可以针对使用者来设置权限;
  • 群组 (group):针对群组为对象来设置其权限;
  • 默认属性 (mask):还可以针对在该目录下在创建新文件/目录时,规范新数据的默认权限。

传统的 Linux权限只能针对一个用户、一个群组及非此群组的其他人设置权限而已,无法针对单一用户或个人来设计权限。 而 ACL 就是为了要改变这个问题啊!

ACL需要文件系统支持,一般都是开启,可以使用命令 dmesg | grep -i acl 查看是否开启。

相关命令

  • getfacl :取得某个文件/目录的 ACL 设置项目。
  • setfacl :设置某个目录/文件的 ACL 规范。

setfacl 命令的选项与参数:
用法 setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名

  • -m :设置后续的 acl 参数给文件使用,不可与 -x 合用;
  • -x :删除后续的 acl 参数,不可与 -m 合用;
  • -b :移除“所有的” ACL 设置参数;
  • -k :移除“默认的” ACL 参数,关于所谓的“默认”参数于后续范例中介绍;
  • -R :递回设置 acl ,亦即包括次目录都会被设置起来;
  • -d :设置“默认 acl 参数”的意思!只对目录有效,在该目录新建的数据会引用此默认值
# 1. 针对特定使用者的方式:
# 设置规范:“ u:[使用者帐号列表]:[rwx] ”,例如针对 vbird1 的权限规范 rx :
setfacl -m u:vbird1:rx acl_test1

# 设置值中的 u 后面无使用者列表,代表设置该文件拥有者
setfacl -m u::rwx acl_test1

# 2. 针对特定群组的方式:
# 设置规范:“ g:[群组列表]:[rwx] ”,例如针对 mygroup1 的权限规范 rx :
setfacl -m g:mygroup1:rx acl_test1

# 3. 针对有效权限 mask 的设置方式:
# 设置规范:“ m:[rwx] ”,例如针对刚刚的文件规范为仅有 r :
# 使用者或群组所设置的权限必须要存在于 mask 的权限设置范围内才会生效,此即“有效权限 (effective permission)”
setfacl -m m:r acl_test1

# 4. 针对默认权限的设置方式:
# 设置规范:“ d:[ug]:使用者列表:[rwx] ”
# 设置后目录未来新增文件将继承此权限
setfacl -m d:u:myuser1:rx /srv/projecta

# 查看权限
getfacl acl_test1
未经作者允许,禁止转载。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇