如何在Linux中限制用户命令[关闭]

2024-02-06

我在一个组中有一个用户:“demo”。

我想设置该用户只能运行 10 个命令的策略,例如vim, nano, cd, etc.

或者,将策略设置为有权访问除ssh and cat命令。


有很多不同的方法可以实现这一目标。我将列出几种可能的解决方案之一。

我建议使用几个不同的保护层来防止用户运行他们不应该被允许访问的命令。这里的所有说明都假设用户有自己的/home/[username]目录,他们的 shell 是/bin/bash,并且您希望他们在登录系统时使用 bash shell。

  1. 将用户的 bash 更改为受限 bash 模式,以便他们无法更改目录(如果您的系统上没有受限制的 bash 模式,这个链接 http://www.gnu.org/software/bash/manual/html_node/The-Restricted-Shell.html将为您提供帮助并提供更多信息)chsh -s /bin/rbash [username]

  2. 更改目录权限,以便只有用户可以编辑其主目录的内容

chmod 755 /home/[username]

  1. 删除用户的.bashrc file

rm /home/[username]/.bashrc 这个网站 http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html有更多信息说明为什么删除该文件可能是一个好主意.bashrc在这个情况下。

  1. 创建一个.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 vi
alias alias="printf ''"  

请检查bash 命令的完整列表 http://ss64.com/bash/了解更多信息。您必须确保alias alias="printf ''"command 是列表中的最后一个命令,否则您将无法为所有这些命令添加别名。

Note运行下面的命令将搜索系统上几乎所有可用的命令,并输出一个现成的文件,其中几乎所有可用的命令都已预先别名。这[命令是test command在bash中。因此,如果您在文件中看到这一点,则这不是错误。

#search /bin and /usr/bin for any commands that exist on our system
ls /bin -1 > commands_on_system.txt && ls /usr/bin -1 >> commands_on_system.txt

#format and save this information to a bash variable
IFS=$'\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 usage
for 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.sh
done
  1. 通过将 vi 命令别名为受限模式来禁用 vi 中的 shell 命令
    语法是alias vi="vi -Z",但是请看这个网站 http://vimdoc.sourceforge.net/htmldoc/starting.html#-Z了解更多信息。

  2. 更改用户的所有权.bash_profile to root
    chown root:root /home/[username]/.bash_profile

  3. 最后,删除用户的写入权限.bash_profile
    chmod 755 /home/[username/.bash_profile]

现在,当用户登录时,他们将无法更改目录,您不希望他们使用的所有命令将输出相同的信息,就像用户按下[ENTER]没有指定命令的键,以及您的/bin/bash功能保持完好。

根据您选择以这种方式别名或不以这种方式别名的功能,用户仍然可以绕过您实现的某些控件。然而,由于我们实现了一些安全缓冲区,因此用户确实必须了解计算机系统才能执行任何危险操作。

在相关说明和您可能需要考虑的事情上,如果您直接将这些别名放入每个用户的.bash_profile您将很难维护哪些函数应该使用别名,哪些函数不应该使用别名,并且如果您需要更改任何内容的别名,则必须单独更改所有函数。另外,由于用户可以使用vim or vi要查看文件,他们可以看到其内容.bash_profile并了解他们有哪些限制和没有哪些限制。

为了解决这个问题,我建议。

  1. 将所有别名放在用户无法访问的目录中(粘贴.bash_profile here)

/[path_to_file]/startup_functions_for_beginners.sh

  1. 将别名纳入他们的.bash_profile

改进的 ./bash_profile 文件示例

if [[ -f /[path_to_file]/startup_functions_for_beginners.sh ]]; then
    . /[path_to_file]/startup_functions_for_beginners.sh
fi

这应该会让您上路,但请记住,几乎总有办法规避限制。

另外,请随意重新组合此答案中的信息以满足您的需求。这些绝对可以与许多其他限制结合起来。

问:我需要用户有权访问fg and bg,但我不希望他们能够访问aptitude or 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  

常用命令列表如下哈佛网站 http://www.math.harvard.edu/computing/unix/unixcommands.html(并非详尽无遗)

当您将程序安装到 Linux 时,您可用的内容会发生变化。我建议您运行上面步骤 4 中列出的命令,以帮助在安装新命令后查找它们。

使用编辑器时应小心,因为有些编辑器允许从程序内执行 shell 命令

nano
emacs
pico
sed
vi
vim  

其他一切

exit
logout
passwd
rlogin
ssh
slogin
yppasswd
mail
mesg
pine
talk
write
as
awk
bc
cc
csh
dbx
f77
gdb
gprof
kill
ld
lex
lint
make
maple
math
nice
nohup
pc
perl
prof
python
sh
yacc
xcalc
apropos
find
info
man
whatis
whereis
cd
chmod
chown
chgrp
cmp
comm
cp
crypt
diff
file
grep
gzip
ln
ls
lsof
mkdir
mv
pwd
quota
rm
rmdir
stat
sync
sort
tar
tee
tr
umask
uncompress
uniq
wc
cat
fold
head
lpq
lpr
lprm
more
less
page
pr
tail
zcat
xv
gv
xpdf
ftp
rsync
scp
alias
chquota
chsh
clear
echo
pbm
popd
pushd
script
setenv
stty
netstat
rsh
ssh
bg
fg
jobs
^y
^z
clock
date
df
du
env
finger
history
last
lpq
manpath
printenv
ps
pwd
set
spend
stty
time
top
uptime
w
who
whois
whoami
gimp
xfig
xv
xvscan
xpaint
kpaint
mplayer
realplay
timidity
xmms
abiword
addbib
col
diction
diffmk
dvips
explain
grap
hyphen
ispell
latex
pdfelatex
latex2html
lookbib
macref
ndx
neqn
nroff
pic
psdit
ptx
refer
roffbib
sortbib
spell
ispell
style
tbl
tex
tpic
wget
grabmode
import
xdpyinfo
xkill
xlock
xterm
xwininfo
html2ps
latex2html
lynx
netscape
sitecopy
weblint
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Linux中限制用户命令[关闭] 的相关文章

随机推荐

  • Python 的环境路径不起作用?

    我已在新 PC 上安装了 Python 3 4 Python 可以工作 但我正在尝试让 pip 来解决这个问题 我已经为 Python 创建了一条路径 如下所示 C Python34 python exe 当我运行下面的代码时 C Wind
  • 由于 node-gyp 无法安装 npm:找不到 binding.gyp

    我一整天都在研究这个问题 并尝试了很多不同的事情 卸载节点并安装最新版本 使用 msvs version 标志设置为2010 2011 2012 2013 2015 删除 node gyp 文件夹 将 python 路径添加到 npmrc
  • 在 Python 中使用 Mechanize 获取和捕获 HTTP 响应

    我正在尝试从 python 中的 Mechanize 获取响应代码 虽然我能够获得 200 状态代码 但其他任何内容都不会返回 404 抛出和异常 30x 被忽略 有没有办法获取原始状态码 Thanks 错误会抛出异常 因此只需使用 try
  • 数据类型 date 的日期函数 dateadd 不支持日期部分小时

    当我在 jasper 报告中运行以下查询时 出现异常 net sf jasperreports engine JRException 执行 SQL 语句时出错 Activity Summary Activity Summery Report
  • Ruby on Rails - 数组哈希、多列分组和求和

    我对这个主题有类似的问题Ruby on Rails 数组哈希 按列名分组和求和 https stackoverflow com questions 8500280 ruby on rails hash of arrays group by
  • 具有自动调整单元格大小的 UICollectionView 错误地定位了补充视图

    我正在使用带有流布局的 UICollectionView 并尝试让 collectionView 根据 AutoLayout 约束适当调整单元格的大小 虽然单元格按预期工作 但我添加到 CollectionView 的任何补充视图的布局都遇
  • alpine linux 上的程序段错误。我该如何解决?

    我一直在用 C C 开发 webrtc 数据通道库写了一个程序 https github com hamon in librtcdcpp blob alpine test examples websocket client 2in1 c在
  • Java 7 中是否会包含结构和值类型(如 C# 的)?

    Java 7 中是否会包含结构和值类型 如 C 的 这是 John Rose Oracle JVM 开发人员 关于此提案的博客文章 它已经存在了一段时间 但还没有作为官方 JSR 即使在 java 9 中 这似乎也不太可能发生 http b
  • R 中两个列表的元素组合

    假设我有两个列表 list a lt as list c a b c list b lt as list c d e f 我想递归地组合这些列表 这样结果将是作为向量的组合元素列表 如下所示 1 1 a d 2 1 a e 3 1 a f
  • 从字典中查找单词字谜的最佳算法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我遇到了这样的问题 我有一个列表 它是包含数百万个单词的字典 我输入一个像 OSPT 这样的单词 只有 2 个单词可以组成 STOP 和
  • 从一个表中选择并插入到另一个表中

    我有两张桌子 Table A nid vid 类型 标题 uid Table B id 问题文本 我需要将 Table B 中的记录插入到 Table A 中 我试过这个 INSERT INTO Table A nid vid type t
  • 如何找到原名称已知的重命名文件的新路径?

    考虑以下用例 我正在本地分支上工作 同时在主分支上完成了重构 现在 一些文件 类 已被重命名和 或移动到新位置 合并时 由于缺少类 我收到很多很多导入错误 A B C D E master F G H I J topic In A有我用过的
  • 带箭头键(下一个和后退)的键盘导航用于更改文件名

    我有一堆具有不同文件名的 html 文件 我需要添加一个选项以使用键盘箭头键进行导航 上一个和下一个文件 文件名不是动态的 例如 filename html anotherfile html thirdone html ETC 所以我需要
  • 通过索引检索 JSON 对象的属性?

    假设这个 JSON 对象 var obj set1 1 2 3 set2 4 5 6 7 8 set3 9 10 11 12 set2 属性可以像这样检索 obj set2 有没有办法通过索引检索 set2 属性 它是 JSON 对象的第二
  • 将日期时间转换为毫秒 - C++ - 跨平台

    我想将 20160907 05 00 54 123 格式的字符串转换为毫秒 我知道strptime在 Windows 中不可用 我想在 Windows 和 Linux 中运行我的程序 我也无法使用第三方库 我可以标记字符串并转换它 但是有没
  • 动态规划-硬币变化决策

    我正在复习算法课程中的一些旧笔记 动态规划问题对我来说似乎有点棘手 我遇到一个问题 我们有无限供应的硬币 其中一些面额为 x1 x2 xn 并且我们想要对某个值 X 进行找零 我们正在尝试设计一个动态程序来决定 X 的找零是否可以是否制造
  • Vimdiff 失败并显示“无法读取或写入临时文件”

    我在 Windows 7 上使用 Vim 7 4 我确实有一个自定义 vimrc 文件 但 Vim 和 gVim 都工作正常 当我尝试跑步时vimdiff xxxxx yyyyy 它给出了错误 无法读取或写入临时文件 此问题可能是由 Win
  • PartCover 4.0 仅报告 NUnit 库

    我正在使用 PartCover 4 0 来自Sourceforge 页面 http sourceforge net projects partcover files 最新开发版本 在 Windows 7 x64 上使用 NUnit 2 5
  • javascript滚动到div类的底部

    您好 我正在尝试在 django 中实现一个简单的聊天框 并且想知道如何使用 javascript 滚动到 div 类的底部 基本上 当页面加载时 我希望用户可以看到发送给他们的最新消息而不是最近的消息 我最近不得不做类似的事情 我发现了一
  • 如何在Linux中限制用户命令[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在一个组中有一个用户 demo 我想设置该用户只能运行 10 个命令的策略 例如vim nano cd etc 或者 将策略设置为有权访