13
一、useradd
要牢牢掌握这个
useradd [options] USERNAME(登录名)
-u:指定UID
[email protected] ~]# useradd -u 1000 user1
[[email protected] ~]# tail -1 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
要明白,如果UID和GID不一样,会在权限和脚本上有一定的影响
-r:添加一个系统用户,从1-499之间找一个id号,并且默认“系统用户”是不能登录的,因为不会生产家目录
而groupadd也有一个-r也是添加一个系统组的意思,而且也是没有家目录的,手动复制/etc/skel的文件变成家目录也是可以登录的
-g:GID(基本组)指定创建用户的基本组是什么(这样指定的话,组名必须要存在,所以要事先先创建组)
/etc/group最后那一个字段是以该组为附加组的用户,多个的话用逗号隔开
useradd -g togogo togogo02
-G:GID(附加组)
如果我们指定了UID,下次创建默认的就是最大的UID加1,所以中间可能会空很多UID没有设置
-c "CONMENT"指定注释信息(多个注释信息用,隔开,并且可以用chfn来设置)
-d /path/to/somedirectory 指定某个目录作为家目录
[[email protected] ~]# useradd -c "mynameistom" -d /home/tomny togogo03
[[email protected] ~]# tail -1 /etc/passwd
togogo03:x:1001:1001:mynameistom:/home/tomny:/bin/bash
-s SHELL的意思,指定的shell要是/etc/shells下面的一个shell,所以这个-s是指定shell路径的
cat /etc/shells
[[email protected] ~]# useradd -s /sbin/nologin user5
[[email protected] ~]# su - user5
This account is currently not available.
到现在学习的环境变量有以下几个
PATHSHELLHISTSIZE
[[email protected] ~]# echo $SHELL查看当前默认的SHELL是什么
/bin/bash -m强制为用户创建家目录()
-k 把/etc/skel(skel这个单词指的是人的骨架框架)(是一些bash的配置文件,一些环境变量)
[[email protected] ~]# cd /etc/skel/
[[email protected] skel]# ls -a
. .. .bash_logout .bash_profile .bashrc
创建用户的时候,默认是把/etc/skel中会把这些默认赋值到家目录里面去的
如果没有这些文件在家目录下,这个用户是不健全的,
密码的最短时间,最长时间,还有那些默认是500,1000的,还有默认的权限077
都是在etc/login.defs可以设置
-M不创建家目录
如果用户没有家目录的话,是不能够进入这个用户的。因为他没有默认的一些skel给与的配置,找不到一些默认配置,所以不能登录
[[email protected] ~]# useradd -M user7
[[email protected] ~]# su - user7
su: warning: cannot change directory to /home/user7: No such file or directory, 这里是告诉你妮没有家目录没哟一定的环境变量
-bash-4.1$ pwd
/root
二、userdel
userdel:【option】 USERNAME
删除一个用户默认不会删除家目录的
-r选项remove,就是删除用户的同时,也把家目录给删除了
id :查看用户的账号属性信息
-n显示组的组名,名称,而非是id号
还有-u -g -G几个,分别显示不同的UID,GID之类的
[[email protected] ~]# id -G user1
1000 0
[[email protected] ~]# id -G -n user1
user1 root
其他的就不是很常用了
三、finger
finger:食指,是用来检索用户信息的账号信息
finger togogo01 就可以看到用户账号的相关属性信息了
修改finger信息用chfn(change finger)
[[email protected] Packages]# finger togogo01
Login: togogo01 Name:
Directory: /home/togogo01 Shell: /bin/bash
Last login Sat Jul 25 05:22 (EDT) on pts/3
No mail.
No Plan.
四、usermod
如何修改用户账号属性信息:
usermod,跟useradd的选项差不多的,意思也是差不多的
-u UID
-g GID
-G GID附加组,如果之前有附加组,如果用这个命令,就会之前的附加组会没了
所以经常用-a和-G是一起使用的,追加附加组,不然没有-a会替换原来的附加组
-c 修改注释信息(注释多项的时候用逗号隔开,具体为chfn修改他的注释信息)
[[email protected] ~]# tail -1 /etc/passwd
linan3:x:502:500::/var/linan3/:/bin/bash
[[email protected] ~]# usermod -c "whoyouare" linan3
[[email protected] ~]# tail -1 /etc/passwd
linan3:x:502:500:whoyouare:/var/linan3/:/bin/bash
-d 为用户指定新的家目录,但是很危险,原来的家目录文件就没有了,如果要用户还能访问此前在家目录创建的文件,需要将原来的东西移动到新的位置
可以用-m目录,所以-d经常和-m一起使用:即指定新的家目录位置,又移动此前家目录的文件到新的家目录
-s 修改shell
-l 直接修改用户名的用户(修改用户名:登录名)
-L可以直接锁定用户账号,类似于禁用
立刻可以锁定账户,所以对于的就是-U
-U就是用于解锁的,解锁账号
其实这个命令的用处是非常大的
-e 定义用户的过期时间,格式年月日
-f 非活动时间 用得少,到时候man一下就可以了
[[email protected] skel]# cp .bash_logout .bash_profile .bashrc /var/linan3/
[[email protected] skel]# cd /var/linan3/
如果指定了其他的家目录,别忘了把一些相关的文件从/etc/skel中拷贝到指定的家目录去,不然是不能登录用户的
五、chsh,chfn
chsh:change shell的简写---就是用来修改shell 的
[[email protected] Packages]# chsh togogo02
Changing shell for togogo02.
New shell [/bin/bash]: /bin/tcsh
[[email protected] Packages]# finger togogo02
Login: togogo02 Name:
Directory: /home/togogo02 Shell: /bin/tcsh
chfn:其实这个就是用来修改注释信息的,用法也是chfn USERNAME
[[email protected] ~]$ chfn
Changing finger information for user1.
Password:
Name []: Xiaoming
Office []: Yanfabu
Office Phone []: 13690965166
Home Phone []: 6299498
Finger information changed.
[[email protected] ~]$ finger user1
Login: user1 Name: Xiaoming
Directory: /home/mainuser/ Shell: /bin/bash
Office: Yanfabu, +1-369-096-5166 Home Phone: 629-9498
[[email protected] ~]$
所以以后自己管理Linux的时候,给不同的人创建账号的时候,用到这个也是非常好的
finger 查看修改的相关信息
密码管理:
六、passwd
passwd 【USERNAME】
这个用起来很简单,但是也有几个选项使用
管道方式输入密码:杠杠stdin --stdin 通过标准字符串来接收密码
将来可在脚本中,方便的创建用户账号,并同时给他指定密码(这个体现了Linux重要的思想之一:尽量避免捕获用户接口)
[[email protected] Packages]# echo "123456" | passwd --stdin togogo01
Changing password for user togogo01.
passwd: all authentication tokens updated successfully.
-l锁定用户
-u解锁用户
-d删除用户密码(默认清空了密码是不给登录的,当然root su 过去是可以的)
-n 密码最短使用期限
-x 密码最长使用期限
其他不常用的参看man 一下去看一下
六:pwck
pwck:检查用户账号的完整性
接下来跟组相关的命令
组管理
七、groupadd
groupadd
-g指定GID
-r添加系统组,我们将来在安装服务器软件的时候可能会用到这个去生成系统组和系统用户
而且系统用户和系统组是不会有家目录的,当然是可以手动增加家目录就可以登录的了
八、groupmod
groupmod
-gGID
-nGRPNAME修改组名称 而usermod是用-l来修改组名的
groupdel删除组
gpasswd:为组设定密码
应用场景:是在你想修改文件的属组的时候,你要登录属组的这个组的密码。
通常和newgrp连用,它可以修改用户的属组
所以newgrp是可以临时切换用户的基本组,改变一种登录属性
[[email protected] ~]# groupadd hoop
[[email protected] ~]# gpasswd hoop
Changing the password for group hoop
New Password:
Re-enter new password:
[[email protected] ~]# su - togogo01
[[email protected] tmp]$ touch a.hoop
[[email protected] tmp]$ ll
-rw-r--r--. 1 togogo01 togogo 0 Jul 26 02:00 a.hoop
[[email protected] tmp]$ newgrp hoop
Password:
上面这一步可以看到,newgrp是修改用户的属组为hoop,然后就需要输入这个组的密码了,输入正确,后面创建的文件就是这个属组了
[[email protected] tmp]$ touch 2.hoop
[[email protected] tmp]$ ll
-rw-r--r--. 1 togogo01 hoop 0 Jul 26 02:01 2.hoop
-rw-r--r--. 1 togogo01 togogo 0 Jul 26 02:00 a.hoop
是可以退出的,不想用newgrp修改的属组的是用户就用exit退出即可
练习题目
对密码的期限在设置密码的时候使用
而对于用户的期限可以用chage或者是usermod来实现
九、chage
(这些信息可以直接修改shadow文件,前提一定要知道shadow里面的各个字段的意思是什么)
chage 改变用户密码过期信息的 ----------man手册要常用
-d:最近一次的修改时间
-E:过期时间
-I:非活动时间
-m:最短使用期限
-M:最长使用时间
-W:警告时间
14
权限管理:
r:对文件来说:可以使用less ,cat ,目录来说,可以对此目录用ls命令,但是不能ls -l,也不能cd进去
w:文件来说:可以编辑删除这个文件,目录亦如此
x:文件来说:可以交给内核执行。目录来说:可以用ls -l 和cd 进去
对于这些权限,我们对三类用户都分别定义了:
u属主:
g属组:
o其他用户
一、chown
chown:改变文件属主(这个命令是只有管理员可以使用此命令)
# chown USERNAME file,...
-R:修改目录及其内部文件的属主,对目录用此命令,里面的文件和目录所有也都变成修改的属主
--reference它的意思是引用,参考,参考某一个文件或者目录的属组和属主
--reference=/path/to/somefile file...
[[email protected] tmp]# mkdir ccc
[[email protected] tmp]# chown --reference=/tmp/aaa ccc/
[[email protected] tmp]# ls -ld ccc
drwxr-xr-x. 2 togogo01 root 6 Jul 26 02:24 ccc
二、chgrp
chgrp:改变文件属组(这个命令是只有管理员可以使用此命令)
-R:修改目录及其内部文件的属主,对目录用此命令,里面的文件和目录所有也都变成修改的属组
--reference它的意思是引用,参考,参考某一个文件或者目录的属组和属主,这个是一块改的
--reference=/path/to/somefile file,...
如果我们想同时改变属组和属主怎么办,就可以用chown一起改,用:或者用.分开
[[email protected] ~]# chown root:redhat /tmp/
[[email protected] ~]# ll -d /tmp/
drwxrwxrwt. 3 root redhat 4096 Aug 23 20:14 /tmp/
三、chmod
改变文件的权限
chmod:
这个也是支持--reference=/path/to/somefile file,...
可以用=号,可以用+—符号,可以用数字,多种模式
不用a+x ,只有+x也是代表了所有的用户组加上执行权限
[[email protected] skel]# useradd -M nani
[[email protected] skel]# su - nani
su: warning: cannot change directory to /home/nani: No such file or directory
mkdir: cannot create directory ‘/home/nani‘: Permission denied
-bash-4.2$ exit
logout---------之前说过,没有家目录是不能登录的,所以这个练习也是为没有家目录的用户怎么让它可以登录
[[email protected] ~]# cp -r /etc/skel/ /home/nani -r是完全复制(包括一些时间戳,而-a通常用在备份东西上)。
[[email protected] ~]# cd /home/nani
[[email protected] nani]# ls -a
. .. .bash_logout .bash_profile .bashrc .mozilla
[[email protected] nani]# chmod -R go= /home/nani/
[[email protected] nani]# chown -R nani:nani /home/nani/
[[email protected]ww nani]# ls -la
drwx------. 3 nani nani 74 Jul 26 02:45 .
-rw-------. 1 nani nani 18 Jul 26 02:45 .bash_logout
-rw-------. 1 nani nani 193 Jul 26 02:45 .bash_profile
[[email protected] nani]# su - nani
Last login: Sun Jul 26 02:44:59 EDT 2015 on pts/0
[[email protected] ~]$
[[email protected] ~]# ls -ld `which passwd`
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
bc是一个计算器,直接bc然后输入既可以了
所以我们可以手动改文件创建一个目录
passwd,shadow,group加一行 自主创建家目录就可以实现了
实例:手动添加用户hive ,基本组为hive(5000),附加组为mygroup
上图的实例中是没有密码的,所以不能直接ssh登录
这个密码密钥也是可以手动生成的
用这个命令:openssl
手动生成密码的方法(单向加密,输入一样的密码,一样的salt,结果的密钥也是一样的)
上图的意思是创建一个密码,进行加密
但是没有盐,没有杂质,后来加一点指定的盐
形成了一个有盐也有加密的一串密码
将其复制到/etc/shadow相应的用户目录下,就可以实现手动生成密码了
四、umask
决定了我们目录或者文件的默认权限的
注意的一点是我们的umask这样的设定只在当前的shell有用。
文件默认都没有执行权限的。
umask:遮罩码(反向掩码),用户创建文件或者目录的遮罩码
文件是 666-umask
目录是 777-umask
默认的root的umask是022 而普通用户默认的是002
上图是手动修改umask
注意一点的是:文件默认不能执行权限,如果算得的结果有执行权限,则将其权限加1
当然我们用chmod改变是可以的
站在用户的角度来讲,:SHELL的类型:
1.登录式shell
正常通过某终端登录(ssh登录过来的)
su - root
su -l root
2.非登录式shell
su root
图形终端下打开的命令窗口
自动执行的shell脚本
那有什么区别呢?说这个之前,我们介绍一下bash的配置文件:
bash的配置文件:
全局配置(我们编译这里的配置对所有用户都生效)
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置
~/.bash_profile
~/bashrc
一个环境变量全局和个人都有配置,那就是以个人的配置为主,可以这么理解,作用范围越小的,作用越生效
profile类的文件干什么用的?
设定环境变量
运行命令或脚本
bashrc类的文件:
设定本地变量
定义命令别名:如alias
登录式shell如何读取配置文件的?
/etc/profile -->/etc/profile.d/*.sh -----> ~/.bash_profile -->~/.bashrc --> /etc/bashrc
而非登录式shell如何读取的呢?
~/.bashrc -->/etc/bashrc-->/etc/profile.d/*.sh
不读取用户的/etc/profile和~/.bash_profile环境文件
如果我要我个人用户nihao01登录就有提示信息,那就是“运行命令”,
需要在自己家目录的.bash_profile文件去添加即可
[[email protected] ~]$ vim .bash_profile
echo "hello,boy~,welcome to mageLinux ,Now time is `date`"
[[email protected] ~]$ su - root
[[email protected] ~]# su - nihao01
Last login: Sun Jul 26 03:43:03 EDT 2015 on pts/0
hello,boy~,welcome to mageLinux ,Now time is Sun Jul 26 03:43:34 EDT 2015
这两种有什么区别呢
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d/目录的配置文件中搜集shell的设置.
所以如果你有对/etc/profile有修改的话必须得重启你的修改才会生效,此修改对每个用户都生效。
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
如果你想对所有的使用bash的用户修改某个配置并在以后打开的bash都生效的话可以修改这个文件,修改这个文件不用重启,重新打开一个bash即可生效
bash:脚本解释器(理解解释,所以要知道什么叫做编译)
命令替换
[[email protected] ~]# ls -l /etc/shadow
----------. 1 root root 1624 Jul 26 02:44 /etc/shadow
[[email protected] ~]# ls -l `which passwd`
-rwsr-xr-x. 1 root root 27832 Jan 29 2014 /bin/passwd