当前位置: 首页 > 面试题库 >

如何在Linux中限制用户命令

姬康平
2023-03-14
问题内容

我有一个用户组:“演示”。

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

或者,将策略设置为对除“ ssh”和“ cat”命令之外的所有命令具有访问权限。

谢谢


问题答案:

您可以通过许多不同的方法来实现这一目标。我将列出几种可能的解决方案之一。

我建议使用几个不同的保护层,以防止用户运行不应被允许访问的命令。此处的所有说明均假定用户具有自己的/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 vi
alias alias="printf ''"

请查看bash命令的完整列表以获取更多信息。您必须确保该alias alias="printf ''"命令是列表中的最后一个命令,否则您将无法为所有这些命令加上别名。

注意 运行以下命令将搜索系统上几乎所有可用的命令,并输出一个现成的文件,其中将几乎对所有可用命令进行预锯齿。该 [ 命令是test
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

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则将难以维护应该和不应该为哪些功能命名的别名,并且如果需要在任何内容上更改别名您将不得不单独更改所有这些。另外,由于用户可以使用vimvi查看文件,因此他们可以查看其内容.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.sh
fi

这应该可以助您一臂之力,但是请记住,几乎总有一些方法可以规避限制。

另外,请随时混入此答案中的信息以适合您的需求。这些无疑也可以与其他一些限制结合在一起。

问:我需要用户有权访问fgbg,但是我不希望他们能够访问aptitudebash

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命令

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


 类似资料:
  • 用户,权限管理 用户是 Unix/Linux 系统工作中重要的一环,用户管理包括用户与组账号的管理。 在 Unix/Linux 系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限。 Unix/Linux 系统中的 root 账号通常用于系统的维护和管理,它对 Unix/Linux 操作系统的所有部分具有不受限制的访问权限。 在 Unix/Li

  • 本文向大家介绍如何在Linux中使用diff命令,包括了如何在Linux中使用diff命令的使用技巧和注意事项,需要的朋友参考一下 diff命令逐行分析并显示两个文件之间的更改列表。作为一种特殊情况,diff将标准输入的副本与其自身进行比较。本文介绍“如何在Linux中使用diff命令。 “ diff”命令的期货– 识别一个文件版本之间的更改 比较两个配置或程序文件 创建一个可以与Linux /

  • 我需要限制使用weblogic登录我的web应用的用户数量。 找到的解决方案是oracle documents“weblogic.http.session.maxConcurrentRequest属性限制会话的并发请求数。如果给定会话的并发请求数超过指定值,servlet容器将开始拒绝请求。默认情况下,此属性设置为-1,这表示servlet容器不施加任何限制。” 但不知道在哪里或如何设置这些设置。

  • 问题内容: 我有点担心可以在共享计算机上使用的资源量。有什么方法可以测试管理员对我可以使用的资源量是否有限制?如果可以的话,为了提出更完整的问题,我该如何设置这种限制? 谢谢。 问题答案: 对于与流程相关的限制,您可以浏览一下(阅读文件中的注释,使用google或使用以获得更多信息)。而且正如jpalecek指出的那样,您可以用来查看(并可能修改)所有当前有效的限制。 您可以使用该命令查看磁盘配额

  • 问题内容: 我已经读过有关限制目录大小的信息-例如创建大文件,格式化,装入等等。但这一切都非常复杂。是否存在实用程序或其他对现有目录设置限制的工具? 问题答案: 配额基于文件系统,但是您始终可以创建虚拟文件系统,并使用usrquota和/或grpquota标志将其安装在特定(空)目录上。 步骤将为: 创建安装点 创建一个充满/ dev / zero的文件,其大小足以达到您要为虚拟文件系统保留的最大

  • 本文向大家介绍如何在Linux上限制网络带宽,包括了如何在Linux上限制网络带宽的使用技巧和注意事项,需要的朋友参考一下 您是否曾经与多个设备共享网络带宽?如果您曾经处于一个应用程序占用了所有流量的位置,那么您是系统管理员还是Linux用户,您将需要发现如何控制应用程序的上载和下载速度,以确保您的带宽并不完全被单个应用程序占用。本文给出了有关如何在Linux上限制网络带宽的想法。 限制网络带宽