鸟哥的 Linux 私房菜第14章-Linux账号关了与ACL权限设定 学习笔记

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

每一个档案都会有所谓的拥有者 ID 与拥有群组 ID


/etc/passwd 档案结构:

账号名称:密码:UID:GID:用户信息说明栏:家目录:Shell

密码:

密码(放到 /etc/shadow 中了。所以这里你会看到一个『 x 』)

UID范围:

0 (系统管理员)

1~499 (系统账号),1~99:由 distributions 自行建立的系统账号; 100~499:若用户有系统账号需求时,可以使用的账号 UID。

500~65535 (可登入账号)

用户信息说明栏:

这个字段基本上并没有什么重要用途,只是用来解释这个账号的意义而已!

Shell栏:

当用户登入系统后就会取得一个 Shell 来与系统的核心沟通以进行用户的操作任务。那为何预设 shell 会使用 bash 呢?就是在这个字段指定的啰!

有一个 shell 可以用来替代成让账号无法取得 shell 环境的登入动作!那就是 /sbin/nologin 这个东西!


/etc/shadow 档案结构

shadow 同样以『:』作为分隔符,如果数一数,会发现共有九个字段啊,这九个字段的用途是这样的:

账号名称:密码:最近更动密码的日期:密码不可被更动的天数(与第 3 字段相比):密码需要重新变更的天数(与第 3 字段相比):密码需要变更期限前的警告天数(与第 5 字段相比):密码过期后的账号宽限时间(密码失效日)(与第 5 字段相比):账号失效日期:保留


/etc/group 档案结构

组名:群组密码:GID:此群组支持的账号名称

群组密码: 通常不需要设定, 如果密码栏上面是『!』时,表示该群组不具有群组管理员


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

/etc/passwd 里面的第四栏有所谓的 GID ,那个 GID 就是所谓的『初始群组 ( initial group ) 』,当用户一登入系统,立刻就拥有这个群组的相关权限。

groups: 有效与支持群组的观察:

[dmtsai@www ~]$ groups

dmtsai users

第一个输出的群组即为有效群组 (effective group) 了。

newgrp: 有效群组的切换

想要切换的群组必须是你已经有支持的群组。举例来说, dmtsai 可以在 dmtsai/users 这两个群组间切换有效群组。

newgrp是另外以一个 shell 来提供这个功能的,因此如果你想要回到原本的环境中,请输入 exit 回到原本的 shell 喔!

加入一个群组有两个方式:

一是透过系统管理员 (root) 利用 usermod 帮你加入

二是以透过群组管理员以 gpasswd 帮你加入他所管理的群组中!


/etc/gshadow

组名:密码栏:群组管理员的账号:该群组的所属账号

第二个字段是密码栏, 如果密码栏上面是『!』时,表示该群组不具有群组管理员

不过,由于目前有类似 sudo 之类的工具, 所以这个群组管理员的功能已经很少使用了。


账号管理

useradd, 相关配置文件, passwd, usermod, userdel

[root@www ~]# useradd vbird1  #完全参考默认值建立一个用户,名称为 vbird1

[root@www ~]# useradd -u 700 -g users vbird2 #用 users 为初始群组,以及 uid 为 700 来建立一个名为 vbird2 的账号

[root@www ~]# useradd -r vbird3  #建立一个系统账号,名称为 vbird3

[root@www ~]# useradd -D  #useradd 的默认值

使用 useradd 这支程序在建立 Linux 上的账号时,至少会参考:

/etc/default/useradd
/etc/login.defs
/etc/skel/*


passwd

[root@www ~]# passwd vbird2  #请 root 给予 vbird2 密码

[vbird2@www ~]$ passwd <==后面没有加账号,就是改自己

新版的 passwd:

[root@www ~]# echo "abc543CC" | passwd --stdin vbird2  #使用 standard input 建立用户的密码#这个动作通常仅用在 shell script 的大量建立使用者账号当中!

[root@www ~]# passwd -S vbird2

# 上面说明密码建立时间 (2009-02-26)、0 最小天数、99999 变更天数、7 警告日数 # 与密码不会失效 (-1) 。

[root@www ~]# passwd -x 60 -i 10 vbird2  #管理 vbird2 的密码使具有 60 天变更、10 天密码失效的设定

[root@www ~]# passwd -l vbird2  #让 vbird2 的账号失效

[root@www ~]# passwd -u vbird2  #密码字段恢复正常


chage更详细的密码参数显示功能

[root@www ~]# chage -d 0 agetest  #此时此账号的密码建立时间会被改为 1970/1/1 ,这个账号被强制要求登录后必须要改密码!


useradd

(1)useradd -m username是最简单的方法,再在/home 目录下建立一个用户username;

(2)useradd -d 是在指定的目录下进行建立如:useradd -d /home/user -s /bin/sh username,

然后用语句:passwd username 就可以为新建的用户设置密码


usermod

微调 useradd 增加的使用者参数


userdel 

[root@www ~]# userdel [-r] username

-r :连同用户的家目录也一起删除

通常我们要移除一个账号的时候,你可以手动的将 /etc/passwd 与 /etc/shadow 里头的该账号取消即可!一般而言,如果该账号只是『暂时不启用』的话,那么将 /etc/shadow 里头账号失效日期 (第八字段) 设定为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来!


finger查阅很多用户相关的信息

[root@www ~]# finger [-s] username

选项与参数:

-s :仅列出用户的账号、全名、终端机代号与登入时间等等;

-m :列出与后面接的账号相同者,而不是利用部分比对 (包括全名部分)


chfn(change finger 的意思)

[root@www ~]# chfn [-foph] [账号名]


chsh(change shell 的简写)

[vbird1@www ~]$ chsh -l  #用 vbird1 的身份列出系统上所有合法的 shell

[vbird1@www ~]$ chsh -s /bin/csh  #指定 csh 为自己的 shell


id

id 这个指令则可以查询某人或自己的相关 UID/GID 等等的信息


groupadd

[root@www ~]# groupadd [-g gid] [-r] 组名

选项与参数:

-g :后面接某个特定的 GID ,用来直接给予某个 GID ~

-r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。


groupmod

[root@www ~]# groupmod [-g gid] [-n group_name] 群组名

选项与参数:

-g :修改既有的 GID 数字;

-n :修改既有的组名


groupdel

[root@www ~]# groupdel [groupname]


gpasswd:群组管理员功能

让某个群组具有一个管理员,这个群组管理员可以管理哪些账号可以加入/移出该群组!


ACL

ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限设定。ACL 可以针对单一使用者,单一档案或目录来进行 r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。

目前绝大部分的文件系统都有支持 ACL 的功能

察看你的文件系统是否支持 ACL 可以这样看:

[root@www ~]# mount

[root@www ~]# dumpe2fs -h /dev/hda2

Default mount options: user_xattr acl


[root@www ~]# mount -o remount,acl /  #如果你的系统默认不会帮你加上 acl,这样可以加入 acl 的支持

[root@www ~]# vi /etc/fstab LABEL=/1 / ext3 defaults,acl 1 1   #每次开机都生效


ACL 的设定技巧

getfacl:取得某个档案/目录的 ACL 设定项目;
setfacl:设定某个目录/档案的 ACL 规范。

setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名

选项与参数: -m :设定后续的 acl 参数给档案使用,不可与 -x 合用; -x :删除后续的 acl 参数,不可与 -m 合用; -b :移除所有的 ACL 设定参数; -k :移除预设的 ACL 参数,关于所谓的『预设』参数于后续范例中介绍; -R :递归设定 acl ,亦即包括次目录都会被设定起来; -d :设定『预设 acl 参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值


针对单一使用者的设定方式:

原-rw-r--r--

[root@www ~]# setfacl -m u:vbird1:rx acl_test1   #u:[使用者账号列表]:[rwx] 』,例如针对vbird1 的权限规范 rx

新-rw-r-xr--+


[root@www ~]# setfacl -m u::rwx acl_test1  #无使用者列表,代表设定该档案拥有者

新-rwxr-xr--+


[root@www ~]# getfacl filename

选项与参数: getfacl 的选项几乎与 setfacl 相同!

[root@www ~]# getfacl acl_test1   #请列出刚刚我们设定的 acl_test1 的权限内容


针对特定群组的方式:

[root@www ~]# setfacl -m g:mygroup1:rx acl_test1   #设定规范:『 g:[群组列表]:[rwx] 』


那个 mask 是什么东西啊?其实他有点像是『有效权限』的意思!他的意义是: 使用者或群组所设定的权限必须要存在于 mask 的权限设定范围内才会生效

针对有效权限 mask 的设定方式:

[root@www ~]# setfacl -m m:r acl_test1  #设定规范:『 m:[rwx] 』,通常鸟哥都是将 mask 设定为 rwx


让 acl 在目录底下的数据都有继承的功能,针对预设权限的设定方式:

[root@www ~]# setfacl -m d:u:myuser1:rx /srv/projecta  # 设定规范:『 d:[ug]:使用者列表:[rwx] 』

如果想要让 ACL 的属性全部消失又要如何处理?透过『 setfacl -b 檔名 』即可。


系统平日操作的好习惯:

尽量以一般身份使用者来操作 Linux 的日常作业!等到需要设定系统环境时, 才变换身份成为 root,避免作错一些严重的指令,例如恐怖的『 rm -rf / 』

例来说, Linux 主机上面的一套软件,名称为 apache ,我们可以额外建立一个名为 apache 的使用者来启动 apache 啊,如此一来,如果这个程序被攻破,至少系统还不至于就损毁了

在远古时代的 telnet 程序中,该程序默认是不许使用 root 的身份登入

ssh 也可以设定拒绝 root登入


转为 root 的身份:

以『 su - 』直接将身份变成 root 即可,但是这个指令却需要 root 的密码

以『 sudo 指令 』执行 root 的指令串,由于 sudo 需要事先设定妥当,且 sudo 需要输入用户自己的密码, 因此多人共管同一部主机时, sudo 要比 su 来的好喔!至少 root 密码不会流出去!


su

[root@www ~]# su [-lm] [-c 指令] [username]

选项与参数: - :单纯使用 - 如『 su - 』代表使用 login-shell 的变量档案读取方式来登入系统; 若使用者名称没有加上去,则代表切换为 root 的身份。 -l :与 - 类似,但后面需要加欲切换的使用者账号!也是 login-shell 的方式。 -m :-m 与 -p 是一样的,表示『使用目前的环境设定,而不读取新使用者的配置文件』 -c :仅进行一次指令,所以 -c 后面可以加上指令喔!

这个 su 的用法当中,有没有加上那个减号『 - 』差很多喔! 因为涉及 login-shell 与 non-login shell 的变量读取方法。

如果仅想要执行一次 root 的指令,可以利用『 su - -c "指令串" 』的方式来处理;

使用 root 切换成为任何使用者时,并不需要输入新用户的密码;


sudo

[root@www ~]# sudo [-b] [-u 新使用者账号]

选项与参数: -b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响 -u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。

[root@www ~]# sudo -u sshd touch /tmp/mysshd   #以 sshd 的身份在 /tmp 底下建立一个名为 mysshd 的档案

[root@www ~]# sudo -u vbird1 sh -c "mkdir ~vbird1/www; cd ~vbird1/www; \

> echo 'This is index.html file' > index.html"   #范例二:你想要以 vbird1 的身份建立 ~vbird/www 并于其中建立 index.html 档案


visudo 与 /etc/sudoers

root 需要先使用 visudo 去修改 /etc/sudoers


单一用户

[root@www ~]# visudo

root ALL=(ALL) ALL <==找到这一行,大约在 76 行左右

vbird1 ALL=(ALL) ALL <==这一行是你要新增的!


利用群组以及免密码的功能处理

[root@www ~]# visudo

%wheel ALL=(ALL) ALL <==大约在 84 行左右,请将这行的 # 拿掉!# 在最左边加上 % ,代表后面接的是一个『群组』之意

[root@www ~]# usermod -a -G wheel pro1 <==将 pro1 加入 wheel 的支持

当然你可以将 wheel 换成你自己想要的群组名


提供『不需要密码即可使用 sudo 』:

[root@www ~]# visudo

%wheel ALL=(ALL) NOPASSWD: ALL <==大约在 87 行左右,请将 # 拿掉!


有限制的指令操作

[root@www ~]# visudo

myuser1 ALL=(root) /usr/bin/passwd <==最后指令务必用绝对路径,系统上面的 myuser1 仅能够帮 root 修改其他用户的密码


限制用户的指令参数

[root@www ~]# visudo

myuser1 ALL=(root) !/usr/bin/passwd, /usr/bin/paswd [A-Za-z]*,  !/usr/bin/passwd root

加上惊叹号『 ! 』代表『不可执行』的意思思。 因此上面这一行会变成:可以执行『 passwd 任意字符』,但是『 passwd 』与『 passwd root 』这两个指令例外! 如此一来 myuser1 就无法改变 root 的密码了!


透过别名建置 visudo

[root@www ~]# visudo

User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2

Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*,  !/usr/bin/passwd root

ADMPW ALL=(root) ADMPWCOM

透过 User_Alias 建立出一个新账号,这个账号名称一定要使用大写字符来处理,包括 Cmnd_Alias(命令别名)、Host_Alias(来源主机名别名) 都需要使用大写字符的!这个 ADMPW 代表后面接的那些实际账号。


sudo 的时间间隔问题

两次执行 sudo 的间隔在五分钟内,那么再次执行 sudo 时就不需要再次输入密码了


sudo 搭配 su 的使用方式

一口气将身份转为 root ,而且还用用户自己的密码来变成 root:

[root@www ~]# visudo

User_Alias ADMINS = pro1, pro2, pro3, myuser1

ADMINS ALL=(root) /bin/su -

接下来,上述的 pro1, pro2, pro3, myuser1 这四个人,只要输入『 sudo su - 』并且输入『自己的密码』后, 立刻变成 root 的身份!不但 root 密码不会外流,用户的管理也变的非常方便!


特殊的 shell, /sbin/nologin

这个 shell 的用户即使有了密码,你想要登入时他也无法登入。

们所谓的『无法登入』指的仅是:『这个使用者无法使用 bash 或其他 shell 来登入系统』而已,可以进行系统程序的工作。

如果我想要让某个具有 /sbin/nologin 的使用者知道,他们不能登入主机时, 其实我可以建立『 /etc/nologin.txt 』这个档案,下次当这个用户想要登入系统时, 屏幕上出现的就会是 /etc/nologin.txt 这个档案的内容,而不是预设的内容了!


PAM 模块简介

让账号密码或者是其他方式的验证具有一致的结果


PAM 模块设定语法

PAM 藉由一个与程序相同文件名的配置文件来进行一连串的认证分析需求。


Linux 主机上的用户讯息传递

查询使用者: w, who, last, lastlog


使用者对谈: write, mesg, wall

我的 root 要跟 vbird1 讲话,可以这样做:

[root@www ~]# write vbird1 pts/2  #[root@www ~]# write 使用者账号 [用户所在终端接口]


[vbird1@www ~]$ mesg n  #不想要接受任何讯息,不过,这个 mesg 的功能对 root 传送来的讯息没有抵挡的能力


[vbird1@www ~]$ mesg

is n

如果想要解开的话,再次下达『 mesg y 』就好啦


[root@www ~]# wall "I will shutdown my linux server..."  #对所有系统上面的用户传送简讯 (广播)


[root@www ~]# mail vbird1 -s "nice to meet you"

可以寄、收 mailbox 内的信件呢! 一般来说, mailbox 都会放置在 /var/spool/mail 里面,一个账号一个 mailbox (档案)。


一些检查工具

pwck

这个指令在检查 /etc/passwd 这个账号配置文件内的信息,与实际的家目录是否存在等信息, 还可以比对 /etc/passwd /etc/shadow 的信息是否一致,另外,如果 /etc/passwd 内的数据字段错误时,会提示使用者修订。 一般来说,我只是利用这个玩意儿来检查我的输入是否正确就是了。


pwconv

这个指令主要的目的是在『将 /etc/passwd 内的账号与密码,移动到 /etc/shadow 当中!』


pwunconv

将 /etc/shadow 内的密码栏数据写回 /etc/passwd 当中, 并且删除 /etc/shadow 档案。


chpasswd

他可以『读入未加密前的密码,并且经过加密后, 将加密后的密码写入 /etc/shadow 当中。』这个指令很常被使用在大量建置账号的情况中喔!

[root@www ~]# echo "dmtsai:abcdefg" | chpasswd -m


特殊账号,如纯数字账号的手工建立

不建议使用纯数字的账号了!因为很多时候,系统会搞不清楚那组数字是『账号』还是『 UID 』






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值