Linux的账号与用户组

用户标识符:UID与GID

每一个文件都有一个所有者ID和用户组ID,当我们需要查看文件属性时,系统会根据/etc/passwd和/etc/group的内容,找到对应UID和GID对应的账户名和组名。

用户账号

用户的登陆流程如下:

1. 先搜索/etc/passwd里面是否有你输入的账号,如果有则将用户名对应的UID和GID(GID在/etc/group内)读取出来

2. 进入/etc/shadow找到对应账户与UID,核对密码是否正确

/etc/passwd文件结构

该文件每一行代表一个账户。每一行共有七个字段,分别如下:

1. 账号名称

2. 密码  密码数据放在/etc/shadow,故该字段显示x

3. UID  0表示系统管理员,1-499为系统账户,500~65535为可登录账号

4. GID  

5. 用户信息说明列  用来说明账号的意义

6. 主文件夹

7. Shell

/etc/shadow文件结构

1. 账号名称

2. 密码  

3. 最近更改密码的日期  从1970.1.1开始的天数

4. 密码不可被更改的天数

5. 密码需要被重新更改的天数

6. 密码需要更改期限前的警告天数

7. 密码过期后的账号宽限时间

8. 账号失效时间

9. 保留

有效与初始用户组:groups,newgrp

/etc/group文件结构

1. 用户组名称

2. 用户组密码  密码已放到/etc/gshadow

3. GID

4. 此用户组支持的账户名称  多个用户名逗号隔开

有效用户组与初始用户组

每个用户在/etc/passwd的第四列都有一个GID,该ID表示初始用户组。如果用户wuchao同时支持group1和group2两个用户组,那么该用户新建文件时,文件的用户组要取决于有效用户组。

以下举例:

将用户名wuchao加入到用户组root中去

[wuchao@localhost 桌面]$ usermod -a -G root wuchao

查看用户wuchao所支持的用户组:第一个为有效用户组

[wuchao@localhost 桌面]$ groups
wuchao root
[wuchao@localhost 桌面]$

创建文件并查看文件的用户组

[wuchao@localhost 桌面]$ touch file1
[wuchao@localhost 桌面]$ ls -l file1
-rw-rw-r--. wuchao wuchao 7月 : file1
[wuchao@localhost 桌面]$

切换有效用户组:newgrp 用户组名

[wuchao@localhost 桌面]$ newgrp root
[wuchao@localhost 桌面]$ groups
root wuchao
[wuchao@localhost 桌面]$ touch file2
[wuchao@localhost 桌面]$ ls -l file2
-rw-r--r--. wuchao root 7月 : file2
[wuchao@localhost 桌面]$

注意:使用newgrp其实是进入了一个新的shell,使用exit指令退出该新的shell,返回原来的shell,你会发现原来的shell的用户组并没有改变。如下:

[wuchao@localhost 桌面]$ newgrp root
[wuchao@localhost 桌面]$ groups
root wuchao
[wuchao@localhost 桌面]$ exit
exit
[wuchao@localhost 桌面]$ groups
wuchao root
[wuchao@localhost 桌面]$

/etc/gshadow

共有四个字段。

1. 用户组名

2. 密码列  如果以!开头表示无用户组管理员

3. 用户组管理员的账号

4. 该用户组所属账号

用户组管理员:当用户想加入某个用户组时可能需要root用户来操作,如果root用户很繁忙,可以为每个用户组创建用户组管理员,用户组管理员可以将其他账号加入到自己管理的用户组去。

账号管理

新增与删除用户:useradd,相关配置文件,passwd,usermod,userdel

useradd

useradd [-u UID] [-g 初始化用户组] [-G 次要用户组] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 用户名

//添加新用户
[root@localhost 桌面]# useradd fw
[root@localhost 桌面]# ls -d /home/fw
/home/fw //查看添加结果
[root@localhost 桌面]# grep fw /etc/passwd /etc/shadow /etc/group
/etc/passwd:fw:x::::/home/fw:/bin/bash
/etc/shadow:fw:!!:::::::
/etc/group:fw:x::
[root@localhost 桌面]#

注:添加用户后还需要使用passwd指令设置用户密码

passwd

可以使用--stdin参数方便设置密码,例如:

[root@localhost 桌面]# echo "password" | passwd --stdin myuser3

以上代码可以将用户myuser3的密码设为password

[root@localhost 桌面]# passwd fw
更改用户 fw 的密码 。
新的 密码:
无效的密码: 密码少于 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost 桌面]#

chage

查看或设置用户密码的详细信息

chage [-ldEImMW] 账户名

参数:

-l:列出密码详细信息

-d:后面接日期,修改shadow第三个字段(最近一次更改密码的日期),格式YYYY-MM-DD

-E:后面接日期,修改shadow第八个字段(账号失效日),格式YYYY-MM-DD

-I:后面接天数,修改shadow第七个字段(密码失效日)

-m:后面接天数,修改shadow第四个字段(密码最短保留天数)

-M:后面接天数,修改shadow第五个字段(密码多久需要进行更改)

-W:后面接天数,修改shadow第六个字段(密码过期前警告日期)

[root@localhost 桌面]# chage -l fw
最近一次密码修改时间 :7月 ,
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :
两次改变密码之间相距的最大天数 :
在密码过期之前警告的天数 :
[root@localhost 桌面]# //设置账号 失效日期
[root@localhost 桌面]# chage -E 2017-01-01 fw
[root@localhost 桌面]# chage -l fw
最近一次密码修改时间                    :7月 20, 2016
密码过期时间                    :从不
密码失效时间                    :从不
帐户过期时间                        :1月 01, 2017
两次改变密码之间相距的最小天数        :0
两次改变密码之间相距的最大天数        :99999
在密码过期之前警告的天数    :7
[root@localhost 桌面]#

usermod

usermod [-cdegGIsuLU] 用户名

参数:

-c:后面接账号的说明

-d:后面接账号的主文件夹名

-e:后面接日期,格式YYYY-MM-DD,账号失效日期

-f:后面接天数,密码失效时间

-g:后面接初始用户组

-G:后面接次要用户组

-a:与-G合用用来增加次要用户组而非设置

-l:后面接账号名称,修改账号名称

-s:后面接shell的实际文件

-u:后面接UID数字

-L:暂时冻结用户的密码

-U:将/etc/shadow密码列的!去掉

userdel

userdel [-r] username

参数:

-r:连同用户的主文件夹一起删除

新增与删除用户组

groupadd

groupadd [-g gid] [-r] groupname

参数:

-g:GID设置

-r:新建系统用户组

groupmod

groupmod [-g gid] [-n group_name] groupname

参数:

-g:修改GID

-n:修改用户组名

groupdel

groupdel [groupname]

注:如果要删除的用户组已被已有的账号设置为初始用户组的话,则该用户组无法删除。

gpasswd

用户组管理功能,虽然可以使用系统管理员来管理用户组的用户账号,但也可以设置该用户组的管理员,让其管理账户加入或移除该用户组

gpasswd groupname:设置用户组密码

gpasswd [-A user1,user2,...] [-M user3,user4,...] groupname

gpasswd [-rR] groupname

gpasswd [-ad] user groupname

参数:

-A:将该用户组的主控权交给后面的这些用户管理

-M:将某些账号加入用户组

-r:将groupname的密码删除

-R:让groupname密码栏失效

-a:添加用户到该用户组

-d:从该用户组移除用户

//新建用户组,并设置密码
[root@localhost 桌面]# groupadd group1
[root@localhost 桌面]# gpasswd group1
正在修改 group1 组的密码
新密码:
请重新输入新密码: //将wuchao设为该用户组的管理员
[root@localhost 桌面]# gpasswd -A wuchao group1 //查看结果
[root@localhost 桌面]# grep group1 /etc/group /etc/gshadow
/etc/group:group1:x::
/etc/gshadow:group1:$$KKooal1l2VJIq1J/$QR269hLIOp8B6e/g/BoB53zj5RWxk1kIznSkvAywxtixAvu1zcjGxnYM4leHiJ5i4QKYju/DD9tZS/upvSNyw1:wuchao:
[root@localhost 桌面]# //切换wuchao登陆
//可以看出,wuchao未加入group1
[wuchao@localhost 桌面]$ id
uid=(wuchao) gid=(wuchao) 组=(wuchao),(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 //因为wuchao具有group1这个用户组的管理员身份,故可以操作该用户组
//将wuchao自己加入到该组
[wuchao@localhost 桌面]$ gpasswd -a wuchao group1
正在将用户“wuchao”加入到“group1”组中 //将其他账号fw加入到该用户组
[wuchao@localhost 桌面]$ gpasswd -a fw group1
正在将用户“fw”加入到“group1”组中 //查看结果
[wuchao@localhost 桌面]$ grep group1 /etc/group
group1:x::wuchao,fw
[wuchao@localhost 桌面]$

账号管理实例

任务一:

账号名称 账号全名 支援次要用户组 是否可以登录主机 密码
myuser1 1st user mygroup1 可以 password
mysuer2 2nd user mygroup2 可以 password
myuser3 3rt user 不可以 password

指令如下:

[root@localhost 桌面]# groupadd mygroup1
[root@localhost 桌面]# useradd -G mygroup1 -c "1st user" myuser1
[root@localhost 桌面]# useradd -G mygroup1 -c "2nd user" myuser2
[root@localhost 桌面]# useradd -c "3rd user" -s /bin/nologin myuser3
[root@localhost 桌面]#
[root@localhost 桌面]# echo "password" | passwd --stdin myuser1
更改用户 myuser1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost 桌面]# echo "password" | passwd --stdin myuser2
更改用户 myuser2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost 桌面]# echo "password" | passwd --stdin myuser3
更改用户 myuser3 的密码 。
passwd:所有的身份验证令牌已经成功更新。

因为用户myuser3是不可登陆用户,则设置shell为/bin/nologin

任务二:

用户pro1,pro2,pro3是三个开发人员,让他们在/srv/projecta目录下开发

[root@localhost 桌面]# groupadd projecta
[root@localhost 桌面]# useradd -G projecta -c "projecta user" pro1
[root@localhost 桌面]# useradd -G projecta -c "projecta user" pro2
[root@localhost 桌面]# useradd -G projecta -c "projecta user" pro3
[root@localhost 桌面]# echo "password" | passwd --stdin pro1
更改用户 pro1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost 桌面]# echo "password" | passwd --stdin pro2
更改用户 pro2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost 桌面]# echo "password" | passwd --stdin pro3
更改用户 pro3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost 桌面]#
[root@localhost 桌面]# mkdir /srv/projecta
[root@localhost 桌面]# chgrp projecta /srv/projecta
[root@localhost 桌面]# chmod /srv/project
chmod: 无法访问"/srv/project": 没有那个文件或目录
[root@localhost 桌面]# chmod /srv/projecta
[root@localhost 桌面]# ls -dl /srv/projecta
drwxrws---. root projecta 7月 : /srv/projecta
[root@localhost 桌面]#

注:权限2770表示设置SGID,如果一个目录设置了SGID位,那么如果任何一个用户对这个目录有写权限的话,他在这个目录所建立的文件的组都会自动转为这个目录的属主所在的组,而文件所有者不变,还是属于建立这个文件的用户。这样的话,无论用户组中哪个用户创建的文件,该用户组的其他用户也可以修改,这在项目开发中很有用。

主机的具体权限规划:ACL的使用

什么是ACL

ACL(access control list)的主要目的是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置。ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限设置。

ACL的设置技巧:getfacl,setfacl

getfacl:取得文件或目录的ACL设置

setfacl:设置文件或目录的ACL规定

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

参数:

-m:设置后续的acl参数给文件,不可与-x合用

-x:删除后续的acl参数,不可与-m合用

-b:删除所有的acl参数

-k:删除默认的acl参数

-R:递归设置acl,即同时设置子目录

-d:设置默认acl,只对目录有效,该目录新建的文件都会引用此默认值

[root@localhost 桌面]# touch acl_test
[root@localhost 桌面]# ls -l acl_test
-rw-r--r--. root root 7月 : acl_test
[root@localhost 桌面]# setfacl -m u:wuchao:rx acl_test
[root@localhost 桌面]# ls -l acl_test
-rw-r-xr--+ root root 7月 : acl_test
[root@localhost 桌面]# getfacl acl_test
# file: acl_test
# owner: root
# group: root
user::rw-
user:wuchao:r-x
group::r--
mask::r-x
other::r-- [root@localhost 桌面]#

设置acl后,看到的权限和实际权限有点误差,并且权限后面多了个+,通过getfacl指令查阅实际的权限。

mask为有效权限,表示用户或组所设置的权限必须要存在于mask的权限设置范围内才会生效。举例:

[root@localhost 桌面]# setfacl -m m:r acl_test
[root@localhost 桌面]# getfacl acl_test
# file: acl_test
# owner: root
# group: root
user::rw-
user:wuchao:r-x #effective:r--
group::r--
mask::r--
other::r-- [root@localhost 桌面]#

上面用户wuchao显示#effective:r--表示仅仅只有r属性有效

用户身份切换

su

su [-lm] [-c 命令] [username]

参数:

-:单纯使用“su -”代表使用login shell切换用户,不加用户名则切换为root

-l:后面加需要切换的账号,login shell方式

-m:使用当前环境配置,不读取新用户的配置文件

-c:仅进行一次命令

//使用su表示读取变量的方式是nologin shell,此时很多变量不会改变,比如PATH
[wuchao@localhost 桌面]$ su
密码:
[root@localhost 桌面]# id
uid=(root) gid=(root) 组=(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost 桌面]# env | grep 'wuchao'
USER=wuchao
USERNAME=wuchao
PATH=/usr/local/java/jdk1..0_91/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/wuchao/.local/bin:/home/wuchao/bin
MAIL=/var/spool/mail/wuchao
PWD=/home/wuchao/桌面
LOGNAME=wuchao
[root@localhost 桌面]# exit
exit //使用su - 则用login shell方式读取
[wuchao@localhost 桌面]$ su -
密码:
上一次登录:四 7月 :: CST 2016pts/ 上
[root@localhost ~]# env | grep root
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/java/jdk1..0_91/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
HOME=/root
LOGNAME=root
XAUTHORITY=/root/.xauthe6Zrco
[root@localhost ~]# exit
登出
[wuchao@localhost 桌面]$

sudo

仅有/etc/sudoers内的用户才能使用该指令

sudo的命令用法

sudo [-b] [-u 新用户]

参数:

-b:将后续的命令让系统执行,而不与目前的shell产生影响

-u:后面可以接要切换的用户,若无此项代表切换到root

//使用sshd用户创建文件
[root@localhost 桌面]# sudo -u sshd touch /tmp/mysshd
[root@localhost 桌面]# ls -l /tmp/mysshd
-rw-r--r--. sshd sshd 7月 : /tmp/mysshd //使用其他用户执行命令
[root@localhost 桌面]# sudo -u wuchao sh -c "mkdir ~wuchao/www;cd ~wuchao/www;\
> echo 'this is index.html ' > index.html"
[root@localhost 桌面]# ls -al ~wuchao/www
总用量
drwxr-xr-x. wuchao wuchao 7月 : .
drwx------. wuchao wuchao 7月 : ..
-rw-r--r--. wuchao wuchao 7月 : index.html
[root@localhost 桌面]#

注:sshd用户是系统账户(默认shell是/sbin/nologin),故无法使用su切换到该用户,但可以使用sudo -u sshd

sh -c  string可以执行一系列指令

visudo与/etc/sudoers

单一用户:

[root@localhost 桌面]# visudo

//修改下面内容
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
wuchao ALL=(ALL) ALL

四个参数的意义:

1. 用户账号  系统的哪个账号可以使用sudo

2. 登陆者的来源主机

3. 可切换的身份

4. 可执行的命令

利用用户组以及免密码的功能visudp

[root@localhost 桌面]# groupadd group1
groupadd:“group1”组已存在
[root@localhost 桌面]# visudo //添加用户组group1
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
%group1 ALL=(ALL) ALL

免密码功能

## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
%group1 ALL=(ALL) NOPASSWD:ALL

有限制的命令操作

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
wuchao ALL=(root) !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/pas
swd root

注:!标志不可执行。上述配置表示wuchao可以执行“passwd 任意字符”,但不可执行passwd和passwd root,这样wuchao便不能更改root的密码

用户的特殊shell与PAM模块

暂时跳过去。

Linux主机上的用户信息传递

查询用户:w,who,last,lastlog

[root@localhost 桌面]# w
:: up days, :, users, load average: 0.40, 0.28, 0.33
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root : : 三14 ?xdm? :24m .08s gdm-session-wor
root pts/ : : .00s .08s .03s w
wuchao : : : ?xdm? :24m .05s gdm-session-wor
[root@localhost 桌面]# who
root : -- : (:)
root pts/ -- : (:)
wuchao : -- : (:)
(unknown) : -- : (:)
(unknown) : -- : (:)
(unknown) : -- : (:)
[root@localhost 桌面]#

用户对谈:write,mesg,wall

省略。

用户信箱:mail

用户信箱所在位置为/var/spool/mail/用户名

//写邮件,最后输入小数点,点击enter结束
[root@localhost 桌面]# mail wuchao -s "nice to meet you"
Subject: hello,wuchao. I am root .
EOT
[root@localhost 桌面]# //wuchao登陆,输入mail即可接收邮件
[wuchao@localhost 桌面]$ mail
Heirloom Mail version 12.5 //. Type ? for help.
"/var/spool/mail/wuchao": message new
>N root Thu Jul : / "hello,wuchao. I am ro"
&

第14章 Linux账号管理与ACL权限设置的更多相关文章

  1. 别人的Linux私房菜(14)Linux账号管理和ACL权限设置

    用户标识符UID.GID 用户的账号信息,主要是指UID对应.组和GID对应 检查系统中是否存在用户bin:id bin 登录shell验证账号密码的步骤:找到/etc/passwd核对是否存在账号, ...

  2. Linux 账号管理及ACL权限设置,PAM模块简介

    有效群组与初始群组: groups:有效与支持群组的观察 newgrp:有效群组的切换,后面接群组名称 在passwd文件中记录的GID就是默认的GID,就是初始群组 /etc/passwd文件结构 ...

  3. Linux账号管理与ACL权限设置

    1:UID和GID 用户ID:在/etc/passwd中 群组ID:在/etc/group中 2:有效群组与初始群组 初始群组:/etc/passwd文件里面的GID 有效群组: groups #查看 ...

  4. 第十四章、Linux 账号管理与 ACL 权限配置

    1. Linux 的账号与群组 1.1 使用者标识符: UID 与 GID 1.2 使用者账号:/etc/passwd 文件结构, /etc/shadow 文件结构 1.3 关于群组: /etc/gr ...

  5. Linux 账号管理与 ACL 权限配置

    要登陆 Linux 系统一定要有账号与口令才行,否则怎么登陆,您说是吧?不过, 不同的使用者应该要拥有不同的权限才行吧?我们还可以透过 user/group 的特殊权限配置, 来规范出不同的群组开发项 ...

  6. 鸟哥私房菜基础篇:Linux 账号管理与 ACL 权限配置习题

    猫宁!!! 参考:http://cn.linux.vbird.org/linux_basic/0410accountmanager.php 1-root 的 UID 与 GID 是多少?而基于这个理由 ...

  7. linux 账号管理与ACL权限设定

    此文涉及命令:useradd.usermod.userdel.passwd.chage.setfacl.getfacl.su.sudo.fingr.chfn.chsh.id.groupadd.grou ...

  8. linux备忘录-账号管理与ACL权限设定

    知识 账号管理中的一些文件结构 /etc/passwd 每一行的内容都为下面结构 账号名称:密码:UID:GID:用户信息说明:家目录:shell ---- UID ---- -- 0 -> 代 ...

  9. Linux账号管理与ALC权限设定(二) 批量增加用户脚本

    接上篇.鸟哥提出了一个问题.就是 如果myuser1用户是这个项目的助理,他只能查看该目录下的内容,而无法修改删除.那该如何操作呢? 首先,不能将该用户加入projecta这个群组,否则他也可以修改删 ...

随机推荐

  1. laravel5.5源码笔记(三、门面类facade)

    上次说了provider,那么这次来说说facade 首先是启动的源头,从laravel的kernel类中的$bootstrappers 数组,我们可以看到它的一些系统引导方法,其中的Register ...

  2. PE 学习之路 —— DOS 头、NT 头

    1. 前述 可执行文件的格式是操作系统本身执行机制的反映,理解它有助于对操作系统的深刻理解,掌握可执行文件的数据结构及其一些机理,是研究软件安全的必修课.`PE(Portable Executable ...

  3. 扫描算法(SCAN)——磁盘调度管理

    原创 上一篇博客写了最短寻道优先算法(SSTF)——磁盘调度管理:http://www.cnblogs.com/chiweiming/p/9073312.html 此篇介绍扫描算法(SCAN)——磁盘 ...

  4. Java第五次实验报告

    Java第五次实验报告 实验一 实验内容 两人一组结对编程: 参考 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC. ...

  5. 20155230 2016-2017-2《Java程序设计》第一周学习总结

    第一周学习总结 考核方式 100分构成 翻转课堂考核12次(5*12 = 60):每次考试20-30道题目,考试成绩规格化成5分(比如总分20分就除以4) 注意:不轮什么原因,缺考没有补考机会,但有做 ...

  6. 洛谷 P3369 【模板】普通平衡树(Treap/SBT)

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(排名定义为比当前数小的数的个数+1.若有多 ...

  7. OpenGL ES学习笔记(二)——平滑着色、自适应宽高及三维图像生成

    首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <Android学习笔记--O ...

  8. NPOI读取Excel到集合对象

    之前做过的项目中有个需要读取Excel文件内容的需求,因此使用NPOI实现,写下以下代码,这个只是一个代码段,还有很多地方需要优化,希望能对大家有所帮助 public static IList< ...

  9. 七、EnterpriseFrameWork框架基础功能之字典数据配置管理

    框架中的“通用字典数据配置管理”主要解决的问题是,所有的行业软件给客户实施第一步一般都是基础数据的维护,一个系统的字典是少不了的,涉及业务范围越广字典就越多,如果每一个字典数据都做一个界面来进行维护数 ...

  10. katalon系列十三:5.10新增跳过用例&命令行赋值全局变量

    Katalon Studio升级到5.10版本了,这次新增了2个很实用的功能:一.跳过用例在Listener中新增了跳过用例方法,Listener类似于JUnit4的annotation中的@Befo ...