重要数据的丢失可能意味着致命的破坏。尽管如此,还是有无数专业人员忽视了对他们的数据的备份。虽然原因可能各不相同,但是,最常见的一个解释是,执行例行备份确实烦琐。由于机器擅长于完成普通而重复的任务,因此,自动化备份的过程是降低工作内在的枯燥性和人们与生俱来的拖延倾向的关键所在。
简单备份
在研究更高级的分布式备份解决方案之前,让我们首先来看一个简单而强大的存档机制。让我们来分析一个名为 arc 的方便的脚本,它可以让我们在 Linux shell 提示符中创建备份快照。
#!/bin/sh
tar czvf $1.$(date +%Y%m%d%-H%M%S).tgz $1
exit $?
清单 1. arc shell 脚本
arc 脚本接收一个单独的文件或目录名作为参数,创建一个压缩的存档文件,同时将当前日期嵌入到生成的存档文件的名字之中。例如,如果您有一个名为 beoserver 的目录,您可以调用 arc 脚本,将 beoserver 目录名传递给它以创建一个压缩的存档文件,如:
beoserver.20040321-014844.tgz
使用 date 命令是为了嵌入一个日期和时间戳以帮助您组织存档文件。日期的格式是年、月、日、小时、分、秒 —— 虽然秒域的使用有一些多余。查看 data 命令的手册( man date)来了解其他选项。另外,在清单 1 中,我们向 tar 传递了 -v(verbose)选项。这就使得 tar 显示出它正在存档的文件。如果您喜欢静默地进行备份,那么删除这个 -v 选项。
$ ls
arc beoserver
$ ./arc beoserver
beoserver/
beoserver/bookl.dat
beoserver/beoserver_ab_off
beoserver/beoserver_ab_on
$ ls
arc beoserver
beoserver.20040321-014844.tgz
清单 2. 存档 beoserver 目录
高级备份
这个简单备份是实用的;不过,它仍然包含一个人工备份的过程。行业最佳经验通常建议将数据备份到多个媒体上,并备份到分开的不同地理位置。中心思想是避免依赖于任何一个单独的存储媒体或单独的位置。
在下一个例子中我们将应对这一挑战,我们将分析一个如图 1 所示的假想的分布式 络,它展示了对两台远程服务器和一台离线存储服务器的系统管理。
图 1. 分布式 络
服务器” #1 和 #2 上的备份文件将安全地传输到离线存储服务器上,而且整个分布式备份过程将在没有人工干涉的情况下定期进行。我们将使用一组标准的工具(开放安全 shell 工具套件(OpenSSH)的一部分),以及磁带存档器(tar)和 cron 任务调度服务。我们的全部计划是,使用 cron 进行调度,使用 shell 程序和 tar 应用程序完成备份过程,使用 OpenSSH 安全 shell(ssh)加密进行远程访问、认证、安全 shell 拷贝(scp)以自动完成文件传输。要获得另外的资料请务必查看每个工具的手册。
““““““
省时省力—在Linux系统上进行自动备份 (2)
使用公钥/私钥进行安全的远程访问
要进行备份过程的每台机器都必须运行 OpenSSH 安全 shell 服务(sshd),同时让 22 端口可以通过任何内部防火墙被访问。如果您访问远程的服务器,那么很有可能您正在使用安全 shell。
在 shell 提示符中,输入 ssh 并给出重要的 V 选项来检查版本 :
$ ssh -V
OpenSSH_3.5p1, SSH protocols 1.5/2.0, OpenSSL 0x0090701f
如果 ssh 返回的版本 大于 2.x,则机器处于相对良好的状态。无论如何,建议您所有的软件都使用最新的稳定版本,这对于安全相关的软件来说尤其重要。
我们的第一个步骤是,使用将会有特权访问服务器 1 和 2 的帐 登录到离线存储服务器机器(见图 1)。
$ ssh accountname@somedomain.com
登录到离线存储服务器以后,使用 ssh-keygen 程序并给出 -t dsa 选项来创建一个公钥/密钥对。 -t 选项是必须的,用来指定我们要生成的密钥类型。我们将使用数字签名算法(Digital Signature Algorithm,DSA),它让我们可以使用更新的 SSH2 协议。参阅 ssh-keygen 手册以获得更多细节。
在 ssh-keygen 执行的过程中,在询问您口令(passphrase)之前,将提示您输入 ssh 密钥存储的位置。当询问在何处存储密钥时只需要按下回车键,然后 ssh-keygen 程序将创建一个名为 .ssh 的隐藏目录(如果原来不存在),以及两个文件,一个公钥文件和一个私钥文件。
ssh-keygen 的一个有趣特性是,当提示输入一个口令时,它让您可以只是简单地按下回车键。如果您没有给出口令,那么 ssh-keygen 将生成没有加密的密钥!如您所想,这不是个好主意。当要求输入口令时,确保输入一个足够长的字符消息,最好包含混合字符而不仅仅是一个简单的密码字符串。
[offsite]:$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/accountname/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): (enter passphrase)
Enter same passphrase again: (enter passphrase)
Your identification has been saved in /home/accountname/.ssh/id_dsa.
Your public key has been saved in /home/accountname/.ssh/id_dsa.pub.
The key fingerprint is:
7e:5e:b2:f2:d4:54:58:6a:fa:6b:52:9c:da:a8:53:1b accountname@offsite
清单 3. 永远选择好的口令
由于 ssh-keygen 生成的 .ssh 目录是一个隐藏的“dot”目录,所以要给 ls 命令传入一个 -a 选项来查看新创建的目录:
[offsite]$ ls -a
. .. .bash_logout .bash_profile .bashrc .emacs .gtkrc .ssh
进入隐藏的 .ssh 目录并列出其内容:
[offsite]$ cd .ssh
[offsite]$ ls -lrt
id_dsa id_dsa.pub
然后,我们需要将公钥拷贝并安装到服务器 1 和 2 上。不要使用 ftp。更合理的是,使用安全拷贝程序来将公钥传送到每一台远程机器上。
[offsite]$ scp .ssh/id_dsa.pub accountname@server1.com:offsite.pub
accountname@server1.com’s password: (enter password, not new
passphrase!)
id_dsa.pub 100% |*****************************| 614
[offsite]$ scp .ssh/id_dsa.pub accountname@server2.com:offsite.pub
accountname@server2.com’s password: (enter password, not new
passphrase!)
id_dsa.pub 100% |*****************************| 614
清单 4. 将公钥安装到远程服务器上
[offsite]$ ssh accountname@server1.com
accountname@server1.com’s password: (enter password, not new
passphrase!)
[server1]$ cat offsite.pub >> ./ssh/authorized_keys
清单 5. 将 offsite.pub 添加到已授权密钥列表
接下来的步骤是考虑一些额外的安全性。首先,我们修改 .ssh 的访问权限,以使得只有所有者有读、写和执行的权限。然后,我们确保 authorized_keys 文件只能由所有者来访问。最后,将先前上传的 offsite.pub 密钥文件删除,因为再也不需要它了。确保设置适当的访问权限很重要,因为 OpenSSH 服务器可能会拒绝使用具有不安全访问权限的密钥。
[server1]$ chmod 700 .ssh
[server1]$ chmod 600 ./ssh/authorized_keys
[server1]$ rm offsite.pub
[server1]$ exit
清单 6. 使用 chmod 修改权限
在服务器 2 上完成同样的步骤后,我们就可以返回到离线存储机器上来测试新的口令类型的访问。在离线服务器上您可以输入下面的内容:
[offsite]$ ssh -v accountname@server1.com
“““““
省时省力—在Linux系统上进行自动备份 (3)
在检验您的帐 现在可以使用新的口令而不是原来的密码来访问远程的服务器时,使用 -v 或 verbose 标记选项来显示调试信息。调试输出除了能让您在一个高的层面上观察到认证过程是如何工作的之外,还可以显示出您可以以其他方式无法得到的重要信息。在以后的连接中您可能并不需要指定 -v 标记;但是在测试连接时它相当有用。
使用 ssh-agent 自动化机器访问
ssh-agent 程序如同一个看门人,它根据需要安全地提供对安全密钥的访问。ssh-agent 启动后,它就会在后台运行,并且可以由 ssh 和 scp 程序等其他 OpenSSH 应用程序所使用。这就使得 ssh 程序可以请求一个已经解密了的密钥,而不是在每次需要时向您询问私钥的安全口令。
让我们来仔细研究一下 ssh -agent。ssh-agent 运行时它会输出 shell 命令:
[offsite]$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-XX1O24LS/agent.14179; export SSH_AUTH_SOCK;
SSH_AGENT_PID=14180; export SSH_AGENT_PID;
echo Agent pid 14180;
清单 7. ssh-agent 应用
我们可以使用 shell 的 eval 命令来让 shell 执行 ssh-agent 显示的输出命令:
[offsite]$ eval `ssh-agent`
Agent pid 14198
eval 命令告诉 shell 去评价(执行)ssh-agent 程序生成的命令。确保您指定的是反引 (`)而不是单引 !执行后,eval `ssh-agent` 语句将返回代理的进程标识符。在幕后,SSH_AUTH_SOCK 和 SSH_AGENT_PID shell 变量已经被导出而可以使用。您可以将它们显示在 shell 控制台中来查看它们的值:
[offsite]$ echo $SSH_AUTH_SOCK
/tmp/ssh-XX7bhIwq/agent.14197
$SSH_AUTH_SOCK (SSH Authentication Socket 的缩写)是一个本地套接字的位置,应用程序可以通过它来与 ssh-agent 通信。将 eval `ssh-agent` 语句加入到您的 ~/.bash_profile 文件以确保 SSH_AUTH_SOCK 和 SSH_AGENT_PID 始终被注册。
ssh-agent 现在就已经成为一个后台进程,可以用 top 和 ps 命令查看得到。
现在我们就已经可以使用 ssh-agent 共享我们的口令。为此,我们必须使用一个名为 ssh-add 的程序,这个程序将我们的口令添加(发送)到运行着的 ssh-agent 程序。
[offsite]$ ssh-add
Enter passphrase for /home/accountname/.ssh/id_dsa: (enter passphrase)
Identity added: /home/accountname/.ssh/id_dsa
(/home/accountname/.ssh/id_dsa)
清单 8. 用于免口令登录的 ssh-add
现在,当我们访问 server1 时,不会再被提示输入口令:
[offsite]$ ssh accountname@server1.com
[server1]$ exit
如果您还不相信,那么尝试去掉(kill -9)ssh-agent 进程,然后重新连接 server1。这一次,您将注意到,server1 将会询问存储在 .ssh 目录下 id_dsa 中的私钥的口令:
[offsite]$ kill -9 $SSH_AGENT_PID
[offsite]$ ssh accountname@server1.com
Enter passphrase for key ‘/home/accountname/.ssh/id_dsa’:
“““““““““`
省时省力—在Linux系统上进行自动备份 (4)
使用 keychain 简化密钥访问
到现在为止,我们已经了解了几个 OpenSSH 程序(ssh、scp、ssh-agent 和 ssh-add),而且我们已经创建并安装了私钥和公钥来启用一个安全而且自动的登录过程。您可能已经意识到,大部分设置工作只需要进行一次。例如,创建密钥、安装密钥、通过 .bash_profile 执行 ssh-agent 的过程在每台机器只需要进行一次。那真是好消息。
不太理想的消息是,我们每次登录到离线的机器上时,都必须调用 ssh-add,而且,ssh-agent 与我们将要用来自动化备份工作的 cron 调度进程并不直接兼容。cron 进程不能与 ssh-agent 通信的原因是,cron 作业是作为 cron 的子进程来执行,这样它们就不会继承 $SSH_AUTH_SOCK shell 变量。
幸运的是,有一个解决方案不但可以消除 ssh-agent 和 ssh-add 的局限,而且可以让我们使用 cron 来自动进行各种需要对其他机器进行安全地无密码访问的过程。在他 2001 年发表的三篇 developerWorks 系列文章中,即 OpenSSH key management(参阅 参考资料 以获得链接),Daniel Robbins 介绍了一个名为 keychain 的 shell 脚本,它是 ssh-add 和 ssh-agent 的一个前端,简化了整个无密码的过程。随着时间的过去,keychain 脚本已经经历了很多改进,现在由 Aron Griffis 维护,其最新的 2.3.2-1 发布版本公布于 2004 年 6 月 17 日。
下载并安装了 keychain 后,使用它就很简单了。只需要登录到每台机器并将下面两行添加到每个 .bash_profile 文件:
keychain id_dsa
. ~/.keychain/$HOSTNAME-sh
在您第一次重新登录到每台机器时,keychain 将向您询问口令。不过,除非机器被重新启动,否则,以后再登录时,keychain 将不会再要求您重新输入口令。最好的是,cron 任务现在可以使用 OpenSSH 命令来安全地访问远程的机器,而不需要交互地使用口令。更好的安全和更容易的使用,现在我们已经兼得。
KeyChain 2.3.2; http://www.gentoo.org/projects/keychain
Copyright 2002-2004 Gentoo Technologies, Inc.; Distributed under the
GPL
* Initializing /home/accountname/.keychain/localhost.localdomain-sh
file…
* Initializing /home/accountname/.keychain/localhost.localdomain-csh
file…
* Starting ssh-agent
* Adding 1 key(s)…
Enter passphrase for /home/accountname/.ssh/id_dsa: (enter passphrase)
清单 9. 在每台机器上初始化
脚本化备份过程
我们的下一个任务是创建执行必要的备份过程的 shell 脚本。目标是执行服务器 1 和 2 的完全数据库备份。在我们的例子中,每个服务器都运行着 MySQL 数据库服务器,我们使用 mysqldump 命令行工具来将一些数据库表导出到一个 SQL 输入文件中。
#!/bin/sh
# change into the backup_agent directory where data files are stored.
cd /home/backup_agent
# use mysqldump utility to export the sites database tables
mysqldump -u sitedb -pG0oDP@sswrd –add-drop-table sitedb –tables
tbl_ccode tbl_machine tbl_session tbl_stats > userdb.sql
# compress and archive
tar czf userdb.tgz userdb.sql
清单 10. 服务器 1 的 dbbackup.sh shell 脚本
在服务器 2 上,我们将设置一个类似的脚本来备份站点数据库中给出的独有表单。每个脚本都通过下面的步骤标记为可执行的:
[server1]:$ chmod +x dbbackup.sh
在服务器 1 和 2 上设置了 dbbackup.sh 后,我们返回到离线的数据服务器,在那里我们将创建一个 shell 脚本来调用各个远程 dbbackup.sh 脚本并随后传输压缩的(.tgz)数据文件。
#!/bin/sh
# use ssh to remotely execute the dbbackup.sh script on server 1
/usr/bin/ssh backup_agent@server1.com “/home/backup_agent/dbbackup.sh”
# use scp to securely copy the newly archived userdb.tgz file
# from server 1. Note the use of the date command to timestamp
# the file on the offsite data server.
/usr/bin/scp backup_agent@server1.com:/home/backup_agent/userdb.tgz
/home/backups/userdb-$(date +%Y%m%d-%H%M%S).tgz
# execute dbbackup.sh on server 2
/usr/bin/ssh backup_agent@server2.com “/home/backup_agent/dbbackup.sh”
# use scp to transfer transdb.tgz to offsite server.
/usr/bin/scp backup_agent@server2.com:/home/backup_agent/transdb.tgz
/home/backups/transdb-$(date +%Y%m%d-%H%M%S).tgz
清单 11. 用在离线的数据服务器上的 backup_remote_servers.sh shell 脚本
backup_remote_servers.sh shell 脚本使用 ssh 命令来执行远程服务器上的脚本。由于我们已经设置的无密码的访问,ssh 命令可以通过离线的服务器在服务器 1 和 2 上远程地执行命令。感谢 keychain,整个认证过程现在可以自动完成。
““““““““`
省时省力—在Linux系统上进行自动备份 (4)
使用 keychain 简化密钥访问
到现在为止,我们已经了解了几个 OpenSSH 程序(ssh、scp、ssh-agent 和 ssh-add),而且我们已经创建并安装了私钥和公钥来启用一个安全而且自动的登录过程。您可能已经意识到,大部分设置工作只需要进行一次。例如,创建密钥、安装密钥、通过 .bash_profile 执行 ssh-agent 的过程在每台机器只需要进行一次。那真是好消息。
不太理想的消息是,我们每次登录到离线的机器上时,都必须调用 ssh-add,而且,ssh-agent 与我们将要用来自动化备份工作的 cron 调度进程并不直接兼容。cron 进程不能与 ssh-agent 通信的原因是,cron 作业是作为 cron 的子进程来执行,这样它们就不会继承 $SSH_AUTH_SOCK shell 变量。
幸运的是,有一个解决方案不但可以消除 ssh-agent 和 ssh-add 的局限,而且可以让我们使用 cron 来自动进行各种需要对其他机器进行安全地无密码访问的过程。在他 2001 年发表的三篇 developerWorks 系列文章中,即 OpenSSH key management(参阅 参考资料 以获得链接),Daniel Robbins 介绍了一个名为 keychain 的 shell 脚本,它是 ssh-add 和 ssh-agent 的一个前端,简化了整个无密码的过程。随着时间的过去,keychain 脚本已经经历了很多改进,现在由 Aron Griffis 维护,其最新的 2.3.2-1 发布版本公布于 2004 年 6 月 17 日。
下载并安装了 keychain 后,使用它就很简单了。只需要登录到每台机器并将下面两行添加到每个 .bash_profile 文件:
keychain id_dsa
. ~/.keychain/$HOSTNAME-sh
在您第一次重新登录到每台机器时,keychain 将向您询问口令。不过,除非机器被重新启动,否则,以后再登录时,keychain 将不会再要求您重新输入口令。最好的是,cron 任务现在可以使用 OpenSSH 命令来安全地访问远程的机器,而不需要交互地使用口令。更好的安全和更容易的使用,现在我们已经兼得。
KeyChain 2.3.2; http://www.gentoo.org/projects/keychain
Copyright 2002-2004 Gentoo Technologies, Inc.; Distributed under the
GPL
* Initializing /home/accountname/.keychain/localhost.localdomain-sh
file…
* Initializing /home/accountname/.keychain/localhost.localdomain-csh
file…
* Starting ssh-agent
* Adding 1 key(s)…
Enter passphrase for /home/accountname/.ssh/id_dsa: (enter passphrase)
清单 9. 在每台机器上初始化
脚本化备份过程
我们的下一个任务是创建执行必要的备份过程的 shell 脚本。目标是执行服务器 1 和 2 的完全数据库备份。在我们的例子中,每个服务器都运行着 MySQL 数据库服务器,我们使用 mysqldump 命令行工具来将一些数据库表导出到一个 SQL 输入文件中。
#!/bin/sh
# change into the backup_agent directory where data files are stored.
cd /home/backup_agent
# use mysqldump utility to export the sites database tables
mysqldump -u sitedb -pG0oDP@sswrd –add-drop-table sitedb –tables
tbl_ccode tbl_machine tbl_session tbl_stats > userdb.sql
# compress and archive
tar czf userdb.tgz userdb.sql
清单 10. 服务器 1 的 dbbackup.sh shell 脚本
在服务器 2 上,我们将设置一个类似的脚本来备份站点数据库中给出的独有表单。每个脚本都通过下面的步骤标记为可执行的:
[server1]:$ chmod +x dbbackup.sh
在服务器 1 和 2 上设置了 dbbackup.sh 后,我们返回到离线的数据服务器,在那里我们将创建一个 shell 脚本来调用各个远程 dbbackup.sh 脚本并随后传输压缩的(.tgz)数据文件。
#!/bin/sh
# use ssh to remotely execute the dbbackup.sh script on server 1
/usr/bin/ssh backup_agent@server1.com “/home/backup_agent/dbbackup.sh”
# use scp to securely copy the newly archived userdb.tgz file
# from server 1. Note the use of the date command to timestamp
# the file on the offsite data server.
/usr/bin/scp backup_agent@server1.com:/home/backup_agent/userdb.tgz
/home/backups/userdb-$(date +%Y%m%d-%H%M%S).tgz
# execute dbbackup.sh on server 2
/usr/bin/ssh backup_agent@server2.com “/home/backup_agent/dbbackup.sh”
# use scp to transfer transdb.tgz to offsite server.
/usr/bin/scp backup_agent@server2.com:/home/backup_agent/transdb.tgz
/home/backups/transdb-$(date +%Y%m%d-%H%M%S).tgz
清单 11. 用在离线的数据服务器上的 backup_remote_servers.sh shell 脚本
backup_remote_servers.sh shell 脚本使用 ssh 命令来执行远程服务器上的脚本。由于我们已经设置的无密码的访问,ssh 命令可以通过离线的服务器在服务器 1 和 2 上远程地执行命令。感谢 keychain,整个认证过程现在可以自动完成。
Linux操作系统下Samba服务器的应用 (1)
系统为fedora2,初始仅安装了development tools。
1、安装
Samba server需要用到三个软件包,即:samba服务器软件包、samba-client (samba客户端工具)、samba-common(通用工具和库)。 由于我这个做实验的fedora在安装时只安装了development tools,所以这里会存 在一个软件的依存关系,需要先安装一个rpmdb的软件包(rpmdb是解决软件安装储 存关系的数据库),才可以继续安装samba的软件包。 插入第三张光盘,挂载,并cd到Fedora/RPMS路径 ls | grep rpmdb 列出当前包括rpmdb的rpm包,即下面的rpmdb-fedora-2- 0.20040513.i386.rpm rpm -ivh
rpmdb-fedora-2-0.20040513.i386.rpm /*这个软件处在fedora的第三 张光盘Fedora/RPMS里*/ rpm -ivh –aid samba*.rpm /*安装samba软件包,samba*.rpm处于fedora的第一 张光盘Fedora/RPMS里,–aid是与前面安装rpmdb一起对应使用的,初始安装 samba软件包时匆必需要*/ rpm -qa |grep samba /*用rpm查询当前安装了的包含samba的文件,-ql中的 q=query,a=all */ rpm -ql samba-3.0.3-5 rpm -ql samba-client-3.0.3-5 rpm -ql samba-common-3.0.3-5 /*检查samba软件包的内容,-ql中 q=query,l=list*/
2、介绍几个常用的samba工具
smbtree 显示局域 中的所有共享主机和目录列表 smbclient 显示/登录局域 中的共享主机/目录 用法:smbclient -L -N win2000 /*匿名登录win2000这台机器,-N表示匿名,-L 表示对共享目录的列表*/ smbclient //win2000/share -U username%password /*用username和password这 个smb用户及口令登录win2000这台机器下的一个share目录,用这个工具登录成功 后会出现smb: >提示符,这里提二个该状态下的命令:put、get,跟unix/linux 下的ftp命令类似,注意的是put后必须跟二个参数,如: smb:>put /root/install.log install.log,即不但指定上传本地的某个文件,还需要指定 上传到另一台机器的参数,这里后面的install.log即是上传到另一台机器时后的 名称*/ smbmount //win2000/share /mnt -o username=username%password /*将远程共 享目录挂载到本地,注意完成后使用umount取消挂载*/
3、samba服务器的配置
samba服务器的配置文件是smb.conf,位于/etc/samba/smb.conf 大家得注意里面的几个常用改动参数,[global]里的workgroup、security 下面来看一个samba配置文件里如何设置一个share vi /etc/samba/smb.conf 在[gobal]里进行一些修改 workgroup = workgroup security = share 然后按shift+g(vi下的用法,即到该文件的末尾)到达smb.conf文件的最后,新 建一个共享 [sharedocs] comment = share documents /*标注文档类型*/ path = /usr/share/doc /*指定共享路径*/ public = yes /*确定发布共享*/ 保存退出(这里会用到vi的相关指令,大家可进行相关vi的使用方法),然后重 启samba服务 service smb restart 用smbclient -L localhost进行samba服务器的测试。
“““““
Linux操作系统下Samba服务器的应用 (2)
4、samba用户帐
添加samba用户,须添加一个系统帐 ,然后再加入samba帐户 useradd redhat /*增加redhat用户*/ smbpasswd -a redhat /*直接为redhat帐户添加smb服务密码,-a参数为增加smb用 户,-x为删除smb用户*/ 下面来看一个共享目录设置有效用户的例子。在/etc/samba/smb.conf中添加一个共享目录:
[redhat]
comment = redhat ‘s files
path = /var/redhat
public = no
valid users = tom @redhat
/*设定有效用户为tom或者是redhat组的用户*/
保存退出,重启smb服务 这里有必要提到samba用户帐户映射这具概念,出于帐 安全考虑,为防止samba 用户通过samba帐 来猜测系统用户的信息,所以,就出现了 samba用户映射,如 ,将上面的tom帐户映射成其他的名称,然后用其他的名称如jack、rhood都可以 登录,其权限及登录密码都与tom一样。 实现帐户映射的方法:先在/etc/samba/smb.conf中的帐户映射服务打开,方法很 简单,找到username map = /etc//samba/smbusers这一行,将其前面的;去掉即 可(linux中;表示关闭,#表示注释,注意与freebsd中的# 概念区别开来),然 后修改/etc/samba/smbusers vi /etc/samba/smbusers 在里面添加一行 tom = jack rhood 保存退出,重启smb服务,然后就可以用jack及rhood登录redhat共享目录,其权 限及登录密码与tom完全一致。
5、samba服务器的权限设定
我们用一个samba的配置文件的例子来说明这个问题:
[redhat]
comment = redhat ‘s files
path = /var/redhat
public = no
valid = tom @redhat /*有效用户*/
write list = tom @redhat /*具有写权限的用户*/
create mask = 0660
/*能够创建文件的权限,这里是660,即rw-rw—-权限,即
属主和同组人有可读可写权限*/
directory mask = 0660 /*对目录的控制权限,这里亦是660权限*/
[补充一下权限方面知识:r=读,八进制中是4 w=写,八进制代码是2 x=执行,八 进制代码是1,在上面的rw-rw—-中,9个字符划为三份,前三个字符为文件属主 的权限(即rw-,可读可写),中间三个字符为同组人的权限(rw-,可读可写), 后面则是其他人的权限(—,不可读不可写不可执行),换成八进制,r+w+- =2+1+0=6 ,所以构成了mask = 0660 之类的格式,至于770,775之类的权限,大 家可以自行去想了。
6、举例
场景:tom和jack为sales组的成员,rhood和joeys是技术部的成员,公司要求组 建samba服务器,每个人都有自己的samba帐户,分别有sales组和tech二个组,各 组成员不得跨组访问,不给成员分配shell 分析后的所需做的工作为:
1、为所有用户建立samba帐
2、建sales和tech二个组,并为组分配权限
3、为所有成员设定不分配shell
4、将各自的文件共享出来
操作:
groupadd sales /*建组sales*/
groupadd tech
useradd -g sales -s /bin/false tom
/*将tom加入sales组(-g sales),并不分
配shell权限(-s /bin/false) */
useradd -g sales -s /bin/false jack
smbpasswd -a tom
smbpasswd -a jack
useradd -g tech -s /bin/false rhood
useradd -g tech -s /bin/false joeys
smbpasswd -a rhood
smbpasswd -a joeys
mkdir /home/sales /home/tech /*分别为sales和tech建立目录*/
chgrp sales /home/sales /*改变目录的属主*/
chgrp tech /home/tech
chmod 770 /home/sales /*改变目录的权限,为rwxrwx—*/
chmod 770 /hoem/tech
chmod g+s /home/sales /*为目录增加进程属主,
这一操作是为了确保该目录永
远地属于属主*/
chmod g+s /home/tech
ls -ld /home/sales /home/tech /*查看目录的权限*/
vi /etc/samba/smb.conf
先将[global]里的security安全级别设为user
security = share
然后按shift+g到配置文件的末尾设置目录的共享
[sales]
comment = sales
path = /home/sales
public = no
valid users = @sales
write list = @sales
create mask = 0770
directory mask = 0770
[tech]
comment = tech
path = /home/tech
public = no
valid users = @tech
write list = @tech
create mask = 0770
directory mask = 0770
保存退出,用tail -f /etc/samba/smb.conf来确认一下刚才修改的配置,确认正确,然后重启smb服务。
Linux操作系统上如何阻止系统攻击者
在 络攻击环境下,这却是可能发生的。当一个攻击者利用一个系统漏洞非法入侵进入到你的系统。当你使用ps命令列出系统中的所有的进程时,却看不到什么异常的证据。你查看你的password文件,一切也是那么的正常。到底发生了什么事情呢?当系统进入到你的系统以后,第一步要做的事情就是取代系统上某些特定的文件:如netstat命令等。当你使用netstat -a命令时,就不会显示系统攻击者存在的信息。当然攻击者将替代所有的可能泄露其存在的文件。一般来说包括:
/bin/ps
/bin/netstat
/usr/bin/top
由于这些文件已经被取代。所以简单的利用ls命令查看这些文件是看不出什么破绽的。有若干种方法你可以验证系统文件的完整性。如果你安装的是Red Hat, Caldera, TurboLinux或任何使用RPM的系统。你可以利用RPM来验证系统文件的完整性:
首先你应该查明你的那些你需要查看的文件来自哪个软件包,使用rpm命令你可以查明某个文件属于某个包:
# rpm -qf /bin/netstat
net-tools-1.51-3
然后,可以扫描整个rpm包来查看那些发生了改变。对没有发生改变的包使用该命令将没有任何输出信息,如下所示:
# rpm -V net-tools
#
将netstat的5.2版本的二进制可执行文件替换为6.0的版本以后再使用该命令的结果为:
…….T /bin/netstat
这说明/bin/netstat/文件已经被修改。若我使用rpm -qf测试ps和top命令可以得到其属于包procps,然后在验证包procps的完整性。下面是一个被黑的站点的结果:
# rpm -qf /bin/ps
procps.2.0.2-2
# rpm -V procps
SM5..UGT /bin/ps
SM5..UGT /usr/bin/top
攻击者入侵到系统中,并且用自己的ps及top命令替代了我们系统中的命令。从而使管理员看不到其运行的进程,也许是一个sniffer来监听所有的用户所有进出 络的数据并找寻到密码信息。
下面是一个小的script来扫描你系统的所有的rpm库,并检查所有的包是否被篡改。但是应该注意的是并不是所有该scripts 告的问题都是说明该系统文件被攻击者破坏。例如你的apssword文件一般肯定和你安装系统时是不同的:
#!/bin/bash
#
# Run through rpm database and report inconsistencies
#
for rpmlist in `rpm -qa` # These quotes are back quotes
do
echo —– $rpmlist —– ; rpm -V $rpmlist
done > /tmp/rpmverify.out
# md5sum /etc/passwd
d8439475fac2ea638cbad4fd6ca4bc22 /etc/passwd
# md5sum /bin/ps
6d16efee5baecce7a6db7d1e1a088813 /bin/ps
# md5sum /bin/netsat
b7dda3abd9a1429b23fd8687ad3dd551 /bin/netstat
这些数据是我的系统上的文件的指纹信息。不同的系统上的文件的 指纹信息可能是不同的,你应该是使用md5sum来计算自己系统文件的指纹信息。下面是一些你应该创建指纹信息的文件;
/usr/bin/passwd
/sbin/portmap
/bin/login
/bin/ls
/usr/bin/top
/etc/inetd.conf
/etc/services
通过指纹信息你可以决定是否有系统文件被修改。
(T115)
如何配置安全的SCO UNIX 络系统
一个 络系统的安全程度,在很大程度上取决于管理者的素质,以及管理者所采取的安全措施的力度。在对系统进行配置的同时,要把安全性问题放在重要的位置。
SCO UNIX,作为一个技术成熟的商用 络操作系统,广泛地应用在金融、保险、邮电等行业,其自身内建了丰富的 络功能,具有良好的稳定性和安全性。但是,如果用户没有对UNIX系统进行正确的设置,就会给入侵者以可乘之机。因此在 络安全管理上,不仅要采用必要的 络安全设备,如:防火墙等,还要在操作系统的层面上进行合理规划、配置,避免因管理上的漏洞而给应用系统造成风险。
下面以SCO UNIX Openserver V5.0.5为例,对操作系统级的 络安全设置提几点看法,供大家参考。
合理设置系统安全级别
SCO UNIX提供了四个安全级别,分别是Low、Traditional、Improved和High级,系统缺省Traditional级;Improved级达到美国国防部的C2级安全标准;High级则高于C2级。用户可以根据自己系统的重要性及客户数的多少,设置适合自己需要的系统安全级别,具体设置步骤是:scoadmin→system→security→security profile manager。
合理设置用户
建立用户时,一定要考虑该用户属于哪一组,不能随便选用系统缺省的group组。如果需要,可以新增一个用户组并确定同组成员,在该用户的主目录下,新建文件的存取权限是由该用户的配置文件.profile中的umask的值决定。umask的值取决于系统安全级, Tradition安全级的umask的值为022,它的权限类型如下:
文件权限: – r w – r – – r – –
目录权限: d r w x r – x r – x
此外,还要限制用户不成功登录的次数,避免入侵者用猜测用户口令的方法尝试登录。为账户设置登录限制的步骤是:Scoadmin–〉Account Manager–〉选账户–〉User–〉Login Controls–〉添入新的不成功登录的次数。
指定主控台及终端登录的限制
如果你希望root用户只能在某一个终端(或虚屏)上登录,那么就要对主控台进行指定,例如:指定root用户只能在主机第一屏tty01上登录,这样可避免从 络远程攻击超级用户root。设置方法是在/etc/default/login文件增加一行:CONSOLE=/dev/tty01。
注意:设置主控台时,在主机运行中设置后就生效,不需要重启主机。
如果你的终端是通过Modem异步拨 或长线驱动器异步串口接入UNIX主机,你就要考虑设置某终端不成功登录的次数,超过该次数后,锁定此终端。设置方法为:scoadmin→Sysrem→Terminal Manager→Examine→选终端,再设置某终端不成功登录的次数。如果某终端被锁定后,可用ttyunlock〈终端 〉进行解锁。也可用ttylock〈终端 〉直接加锁。
文件及目录的权限管理
有时我们为了方便使用而将许多目录和文件权限设为777或666,但是这样却为黑客攻击提供了方便。因此,必须仔细分配应用程序、数据和相应目录的权限。发现目录和文件的权限不适当,应及时用chmod命令修正。
口令保护的设置
合理设置等价主机
设置等价主机可以方便用户操作,但要严防未经授权非法进入系统。所以必须要管理/etc/hosts.equiv、.rhosts和.netrc这3个文件。其中,/etc /hosts.equiv列出了允许执行rsh、rcp等远程命令的主机名字;.rhosts在用户目录内指定了远程用户的名字,其远程用户使用本地用户账户执行rcp、rlogin和rsh等命令时不必提供口令;.netrc提供了ftp和rexec命令所需的信息,可自动连接主机而不必提供口令,该文件也放在用户本地目录中。由于这3个文件的设置都允许一些命令不必提供口令便可访问主机,因此必须严格限制这3个文件的设置。在.rhosts中尽量不用“+ +”,因为它可以使任何主机的用户不必提供口令而直接执行rcp、rlogin和rsh等命令。
合理配置/etc/inetd.conf文件
UNIX系统启动时运行inetd进程,对大部分 络连接进行监听,并且根据不同的申请启动相应进程。其中ftp、telnet、rcmd、rlogin和finger等都由inetd来启动对应的服务进程。因此,从系统安全角度出发,我们应该合理地设置/etc/inetd.conf文件,将不必要的服务关闭。关闭的方法是在文件相应行首插入“#”字符,并执行下列命令以使配置后的命令立即生效。
#ps-ef | grep inetd | grep -v grep
#kill -HUP 〈 inetd-PID 〉
合理设置/etc/ftpusers文件
在/etc/ftpuser文件里列出了可用FTP协议进行文件传输的用户,为了防止不信任用户传输敏感文件,必须合理规划该文件。在对安全要求较高的系统中,不允许ftp访问root和UUCP,可将root和UUCP列入/etc/ftpusers中。
合理设置 段及路由
在主机中设置TCP/IP协议的IP地址时,应该合理设置子 掩码(netmask),把禁止访问的IP地址隔离开来。严格禁止设置缺省路由(即:default route)。建议为每一个子 或 段设置一个路由,否则其他机器就可能通过一定方式访问该主机。
不设置UUCP
UUCP为采用拨 用户实现 络连接提供了简单、经济的方案,但是同时也为黑客提供了入侵手段,所以必须避免利用这种模式进行 络互联。
删除不用的软件包及协议
在进行系统规划时,总的原则是将不需要的功能一律去掉。如通过scoadmin–〉Soft Manager去掉X Window;通过修改/etc/services文件去掉UUCP、SNMP、POP、POP2、POP3等协议。
正确配置.profile文件 .profile文件提供了用户登录程序和环境变量,为了防止一般用户采用中断的方法进入$符 状态,系统管理者必须屏蔽掉键盘中断功能。具体方法是在.porfile首部增加如下一行:
trap ‘ ‘ 0 1 2 3 5 15
创建匿名ftp
如果你需要对外发布信息而又担心数据安全,你可以创建匿名ftp,允许任何用户使用匿名ftp,不需密码访问指定目录下的文件或子目录,不会对本机系统的安全构成威胁,因为它无法改变目录,也就无法获得本机内的其他信息。注意不要复制/etc/passwd、/etc/proup到匿名ftp的etc下,这样对安全具有潜在的威胁。
应用用户和维护用户分开
金融系统UNIX的用户都是最终用户,他们只需在具体的应用系统中完成某些固定的任务,一般情况下不需执行系统命令(shell),其应用程序由.profile调用,应用程序结束后就退到login状态。维护时又要用root级别的su命令进入应用用户,很不方便。可以通过修改.profile 文件,再创建一个相同id用户的方法解决。例:应用用户work有一个相同id相同主目录的用户worksh, 用户work的.profile文件最后为:
set — `who am i`
case $1 in
work ) exec workmain;exit;;
worksh ) break;;
esac
这样当用work登录时,执行workmain程序;而用worksh登录时,则进入work的$状态。
(T115)
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!