前段时间由于个人原因长时间没有更新,后面会继续更新的。这都是我在学习linux时做的笔记,写在这里方便大家也是方便自己。
/etc/passwd文件格式:
root:x:0:0:root:/root:/bin/bash
1. 用户名
2. 用户的密码占位符
3. UID
4. GID
5. 注释信息
6. 用户家目录
7. 用户默认的shell
/etc/group 文件格式:
www:x:1002:
1. 组名
2. 组密码占位符
3. GID
4. 以此组为其附加组的用户的用户名列表,如果有多个用户可以用逗号隔开
/etc/shadow文件格式:
www:!!:15836:0:99999:7:::
zhou:$1$zNXbcLE7$ANbOzBEBzSGWD.wy21.b31:16041:0:99999:7:::
1. 用户的登陆名;
2. 加密过的密码,如果为!!则表示此用户已禁用;
加密方法是md5(Message Degist 消息摘要),这是一个单向加密算法。
单向加密的特点:
2.1 定长输出 128bit。不管源数据多长,加密后的密文都一样长;
2.2 雪崩效应,即:改变了一点,加密后的结果都不一样;
2.3 源文一样,加密后的密文都一样;
常见的单向加密算法:sha1 = secure hash algorithm 安全的hash算法;
$1$zNXbcLE7$ANbOzBEBzSGWD.wy21.b31
第1和第2个$之间的那个”1”表示:加密的方法是md5;
第2和第3个$之间的那串字符表示:系统在给密码加密的时候所添加的“盐”,是为了防止相同的密码加密后的密文一样,造成信息的泄露,这一点是利用了md5的雪崩效应;
第3个$后面的字符串就是密码+“盐”后的密文;
3. 记录从1970年1月1日开始到你最近一次修改密码之间所经过的天数;也就是密码的最近修改时间;
4. 密码最短使用期限:单位天数,默认为0,表示不限制;
5. 密码最长使用期限:单位天数,默认是99999,表示可以永久有效;
6. 在密码过期N天之前,向用户发出警告;默认是7天;
用户帐号的非活动期,在此期间,用户登陆后第一件事,就是修改自己的密码;当错过此时间后,此帐号会被禁用。只有找root来启用;
7. 用户帐号的有效期限;
8. 最后一段做保留;
创建用户
useradd|adduser [options] username
/etc/default/useradd 该文件用来初始化一些参数的值。比如默认的shell,默认的家目录的位置等;
/etc/skel/ 该目录中的文件就是在创建新用户时的模板文件,当创建好一个用户时,就会把该目录下的文件CP到该用户的家目录下面,一般该目录都是隐藏的文件;
/etc/login.defs 该文件指定了用户的UID和GID的最小值500和最大值60000,默认添加用户的时候就从最小值开始;
-c 表示为当前要添加的用户写个注释信息;
-u 表示指定用户的UID;
-g 表示指定用户的GID;
-G 表示指定用户的附加组;
-d 表示指定用户的家目录位置;
-M 表示不为用户创建家目录;
-s 表示指定用户的默认shell;选项都在/etc/shells中
-e 指定用户的过期日期,格式MM/DD/YYYY
-o 表示可以创建一个与已知的UID相同的用户,例如# useradd –o –u 0 xfzhou 表示创建了一个uid为0的xfzhou用户,当然了这个用户也是root。在Linux中是根据UID来识别用户的级别的;
-r 创建一个程序用户,UID范围是 1-499,这些用户是不能登陆系统的;
当用户创建完成后,该用户由于没有密码,所以是不能直接登陆系统的。可以先由root给该用户先设置个初始密码。当用户登陆后就可以自己来改密码了;
#passwd username
#passwd //不写用户名就是给当前用户改密码;
passwd –l 锁定一个用户
passwd –u 解锁用户
passwd –stdin < passwdfile
创建组:
groupadd [options] groupname
# groupadd -g num group1 创建组的同是为组设置gid
gpasswd命令:
gpasswd -a user1 group1 //把用户user1添加到group1中去。
gpasswd -d user2 group2 //把user2从group2组中删除;
gpasswd -M user1 user2 user3 group1 一次性把多个用户添加到指定的组中;
查看用户信息:
# id [options].. username
-u 显示指定用户的UID
-g 显示用户的GID
-G 显示用户附加组
-n 显示用户的用户名
[root@Nginx ~]# id -u root
0
[root@Nginx ~]# id -g root
0
[root@Nginx ~]# id -G root
0 1 2 3 4 6 10
[root@Nginx ~]# id -G root -n
root bin daemon sys adm disk wheel
[root@Nginx ~]#
# finger username //user information lookup program
[root@Nginx /]# finger root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since 一 12月 2 21:10 (CST) on pts/0 from 192.168.10.254
On since 一 12月 2 22:12 (CST) on pts/1 from 192.168.10.254
1 hour 35 minutes idle
New mail received 一 12月 2 22:19 2013 (CST)
Unread since 六 5月 11 14:07 2013 (CST)
No Plan.
[root@Nginx /]#
# who
[root@Nginx /]# who
root pts/0 2013-12-02 21:10 (192.168.10.254)
root pts/1 2013-12-02 22:12 (192.168.10.254)
[root@Nginx /]#
# w
[root@Nginx /]# w
23:49:47 up 2:42, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.10.254 21:10 0.00s 0.48s 0.01s w
root pts/1 192.168.10.254 22:12 1:37m 0.06s 0.04s man useradd
[root@Nginx /]#
# whoami
[root@Nginx /]# whoami
root
[root@Nginx /]#
修改用户属性:
usermod
chage
chfn
chsh
chsh username 更改用户的shell和passwd的用法有点像
chfn username 修改用户的注释信息。
usermod [options] username
-u 更改用户的UID
-g 更改用户的GID
-G 更改用户的附加组,如果只有“-G”则是更换用户的附加组。如果想给用户增加一个附加组的话,可以使用“-G number -a”,加上“-a” 其实就是Append的意思,这样就不会把原来的覆盖掉;
-c 修改用户的注释信息;
-s 修改用户的默认shell
-d 更改用户的家目录位置,要配全-m来使用即:”usermod –d /path/dir –m username”,-m:表示移动用户的家目录,因为用户的家目录下面还有可能有其他的文件;
-l 更改用户的登陆名;
-L 锁定用户
-U 解锁用户
删除用户:
userdel [options] username
-r 表示在删除用户的时候同时把用户的家目录也删除。默认是不删除用户的家目录的。是为了能够再找回用户的资料;
创建用户组:
groupadd [options] groupname
-g 指定组id
-r 创建系统组 1-499
修改用户组信息:
groupmod [options] groupname
-g GID
-n 修改组名称
删除组:
groupdel groupname
给组加密码:
在切换基本组的时候,需要输入组的密码;
.NETgrp grouname //会提示输入密码;
gpasswd -a USER GROUP //将用户USER加入到GROUP组中,注意,这里是附加组;
gpasswd –d USER GROUP //将用户USER从GROUP组中移除;也是附加组;
gpasswd –A USER1,USER2.... GROUP
gpasswd –M USER1,USER2.... GROUP //这两个都是一次性向GROUP中添加多个用户;
用户切换命令:
su - switch user
su USERNAME //非登陆式切换;
su – USERNAME //登陆式切换;
su –l USERNAME //登陆式切换;
su – USERNAME –c ‘command’ 切换到指定用户后,以用户的shell执行command
su USERNAME -c ‘command’
Linux权限和八进制的对应关系:
Linux权限 |
二进制 |
八进制 |
--- |
000 |
0 |
--x |
001 |
1 |
-w- |
010 |
2 |
-wx |
011 |
3 |
r-- |
100 |
4 |
r-x |
101 |
5 |
rw- |
110 |
6 |
rwx |
111 |
7 |
例如:rwxr-xr-x 755
第一个3位对应 文件的属主的权限;用u表示文件的属主;
第二个3位对应 文件属组的权限;用g表示文件属组
第三个3位对应 其他人的权限;用o表示其他人;
用a表示所有人;
修改文件的权限:
chmod [options] perm file..
perm的指定方法:
chmod 777 /tmp/test.txt
chmod u=rwx,g=rwx /tmp/test.txt
chmod g=w /tmp/test.txt //注意这个g=w会直接覆盖掉以前的权限;如果要想在原有的权限上增加一个权限,应该使用g+rwx,如果要取消用户的某位的权限则要使用-rwx;
chmod g+x,o-rw /tmp/test.txt
chmod a-w /tmp/test.txt
在修改目录的权限的时候,可以使用-R 来对目录下的文件的权限也进行修改;
chmod –R 775 /tmp/test
在文件的权限中还有三个特殊的权限:SUID、SGID和t(粘滞位)
SUID、SGID通常叫作SET位权限,多用于对可执行脚本或程序来设置,例如/usr/bin/passwd 它就是被设置了SUID的程序;
SUID表示:对属主添加SET位权限;SGID表示:对属组设置SET位权限;当某个文件被设置了SUID或SGID后,任何用户在执行该文件的时候,都会获得该文件对应的属主或属组身份所拥有的权限!要注意的是:SUID、SGID只能对文件的属主和属组来设置;
SUID 对应八进制中的4,SGID对应八进制中的2;这两个都可以使用”s”来表示;
方法:chmod u+s,g+s filename
chmod 4777 filename
chmod 6777 filename2
当一个文件被设置了SET位权限后,其对应的x就会变成”s”,如果该文件原本不具有执行权限,则会变成”S”
t(粘滞位):该权限一般用在一个开放的目录中;在一个开放的目录,会有很多个用户的文件,每个用户对这个开放的目录都具有写权限,所以对这个开放的目录设置t权限可以防止,某个用户删除不属于他的文件;注意粘滞位权限通常只对目录设置,并且只能设置在权限的第三个3位上,也就是其他人的权限位上;t对应八进制中的1。
方法:
chmod o+t filename
chmod 1777 filename
改变文件的属主和属组:
chown [options] filename
chown USERNAME:GROUPNAME filename
chown –R USERNAME filename
chown –R .GROUPNAME filename
chgrp –R GROUPNAME filename
还有几个特殊的权限:
chattr {+|-}{i|a} filename
如果是+i 则是锁住文件的i节点,这样所有用户(包括root)都无法删除和修改该文件。使用ls –lh只能看到正常的文件属性。这时如果你有权限,但是却删除不了的时候,你就要检查下文件的特殊权限了,使用lsattr来查看;
同样的,chattr +a file 则是使用该文件只能以追加的方式向里面添加内容,不能直接使用其他文本编辑器打开添加;同样所有的用户也包括root是无法删除的,这种属性通常会用在日志文件上;