centos7安装过程当中若是没有建立用户的话,默认只有ROOT用户,这个用户是具备最高权限的账户,能够作任何事情,但实际生产环境中咱们通常不会使用这个用户,由于权限太大了,很危险。html
因此在生产环境中就要建立一个或多个用户账户,分配合适的权限来使用,用过windows的都知道,windows也是多用户,多任务的操做系统,每一个用户也都有配置文件,用来定义和保存用户的环境变量,包括用户的家目录,桌面等的配置。那么linux一样也是多用户,多任务操做系统,一样能够建立多个用户,定义每一个用户的所属组,家目录,登陆的shell,邮件等等环境变量。linux
在centos7中和用户相关的配置文件主要包括如下这么几个shell
/etc/passwdwindows
此文件保存着:用户名:密码:UID:GID:用户描述:主目录:登陆shellcentos
/etc/shadowbash
此文件记录的行与passwd中的行一一对应,保存着:用户名:密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志app
/etc/group工具
此文件保存着:用户组名称:用户组密码:GID:用户列表(多个用户之间用,分隔)测试
/etc/gshadowui
此文件与/etc/group文件中的行对应,保存着:用户组名:加密码后的密码:组管理员(多个用,分隔):组成员(多个用,分隔)
/etc/default/useradd
这个文件主要保存着 建立帐户时的默认值,使用useradd –D查看到的内容就是这个文件中的内容。
/etc/skel
这是个一个目录,至关于windows中公用的帐号环境设置,好比,能够在这个目录里放一个文本文件,当建立用户时,在每一个用户的家目录里均可以看到这个文件,固然也能够放置公共的配置文件,建立用户时就能够延用这个配置。
/etc/login.defs
这个是用来设置用户账号限制的配置文件,好比密码的最大过时天数,长度等,但优先级小于/etc/shadow
/etc/profile
这个文件主要用来保存环境变量的,是全局的,由系统管理员管理
~/.bashrc .bash_history .bash_profile .bash_logout 等
这些文件主要用来定义用户的环境变量的。
命令用法: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目录里的文件被复制到了新建立的用户的家目录里,注意,已经建立好的用户家目录里是没有的,只对新建立的用户有效。
使用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.
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
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
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
groupdel 组名
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共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
例:将 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
例:将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
例:查看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