您可以通过许多不同的方法来实现这一目标。我将列出几种可能的解决方案之一。
我建议使用几个不同的保护层,以防止用户运行不应被允许访问的命令。此处的所有说明均假定用户具有自己的
/home/[username]目录,并且其外壳程序位于,
/bin/bash并且您希望他们在登录系统时使用bash
Shell。
1) 将用户的bash更改为受限bash模式,以便他们不能更改目录
(如果您的系统上没有受限bash模式,此链接将为您提供更多信息)
chsh -s /bin/rbash [username]
2)更改目录权限,以便只有用户可以编辑其主目录的内容
chmod 755 /home/[username]
3)删除用户的
.bashrc文件
rm /home/[username]/.bashrc
该网站提供了有关
.bashrc在这种情况下删除它的一个好主意的更多信息。
4)创建一个,
.bash_profile并为要禁用的所有命令添加“安全”别名
./bash_profile文件示例
alias apt-get="printf ''" alias aptitude="printf ''" [...] alias vi="vi -Z" #this is vi's safe mode and shell commands won't be run from within vialias alias="printf ''"
请查看bash命令的完整列表以获取更多信息。您必须确保该
alias alias="printf''"命令是列表中的最后一个命令,否则您将无法为所有这些命令加上别名。
注意 运行以下命令将搜索系统上几乎所有可用的命令,并输出一个现成的文件,其中将几乎对所有可用命令进行预锯齿。该 [
命令是test
bash中 的 命令 。因此,如果您在文件中看到它,那不是错误。
#search /bin and /usr/bin for any commands that exist on our systemls /bin -1 > commands_on_system.txt && ls /usr/bin -1 >> commands_on_system.txt#format and save this information to a bash variableIFS=$'n' GLOBIGNORE='*' command eval 'COMMANDS_ON_SYSTEM=($(cat ./commands_on_system.txt))'IFS=$'n' COMMANDS_ON_SYSTEM=($(sort <<<"${COMMANDS_ON_SYSTEM[*]}"))unset IFS#save these commands in aliased format for easy usagefor linux_command in "${COMMANDS_ON_SYSTEM[@]}"do : #you can change how this works to automatically #setup the command file for you echo "alias ${linux_command}="printf ''"" >> ./startup_functions_for_beginners.shdone
5)通过将vi命令别名为受限模式来禁用vi中的shell命令
。语法为
alias vi="vi-Z",但是请访问此站点以获取更多信息。
6)将用户的所有权更改
.bash_profile为root
chown root:root /home/[username]/.bash_profile
7)最后,删除用户的写权限
.bash_profile
chmod 755 /home/[username/.bash_profile]
现在,当用户登录后,他们将无法更改目录,您不希望他们使用的所有命令将输出相同的信息,就像用户在
[ENTER]
未指定命令的情况下按下键一样,并且您的
/bin/bash功能保持不变完整。
根据您选择使用哪种功能或不使用这种方式别名,用户可能仍然可以绕过您实现的某些控件。但是,由于我们实现了一些安全缓冲区,因此用户确实必须了解计算机系统才能执行任何危险 *** 作。
在相关说明上,您可能需要考虑一些事项,如果直接将这些别名放置到每个用户的别名中,
.bash_profile则将难以维护应该和不应该为哪些功能命名的别名,并且如果需要在任何内容上更改别名您将不得不单独更改所有这些。另外,由于用户可以使用
vim或
vi查看文件,因此他们可以查看其内容
.bash_profile并了解他们有什么限制和没有什么限制。
为了解决这个问题,我建议。
1)将所有别名放在用户无法访问的目录中(粘贴
.bash_profile此处的内容)
/[path_to_file]/startup_functions_for_beginners.sh
2)将别名输入到它们的
.bash_profile
改进的./bash_profile文件示例
if [[ -f /[path_to_file]/startup_functions_for_beginners.sh ]]; then . /[path_to_file]/startup_functions_for_beginners.shfi
这应该可以助您一臂之力,但是请记住,几乎总有一些方法可以规避限制。
另外,请随时混入此答案中的信息以适合您的需求。这些无疑也可以与其他一些限制结合在一起。
问:我需要用户有权访问
fg和
bg,但是我不希望他们能够访问
aptitude或
bash
alias apt-get="printf ''" #the user won't be able to run this alias aptitude="printf ''" #the user won't be able to run this alias bash="printf ''" #the user won't be able to run this #alias fg="printf ''" #this will run as a bash built-in #alias bg="printf ''" #you actually don't need to include these in your script
哈佛网站上
的常用命令列表(不详尽)
在将程序安装到Linux时,您可以使用的功能会发生变化。建议您在步骤4中运行上面列出的命令,以帮助在安装新命令后查找新命令。
应谨慎对待编辑器,因为某些编辑器允许从程序内部执行shell命令
nanoemacspicosedvivim
其他一切
exitlogoutpasswdrloginsshsloginyppasswdmailmesgpinetalkwriteasawkbccccshdbxf77gdbgprofkillldlexlintmakemaplemathnicenohuppcperlprofpythonshyaccxcalcaproposfindinfomanwhatiswhereiscdchmodchownchgrpcmpcommcpcryptdifffilegrepgziplnlslsofmkdirmvpwdquotarmrmdirstatsyncsorttarteetrumaskuncompressuniqwccatfoldheadlpqlprlprmmorelesspageprtailzcatxvgvxpdfftprsyncscpaliaschquotachshclearechopbmpopdpushdscriptsetenvsttynetstatrshsshbgfgjobs^y^zclockdatedfduenvfingerhistorylastlpqmanpathprintenvpspwdsetspendsttytimetopuptimewwhowhoiswhoamigimpxfigxvxvscanxpaintkpaintmplayerrealplaytimidityxmmsabiwordaddbibcoldictiondiffmkdvipsexplaingraphyphenispelllatexpdfelatexlatex2htmllookbibmacrefndxneqnnroffpicpsditptxreferroffbibsortbibspellispellstyletbltextpicwgetgrabmodeimportxdpyinfoxkillxlockxtermxwininfohtml2pslatex2htmllynxnetscapesitecopyweblint
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)