权限


-rw------- 1 root root  1112 Mar 27 03:14 anaconda-ks.cfg


rw------- 权限用九位来表示

 前三位代表用户(u表示),中间三位代表组(g表示),后三位代表others(o表示)  ,还有一种表示是a(表示所有,all)

权限有三种     r (read)  读    w (write)  写     x (execute)   执行 


 r  读  权限
  针对目录,有r权限,就代表能对此目录有列表的功能   (就是ls列出来的功能)
  针对文件,有r权限,就代表能对此文件有阅读的功能   (就是指cat一类的命令)
 w  写  权限
  针对目录,有w权限,就代表在此目录下创建文件或者目录 (touch,mkdir等),还有就是可以删除目录下的文件
  针对文件,有w权限,就代表能在此文件写入内容或者修改 (>  ,>>, vi 再写等)
 x 执行 权限
  针对目录,有x权限,就代表能进入此目录   (cd)
  针对文件,有x权限,就代表能执行它  (命令,可执行文件等)


chmod - change file access permissions

chown - change file owner and group


权限对root来说有些特殊性

[root@li ~]# chmod u-r /test/
[root@li ~]# ll -d /test
d-wxr-xr-x 3 root root 4096 Apr 18 09:59 /test

[root@li ~]# ls /test/  --可以

[root@li ~]# chmod g-r /test/
[root@li ~]# ll -d /test
d-wx--xr-x 3 root root 4096 Apr 18 09:59 /test
[root@li ~]# ls /test/  --还可以

[root@li ~]# chmod o-r /test/
[root@li ~]# ll -d /test/
d-wx--x--x 3 root root 4096 Apr 18 09:59 /test/
[root@li ~]# ls /test/  --仍然可以

[root@li ~]# ll -d /test/ --把权限都减光了,但还是可以读,写,执行
d--------- 3 root root 4096 Apr 18 09:59 /test/


[root@li /]# chmod u+r,u+w,u+x,g+r,g+x,o+r,o+x /test/  --一次改多个
[root@li /]# ll -d /test/
drwxr-xr-x 3 root root 4096 Apr 18 09:59 /test/

[root@li test]# chmod a-w,a-x /test  --用a表示all来修改权限


r  4
w  2
x  1

rwx  7
rw   6
rx   5
r    4
wx   3
w    2
x    1
---  0

[root@li /]# chown a.root /test/
[root@li /]# chown a.root /test/  -R  --修改/test目录下所有的文件和目录的属主为a,属组为root

 


创建一个文件 test  ,要求 user1用户对它有读写执行,user2,user3,user4用户对它有读和执行,其它用户只读

把user2,user3,user4加到一个组aaa

rwxr-xr--  user1  aaa  test


创建一个文件 test  ,要求 user1用户对它有读写执行,user2,user3,user4用户对它有读和执行,user5 只读 ,user6 只写, user7只执行 --有五种权限需求,不能实现


--上面的针对同一个文件或者目录有三类不同的权限需求,是可以表示出来的;如果有四类或者四类以上的权限需求,就不能表示,那么后面要讲的ACL(access control list)就可以用上了


关于强制保存的讨论?

只有当用户对文件没有写权限的时候,才会在保存时出现要你使用!强制保存的选项

上级目录对user1没有写权限,目录里的文件对user1也没有写权限,那么user1不能强制保存这个文件
而如果把上级目录改为对user1有写权限,就算是目录里的文件对user1没有写权限,user1也可以强制保存这个文件,并且保存后,属主和属组会变为user1;
所以这种情况会比较混乱(特别是文件服务器的情况),所以目录一般默认权限就是755,避免除开目录属主外的用户能够写

 

关于删除文件的讨论?
能不能删除文件或目录与它本身的权限无关,能否删除需要看它的上一级目录的权限,也就是说当前用户对上一级目录有写权限,就可以删除此目录下的文件或子目录


--从上面的强制保存和删除的结论来看,目录的写权限是非常重要的。所以一般目录权限都是755,这是由umask 0022来决定的


为什么默认创建的目录为755,默认创建的文件为644
[root@li /]# umask
0022  --建议不要去修改,会造成权限混乱

 

[user1@localhost ~]$ ll /test/
total 0
?--------- ? ? ? ?            ? test

--目录一般来说都会有x权限,表示能cd进去;上面的情况比较特殊,user1对/test目录没有x权限,但有r权限。所以也就是能ls它,又不能cd它,所以造成了问号的情况;如果r权限也没有的话,也就是不能ls,也不能cd,就会直接报permission denied。

 

======================================

特权位(s),粘贴位(t) 
setuid s位在前三位
setgid s位在中间三位

 

特权位s     --只针对文件有效
 一个可执行文件拥有s位时,当别的用户来执行这个可执行文件的话,使用的权限是此可执行文件属主或者属组的权限

 只针对前三位,中间三位;后三位加不了s位
 对目录可以加,但是无效,因为目录不是命令,根本不能执行它


[root@localhost test]# ll -d /etc
drwxr-xr-x 103 root root 12288 Mar  8 10:45 /etc
[root@localhost test]# ll /etc/shadow
-r-------- 1 root root 1425 Mar  7 16:42 /etc/shadow
[root@localhost test]# ll /usr/bin/passwd
-rwsr-xr-x 1 root root 22960 Jul 17  2006 /usr/bin/passwd


--通过上面的权限可知,普通用户修改密码使用passwd能改自己的密码,但是密码是存放在/etc/shadow里,也就是说普通用户对/etc/shadow没有写的权限,但passwd可执行文件的前三位有s位,所以普通在调用passswd时是用的root的权限

 

实验:
去掉/usr/bin/passwd命令的s位,那么普通用户就不能自己修改密码

 

实验:
修改/bin/touch,加上setuid,setgid,然后使用普通创建文件再查看变化

 

实验:
普通用户可以关机,给关机命令加S位,并在普通用户环境变量里加/sbin的路径

 


粘贴位t --只针对目录有效

--什么情况下一个普通用户才能删除一个文件?
主要这个用户对此文件的上级目录是否可写,可写则可以删除,不可写则不可以删除,与文件的权限无关


特别用在/tmp目录

 有t位的目录,任何用户在有权限的情况下是可以创建文件和目录,就算是有权限删除别人的文件或目录也不能删除,同时互相也不能强制保存修改
 自己只能删除自己创建的目录,用于一些共享上传的文件服务器场合


会提示Operation not permitted --这是操作不允许,不是pemission denied


实验
用两个用户在/tmp目录下各自建立文件,
在有t位的情况下,是否能互相删除,互相强制修改保存
没有t位的情况下又怎样?


--s位和t位都是占用x位,那么是否有x位,主要是看s或t的大小写来判别;
 大写,表示没有x位
 小写,表示有x位


用数字表示特殊权限位
t 1
setgid 2
setuid 4


隐藏属性

lsattr - list file attributes on a Linux sec-
       ond extended file system

chattr  -  change  file attributes on a Linux
       second extended file system

 

[root@localhost /]# lsattr  /etc/shadow
------------- /etc/shadow
[root@localhost /]# chattr +i /etc/shadow
[root@localhost /]# lsattr  /etc/shadow --有了i权限后,此文件就不能改动,root用户都不行
----i-------- /etc/shadow

man chattr --查看隐藏属性的用法

 

实验:
加一个大写的A的隐藏属性,可以让文件的access time属性不会变,用来减少磁盘的I/O(access time属性使用stat 命令去查看) --注意:A属性对于再touch一次这个文件是无效的

 


================================

常用的系统命令


[root@localhost ~]# mii-tool   --在虚拟机下不支持
eth0: negotiated 100baseTx-FD, link ok --这表示网卡和网线OK

[root@localhost ~]# mii-tool
eth0: no link  --这表示网卡OK,但网线没插好等情况
 

[root@localhost ~]# mii-tool
no MII interfaces found  --这表示网卡松动,或者是网卡没有被激活,或者模块不支持等情况

 

[root@localhost ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:23:CD:95:DA:0B 
          inet addr:10.1.1.35  Bcast:10.1.1.255  Mask:255.255.255.0
          inet6 addr: fe80::223:cdff:fe95:da0b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15768 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1404 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1187943 (1.1 MiB)  TX bytes:577140 (563.6 KiB)
          Interrupt:193 Base address:0x4c00

[root@li ~]# ifconfig eth0 10.1.1.35 netmask 255.255.255.0

[root@li ~]# ifconfig eth0 down
[root@li ~]# ifconfig eth0 up

[root@li ~]# ip addr


ping 10.1.1.192 --直接ping一个IP 测试是否能通

ping -c 4 10.1.1.192 --只PING 4个包


[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU/Linux

[root@localhost ~]# uname -r
2.6.18-164.el5  --内核版本

[root@li ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
--操作系统版本,有时候会去修改用于安装软件时版本不兼容时的一个欺骗安装

[root@li ~]# ls /usr/src/kernels/2.6.18-164.el5-i686/
--内核源代码的路径


[root@localhost ~]# uname -m
i686

[root@localhost ~]# ls /lib/modules/`uname -r`

 


修改主机名三步:

hostname li.cluster.com --临时修改当前主机名


vim /etc/sysconfig/network --系统全局的网络配置文件
 HOSTNAME=li.cluster.com --永久修改当前主机名 FQDN(full qualified domain name)有些软件是要求主机名为fqdn格式,例如apache


vim /etc/hosts
 10.1.1.35       li.cluster.com --在这里加上修改过的主机和IP对应

 

[root@localhost ~]# vim /etc/nsswitch.conf
hosts:      files dns


-------------------------------------------------


  ssh - OpenSSH SSH client (remote login pro-
     gram)

 

[root@localhost ~]# ssh 10.1.1.172
[root@localhost ~]# ssh zhou.139.com --也可以ssh接主机名,但要求/etc/hosts里有对应


[root@localhost ~]# ssh 10.1.1.104 --默认以当前用户远程登陆
The authenticity of host '10.1.1.104 (10.1.1.104)' can't be established.
RSA key fingerprint is b1:70:27:ac:ad:f6:ab:35:00:5a:b7:ad:ad:e4:43:0a.
Are you sure you want to continue connecting (yes/no)? yes  --第一次远程登陆会让你输入yes,因为它会加一个RSA值到/root/.ssh/known_hosts文件里,下次再ssh这台机,就不用再输入yes了

 
10.1.1.104 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA/HQMabL2hR0qKrNxJU34WWLvKjnjT9FFbRYk5EcsZMNAFR+k0sXUT8YjSRNiAQlRfWNRp8Wbxh7XGvQ9YJpzxxkQA9LP+W/O4e+2TMKt3vfDLP0M6SWuykQ+aChpQokXouNGZsHo3Y1xa7ysgvV4CVAl6ItxjdeKkCy2oiArggnIiKYVtFg20Y44SzxH7ycdnLdj09ftIsZZlkC1Bld4x1i5QUmUkzJEgHsLj0rpe4U8gfbrhJw5m02Y6cE655XPpFxuP7VF/L8a8i0+SEKgwO8FfSUngKfn2YjKlgXKstyVJvK+nCKXRT6XNTNE5f5uSUIcEsWrTn+OPKfoClpJew==


[root@localhost ~]# ssh 10.1.1.104
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
7f:7b:7e:55:bf:28:4b:be:34:22:1c:42:39:cc:f8:ff.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:6
RSA host key for 10.1.1.104 has changed and you have requested strict checking.
Host key verification failed.

--遇到此报错,有可能是因为104的IP被另一台电脑使用,就把/root/.ssh/known_hosts里关于104电脑的RSA KEY信息给删除掉  就可以再加了


[root@localhost ~]# su - user1
[user1@li ~]$ ssh 10.1.1.172 --如果本机有user1,可以使用user1直接ssh,就是连接对方的user1

[root@localhost ~]# ssh user1@10.1.1.172 --也可以这样去连user1,最主要是对方要有user1用户,本机有没有user1不必要

[root@li ~]# ssh 2.2.2.171 -l user1  --还有一种 使用-l参数


[root@localhost ~]# ssh 10.1.1.172 date    --调对方的命令
root@10.1.1.172's password:
hello ,this is root
2011年 03月 08日 星期二 14:34:22 CST


[root@li ~]# ssh 10.1.1.220 -X system-config-date --调有关图形,需要加-X


ssh 10.1.1.104 -Y   --登陆到104的主机后,可以任意调用图形  
 调图形要注意的是远程服务器要图形支持

===========================

 

关于踢掉一个远程登录的终端连接的方法

who 或 w 命令找出是谁登录到哪个终端

ps -ef |grep pts/2   --假如登录到pts/2,就这样去查找它的PID(PID为最前面的数字)

kill -9 PID  --杀掉这个进程号

====================================


[root@li ~]# scp /share/soft/iso/rhel-5.4-server-i386-dvd.iso 10.1.1.220:/root/Desktop/

[root@li ~]# scp -r /share/soft/iso/ 10.1.1.220:/root/Desktop/


 scp 10.1.1.104:/root/Desktop/sn.txt /root/Desktop/   --从远端拷到本端

 scp  -r 10.1.1.104:/root/Desktop/ /root/Desktop/   --拷目录也要加-r参数

scp -r aaa.bb.com:/root/Desktop/ /root/Desktop/ --可以用主机名替代IP,但要写到/etc/hosts里 


[root@li Desktop]# scp /usr/src/kernels/2.6.18-164.el5-i686/drivers/net/arm/Makefile 10.1.1.172:/usr/src/kernels/2.6.18-164.el5-i686/drivers/net/arm/

--把上面的命令转换为下面拷贝方法
[root@li Desktop]# cd /usr/src/kernels/2.6.18-164.el5-i686/drivers/net/arm/
[root@li arm]# scp Makefile 10.1.1.172:`pwd`/


=========================================

windows下的远程ssh工具有很多,常用的有securityCRT , putty等


===========================================

====================================================================

网络配置

ifconfig eth0 10.1.1.36 netmask 255.255.255.0 --临时修改你的IP地址


ifconfig eth0:0 10.1.1.36 netmask 255.255.255.0 --在eth0的基础上虚拟出eth0:0的网卡

[root@localhost ~]# ifconfig eth0:1 10.1.1.37 netmask 255.255.255.0
[root@localhost ~]# ifconfig eth0:2 10.1.1.38 netmask 255.255.255.0


手动修改物理地址的方法:
先要ifconfig eth0 down

ifconfig eth0 hw ether 00:01:22:AB:EF:CD 

ifconfig eth0 up

[root@li Desktop]# system-config-network --图形修改的程序,不建议用


vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0  --定义设备号
BOOTPROTO=dhcp  --定义获取IP的方式为dhcp
HWADDR=00:25:86:90:7B:67 --定义物理地址
ONBOOT=yes  --定义此网卡设备是否启动


DEVICE=eth0
BOOTPROTO=static --定义获取IP的方式为static  静态IP
IPADDR=10.1.1.35 --定义静态IP
NETMASK=255.255.255.0 --定义子网掩码
GATEWAY=10.1.1.1 --手动定义你的网关,就是route -n命令看到的默认网关 这一句也可以写到/etc/sysconfig/network这个文件下(是全局生效,就是对所有网卡都生效)
HWADDR=00:23:CD:95:DA:0B
ONBOOT=yes

# /etc/init.d/network restart  --修改完后重启你的网络服务,使配置生效


-------------------------------------------


[root@li Desktop]# vim /etc/sysconfig/network

NETWORKING=yes  --这里是全局设置,如果这里为no,那么本机的网络将不可用


service network restart  --重启网络服务

/etc/init.d/network restart --重启网络服务 


vim /etc/sysconfig/network-scripts/ifcfg-eth0:0  --此文件不存在,需要手动建立
DEVICE=eth0:0
BOOTPRO=static
IPADDR=10.1.1.36
NETMASK=255.255.255.0
ONBOOT=yes

 

==================================================================

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0-range0
--一次性虚拟多个IP,此文件不存在,也需要手动创建

IPADDR_START=10.1.1.37  --虚拟的IP起始值
IPADDR_END=10.1.1.50  --虚拟的IP结束值 
NETMASK=255.255.255.0  --子网掩码
CLONENUM_START=10  --指的是eth0:后的数字起始值

===================================================================


图形配置工具  setup


--下面两个文件是一个硬连接(物理上是同一个文件)

[root@li ~]# ll -i /etc/sysconfig/networking/devices/ifcfg-eth0
10673958 -rw-r--r-- 5 root root 189 Jun 30 16:42 /etc/sysconfig/networking/devices/ifcfg-eth0
[root@li ~]# ll -i /etc/sysconfig/network-scripts/ifcfg-eth0
10673958 -rw-r--r-- 5 root root 189 Jun 30 16:42 /etc/sysconfig/network-scripts/ifcfg-eth0


==============================================


useradd user1  这条命令,在系统里自动做了哪些事

vim /etc/passwd
user1:x:504:504::/home/user1:/bin/bash

vim /etc/shadow
user1:!!:15079:0:99999:7:::

vim /etc/group
user1:x:504:

vim /etc/gshadow
user1:!::

mkdir /home/user1
chown user1:user1 /home/user1/

 

===========================================
注意拷贝环境变量模板要注意,下面几种拷贝命令都有错误:
cp /etc/skel/ /home/user1/ -rf  错
cp /etc/skel/* /home/user1/ -rf  错
cp /etc/skel/.* /home/user1/ -rf 错,因为.*也包含了..,所以把上级目录也就是/etc/下的所有东西也拷过去了

cp /etc/skel/.bash* /home/user1/ 正确拷法

=============================================

touch /var/spool/mail/user1
chown user1.mail /var/spool/mail/user1


[root@localhost ~]# grub-md5-crypt  --使用这个命令用md5算出一个加密密码字符串,并手动加到/etc/shadow的第二列里
Password:
Retype password:
$1$Oere/0$z35W83sqcFSEJljeyyoZe/

 

使用小写a隐藏参数表示文件只能被追加内容,不能修改或清空

    

--删除最后一行
[root@li ~]# cat -n /etc/passwd |tail -1
    60  sdfdfa
[root@li ~]# sed -i '60d' /etc/passwd