热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

centos7用户,组及文件权限管理

centos7安装过程中如果没有创建用户的话,默认只有ROOT用户,这个用户是具有最高权限的帐户,可以做任何事情,但实际生产环境中我们一般不会使用这个用户,因为权限太大了,很危险。所以在生产环境中就要

centos7安装过程中如果没有创建用户的话,默认只有ROOT用户,这个用户是具有最高权限的帐户,可以做任何事情,但实际生产环境中我们一般不会使用这个用户,因为权限太大了,很危险。

所以在生产环境中就要创建一个或多个用户帐户,分配合适的权限来使用,用过windows的都知道,windows也是多用户,多任务的操作系统,每个用户也都有配置文件,用来定义和保存用户的环境变量,包括用户的家目录,桌面等的配置。那么linux同样也是多用户,多任务操作系统,同样可以创建多个用户,定义每个用户的所属组,家目录,登录的shell,邮件等等环境变量。

在centos7中和用户相关的配置文件主要包括以下这么几个

/etc/passwd

此文件保存着:用户名:密码:UID:GID:用户描述:主目录:登录shell

/etc/shadow

此文件记录的行与passwd中的行一一对应,保存着:用户名:密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

/etc/group

此文件保存着:用户组名称:用户组密码:GID:用户列表(多个用户之间用,分隔)

/etc/gshadow

此文件与/etc/group文件中的行对应,保存着:用户组名:加密码后的密码:组管理员(多个用,分隔):组成员(多个用,分隔)

/etc/default/useradd

这个文件主要保存着 创建账户时的默认值,使用useradd –D查看到的内容就是这个文件中的内容。

/etc/skel

这是个一个目录,相当于windows中公用的账号环境设置,比如,可以在这个目录里放一个文本文件,当创建用户时,在每个用户的家目录里都可以看到这个文件,当然也可以放置公共的配置文件,创建用户时就可以延用这个配置。

/etc/login.defs

这个是用来设置用户帐号限制的配置文件,比如密码的最大过期天数,长度等,但优先级小于/etc/shadow

/etc/profile

这个文件主要用来保存环境变量的,是全局的,由系统管理员管理

~/.bashrc .bash_history .bash_profile .bash_logout 等

这些文件主要用来定义用户的环境变量的。

一.用户管理

1.创建用户

命令用法:useradd 或 adduser [option] 用户名

              useradd 或 adduser –D                    用来查看创建账户时的默认值

              useradd 或 adduser –D [option]        用来指定或修改创建账户时的默认值

                                                                   一般可以修改默认值的参数有:-b –e –f –g –s)

我们用 useradd –help来看一下都有哪些参数

[root@ha1 ~]# useradd --help
Usage: useradd [options] LOGIN
useradd –D
useradd -D [options]
Options:
-b, --base-dir BASE_DIR 指定创建用户HOME目录的位置,一般结合 –D 使用
-c, --comment COMMENT 给新用户添加备注
-d, --home-dir HOME_DIR 指定用户家目录的文件名
-D, --defaults 用来查看创建账户时的默认值,也就是/etc/default/useradd文件中的内容
-e, --expiredate EXPIRE_DATE 用YYYY-MM-DD格式指定一个账户过期的日期
-f, --inactive INACTIVE 指定这个账户密码过期后多少天这个账户被禁用;0表示密码一过期就被禁用,-1表示禁用这
个功能
-g, --gid GROUP 指定用户所属组的GID或组名
-G, --groups GROUPS 指定用户除所属组外的一个或多个附加组
-h, --help display this help message and exit
-k, --skel SKEL_DIR 必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录
-K, --key KEY=VALUE 主要用来改写/etc/login.defs文件中的默认值,如:-K UID_MIN=100 –K UID_MAX=499
-l, --no-log-init do not add the user to the lastlog and
faillog databases
-m, --create-home 创建用户的HOME目录
-M, --no-create-home 不创建用户的HOME目录
-N, --no-user-group 不创建与用户同名的用户组
-o, --non-unique 仅与-u选项结合使用,允许创建一个用户ID不唯一的用户
-p, --password PASSWORD 为用户指定默认密码
-r, --system 创建系统账户
-R, --root CHROOT_DIR 允许用户根据配置文件来切换家目录
-s, --shell SHELL 指定用户登录的shell
-u, --uid UID 指定用户的UID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 此选项不常用

举例说明:

创建名为jerry的用户,指定HOME目录:/home/h_jerry,指定UID 1022,不创建同名用户组,指定密码:jerry,指定shell:/bin/sh,指定账户过期时间:2017-08-09,允许密码过期后使用,添加用户描述:first user

[root@ha1 ~]# useradd -m -d /home/h_jerry -u 1022 -N -p jerry -s /bin/sh -e 2017-08-09 -f -1 -c "first user" jerry

用户创建完成没报错说明命令成功执行,那就一步一步来验证一下:

验证用户的UID

[root@ha1 ~]# id jerry
uid=1022(jerry) gid=100(users) groups=100(users)

看到用户ID 1022没错是我们指定的数字,由于没有创建指定的同名组,所以就用/etc/default/useradd中的默认值的组ID100,默认加入到users组中,都有哪些默认值呢,我们来看一下/etc/default/useradd这个文件

[root@ha1 ~]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

看下/etc/passwd文件对应的jerry行的信息

[root@ha1 ~]# cat /etc/passwd |grep jerry
jerry:x:1022:100:first user:/home/h_jerry:/bin/sh

此文件由7段冒号隔开的字段

第一字段  jerry表是用户名

第二字段  X表示加密码后的密码

第三字段  1022表示UID

第四字段  100表示组ID

第五字段  first user表示描述信息

第六字段  /home/h_jerry表示家目录

第七字段  /bin/sh表示登录的sehll

再来看一下/etc/shadow文件中的内容

[root@ha1 ~]# cat /etc/shadow |grep jerry
jerry:jerry:17386:0:99999:7::17387:

/etc/shadow文件由9个字段组成,用:分隔

第一字段  jerry:表示用户名

第二字段  jerry:表示密码,这里看到是明文的,并没有被加密码,但是passwd jerry来修改密码后就会是加密的。

第三字段  17386:表示上次修改密码的时间,这个时间是从1970年1月1号到最近一次修改密码的时间间隔天数

第四字段  0:表示2次修改密码间隔的天数,0表示禁用此功能

第五字段  99999:表示2次修改密码间隔最多的天数,也有默认值,是通过/etc/login.defs中PASS_MAX_DAYS定义

第六字段  7:表示提前7天警告用户密码过期,也有默认值,是通过/etc/login.defs中PASS_WARN_AGE定义

第七字段  在密码过期之后多少天禁用此用户,也就是过期多少天后系统禁用此用户,不能登录,不会提示过期,完全禁用,

              空:表示密码过期后账号仍然可用(-f –1)

第八字段  17387:用户过期日期(从19700101开始的天数)和创建用户指定过期日期正好相符(-e 2017-08-09)

第九字段  保留字段 留空

看一下用户的HOME目录

[root@ha1 ~]# ll /home
total 0
drwx------. 2 jerry users 62 Aug 8 21:37 h_jerry
[root@ha1 ~]# ll -a /home/h_jerry/
total 16
drwx------. 2 jerry users 83 Aug 9 18:45 .
drwxr-xr-x. 4 root root 33 Aug 9 18:39 ..
-rw-------. 1 jerry users 11 Aug 9 18:45 .bash_history
-rw-r--r--. 1 jerry users 18 Aug 3 2016 .bash_logout
-rw-r--r--. 1 jerry users 193 Aug 3 2016 .bash_profile
-rw-r--r--. 1 jerry users 231 Aug 3 2016 .bashrc

OK,到这里用户创建已经成功,简单梳理一下创建用户时系统做了哪些事:

如果创建用户不带参数,系统会根据默认值(/etc/default/useradd,/etc/login.defs)创建用户及同名用户组,并在HOME目录里创建同名家目录,默认的登录shell为/bin/bash。

如果创建用户时带了参数,那么系统会根据参数来创建指定用户信息。

用户创建完成后,/etc/passwd,/etc/shadow这2个文件都会有相应的用户信息。

在用户家目录里都会产生.bash_history .bash_logou .bash_profile .bashrc4个隐藏文件。

开篇提到了/etc/skel这个目录,到底是干什么用的呢,试一下就知道了,在这个目录里创建一个a.txt的文件,接着再创建一个tcl的新用户,再看看用户的家目录。

[root@ha1 ~]# vi /etc/skel/a.txt
[root@ha1 ~]# useradd tcl
[root@ha1 ~]# ll /home/tcl/
total 4
-rw-r--r--. 1 tcl tcl 28 Aug 9 18:58 a.txt

看到了吧,在/etc/skel目录里的文件被复制到了新创建的用户的家目录里,注意,已经创建好的用户家目录里是没有的,只对新创建的用户有效。

2.为用户设置密码

使用passwd 用户名 即可修改相应用户的密码

[root@ha1 ~]# passwd jerry
Changing password for user jerry.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@ha1 ~]# echo "jerry" | passwd --stdin jerry
Changing password for user jerry.
passwd: all authentication tokens updated successfully.

3.删除用户

userdel 选项 用户名

userdel –r 用户名 删除用户及家目录

[root@ha1 ~]# userdel -r tcl
[root@ha1 ~]# ll /home
total 0
drwx------. 2 jerry users 83 Aug 9 18:45 h_jerry
drwx------. 2 test test 83 Aug 9 18:45 test

4.修改用户

usermod 选项 用户名

选项参数   和useradd命令参数大致相同

-d  --home HOME_DIR     指定新的家目录

-a  --append                   将用户追加到附加组中而不移出其它组

-l   --login NEW_LOGIN    指定新的用户名

-L  --lock                        锁定用户

-m  --move-home            和-d选项结合使用,移动家目录中的内容到新的位置

举例说明:

将jerry用户改名为natasha,移动家目录的内容到/home/natasha,指定新的UID为1010,登录shell改为/bin/bash,并锁定用户

[root@ha1 ~]# usermod -l natasha -d /home/natasha -m -u 1010 -s /bin/bash jerry
[root@ha1 ~]# ll /home
total 0
drwx------. 2 natasha users 83 Aug 9 18:45 natasha
drwx------. 2 test test 83 Aug 9 18:45 test
[root@ha1 ~]# id natasha
uid=1010(natasha) gid=100(users) groups=100(users)
[root@ha1 ~]# cat /etc/passwd |grep natasha
natasha:x:1010:100:first user:/home/natasha:/bin/bash

 

二.用户组管理

1.创建组

groupadd 选项 组名

选项

-f    --force     强制创建组即使组已存在,如果GID已存在将取消-g选项

-g   --gid GID 指定组GID号

举例说明:

创建一个名为natasha的组,并将用户natasha和test分别加入natasha和test组中

[root@ha1 ~]# groupadd -g 1010 natasha
[root@ha1 ~]# usermod -a -G test test
[root@ha1 ~]# cat /etc/group |grep -E "natasha|test"
test:x:1023:test
natasha:x:1010:test,natasha
[root@ha1 ~]# usermod -a -G test natasha
[root@ha1 ~]# cat /etc/group |grep -E "natasha|test"
test:x:1023:test,natasha
natasha:x:1010:test,natasha

2.删除组

groupdel 组名

3.修改组

groupmod 选项  组名

选项

-g  --gid GID      改变组的ID号

-n  --new-name  改变组名

用法和usermod类似

总结一下,创建组后会在/etc/group,/etc/gshadow文件中产生相应的组信息

/etc/group文件格式说明:分为4个字段,用冒号隔开

natasha:x:1010:test,natasha

第一字段:表示组名

第二字段:表示组密码,存放在/etc/gshadow文件中

第三字段:表示组ID号

第四字段:表示组成员,多个组成员用逗号隔开

/etc/gshadow文件格式说明:分为4个字段,用冒号隔开

natasha:!::test,natasha

第一字段:组名

第二字段:加密码后的密码

第三字段:组管理员(多个用,分隔)

第四字段:组成员(多个用,分隔)

 

三.文件,目录权限管理

在linux中设置文件权限非常重要,也是最基本的。linux文件的权限分为读(r-4)写(w-2)执行(x-1),和windows一样设置权限需要针对用户,用户所属的组,还有其它用户。只有设置了正确的权限,相应的用户才能根据权限执行相应的操作,很多时候我们配置WEB服务,FTP服务等都需要对相应的文件或文件夹赋与相应的权限才能正常跑起来,有时遇到问题通过查看错误日志会发现很多情况下是由于权限不当引起的。

文件权限分一般权限和特殊权限

一般权限主要指的是:文件所有者的权限,所属组的权限,其它用户权限

特殊权限主要指的是:权限中带s或S(SUID,SGID),t或T标志位

和文件权限有关的工具命令

 

ls –l    查看文件或目录的权限

umask   查看或设置权限遮罩(即实际权限=最大权限-遮罩值)

chmod   改变文件或目录的权限

chown   更改文件或目录的所有者

chgrp    更改文件或目录的所属组

getfacl   获取文件或目录权限访问控制列表

setfacl   设置文件或目录权限访问控制列表

先来看一下文件权限的查看方式,使用ll命令就可以查看长格式的文件权限等信息

[root@ha1 test]# ll
-rw-r--r--. 1 root root 67 Mar 29 20:07 README.md
drwxr-xr-x. 3 root root 36 Mar 29 20:15 shell
[root@ha1 test]# ll /bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd

权限有3段组成,rwxrwxrwx代表最高权限,修改权限时也可以用777表示,-表示没有此项权限,本该出现x的位置出现s表示拥有SUID权限。

SUID对应4,SGID对应2,SBIT对应1

SUID只对二进制程序有效,执行者对于程序需要有X权限,在程序运行过程中,执行者(普通用户)将临时拥有程序所有者的权限

SGID对于文件来说只对二进制程序有效,普通用户将会临时拥有所属组的权限,对于目录来说,用户对此目录有RX权限可以进入目录,用户进入目录后,有效用户组会变成该目录的用户组,若用户在此目录有w权限,则用户创建的文件用户组与该目录用户组相同

umask说明

umask共4位:uid/gid,属主,组,其它权限。可以使用umask命令查看 默认是0022,不过一般用到的是后3位。

默认情况下,创建文件的权限是644(6-0,6-2,6-2),创建目录的权限是755(7-0,7-2,7-2)

[root@ha1 test]# touch a
[root@ha1 test]# umask
0022
[root@ha1 test]# mkdir b
[root@ha1 test]# ll
total 8
-rw-r--r--. 1 root root 0 Aug 10 19:01 a
drwxr-xr-x. 2 root root 6 Aug 10 19:05 b
-rwSr--r-T. 1 root root 65 Mar 29 21:02 index.html
-rw-r--r--. 1 root root 67 Mar 29 20:07 README.md
drwxr-xr-x. 3 root root 36 Mar 29 20:15 shell

修改文件权限 chmod

例:将 a 文件权限修改为:所有者有rwx,所属组:rx,其它用户:无权限

[root@ha1 test]# chmod u+x,g+x,o-r a
[root@ha1 test]# ll
total 8
-rwxr-x---. 1 root root 0 Aug 10 19:01 a

修改文件所有者或所有组 chown chgrp

例:将a文件所属组改为natasha,将b目录的所有者改为natasha

[root@ha1 test]# chgrp natasha a
[root@ha1 test]# chown -R natasha:root b
[root@ha1 test]# ll
total 8
-rwxr-x---. 1 root natasha 0 Aug 10 19:01 a
drwxr-xr-x. 2 natasha root 6 Aug 10 19:05 b

设置更详细的权限 getfacl setfacl

例:查看a文件的详细权限信息

[root@ha1 test]# getfacl a
# file: a
# owner: root
# group: natasha
user::rwx
group::r-x
other::---

setfacl用法:

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...

setfacl –-restore=file

参数:

-b,--remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。

-k,--remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。

-n,--no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。 --mask:重新计算有效权限,即使ACL mask被明确指定。

-d,--default:设定默认的acl规则。

--restore=file:从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的任何参数一同执行。

--test:测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。

-R,--recursive:递归的对所有文件及目录进行操作。

-L,--logical:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。

-P,--physical:跳过所有符号链接,包括符号链接文件。

--version:输出setfacl的版本号并退出。

--help:输出帮助信息。

--:标识命令行参数结束,其后的所有参数都将被认为是文件名 -:如果文件名是-,则setfacl将从标准输入读取文件名。

例:将a文件权限设置为,test1用户拥有rw权限,test2用户拥有x权限,其它用户拥有rx权限

[root@ha1 test]# setfacl -m u:test1:rw,u:test2:x,o::rx a
[root@ha1 test]# getfacl a
# file: a
# owner: root
# group: natasha
user::rwx
user:test1:rw-
user:test2:--x
group::r-x
mask::rwx
other::r-x

推荐阅读
  • 安装oracle软件1创建用户组、用户和目录bjdb节点下:[rootnode1]#groupadd-g200oinstall[rootnode1]#groupad ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • Python15行代码实现免费发送手机短信,推送消息「建议收藏」
    Python15行代码实现免费发 ... [详细]
  • 如何使用人人账号进行快捷登录
    在人人开放平台的技术架构中,一个人人Connect站点也相当于一个人人网应用(App),所以在安装之前你需要申请创建一个应用 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
author-avatar
mobiledu2502892717
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有